Gönderen Konu: mikro C Atmel Pascal  (Okunma sayısı 1013 defa)

Çevrimdışı ipek

  • Profesyonel Üye
  • *****
  • İleti: 2248
mikro C Atmel Pascal
« : 10 Aralık 2016, 12:43:17 »
bu kodu bana hex ve eep'e çevirecek arkadaşlar varmı ?

 Attenuator.mpas           mikroPascal PRO for AVR by mikroElektronika


Kod: [Seç]
      Attenuator.mpas   03.12.2014 17:09:01

program Attenuator;
 {
 Steuerung des Weinschel Attenuators 3200-1 von 0dB bis 127dB.
 
 Autor:                    Hans-Peter Prast, DL2KHP
 Datum:                    15.10.2014
 Prozessor:                ATMega16
 Clock:                    8 MHz, intern
 Version:                  1.0
 Letzte Änderung:          15.10.2014     Programmdatei angelegt angepasst
                           18.10.2014     Programmcode erstellt
                           19.10.2014     Programmcode fertiggestellt
                           05.11.2014     Debugging Programmcode
                           08.11.2014     Debugging Programmcode
                           10.11.2014     Handling für "Offset" geändert
 Attenuator.mpas           mikroPascal PRO for AVR by mikroElektronika
 
 ----------------------------------------------------------------------
 Der Dämpfungswerte des Weinschel Attenuators 3200-1 werden durch die
 Kombination von 8 Einzelwerten in 1dB-Stufen zwischen 0 und 127dB
 eingestellt. Das Kombinationsmuster der einzelnen Stufen ist für jedes
 einzelne dB in einer Tabelle im EEPROM abgelegt. Das EEPROM wird dann mit
 dem dB-Wert als Adresse ausgelesen und der Inhalt des Speicherplatzes an den
 Attenuator ausgegeben.
 Wenn die Taste des Drehgebers gedückt wird, wird der eingestellte Wert als
 Offset übernommen. Die Anzeige zeigt dann anstelle von "Att = xx dB"
 "Out = xx dBm" an, der Anzeigewert wird "0" und der eingestellte Wert wird
 jetzt als Offset angezeigt. Jetzt kann auch ein Wert größer "0", bis zum
 eingestellten Offset, angezeigt werden. Das ist als Hilfe gedacht, wenn Geräte
 z.B. bis 20dBm kalibriert werden sollen. Dann kann ein Wert von 20 dBm angelegt
 werden. Wird dann bei einer Einstellung "Att = -20dB" die Taste am Drehgeber
 betätigt, wird der Wert übernommen und "Out = 0 dBm" angezeigt. Der Anzeige
 entspricht jetzt dem tatsächlichen Ausgangswert. Jetzt kann dann auch bis zum
 eingestellten Offset, über "0" hinaus, bis 20 dBm eine Einstellung vorgenommen
 werden. Ein erneuter Druck auf den Drehgeber schaltet den Offset wieder ab.
 
 Wenn beim Einschalten die Taste Down1x festfehalten wird, kann die Helligkeit
 des Displays mit den Tasten Up10x und Down10x eingestellt werden. Ein Druck auf
 die Taste Up1x beendet die Einstellung. Der Helligkeitswert wird abgespeichert
 und beim Einschalten wieder eingestellt.
 
 
 Belegung EEPROM
 0x000 - 0x07F      Schaltmuster für die Dämpfungswerte
 0x1F0              PWM-Wert für die Hintergrundbeleuchtung
 0x1F1 - 0x1FF      frei
 
 }
 
 // Vereinbarungsteil -------------------------------------------------
 const
 // LCD Parameter -----------------------------------------------------
     k_zeile1 = ' * Attenuator * '; // Startmeldung
     k_zeile2 = ' * Vers.: 1.0 * '; // dito
     b_rs = 6;                             // RS-Bit im Steuerport B
     b_en = 7;                             // EN-Bit im Steuerport B
 // Ports -------------------------------------------------------------
     k_ddr_a = 0xff;                       // Display-Daten, alles Output
     k_ddr_b = %11000000;                  // B0 - B5 Eingang, B6 = RS, B7 = EN
     k_port_b = %00111111;                 // Pull-Up-Widerst. Port B
     k_ddr_d = %10000000;                  // PD0 = B. PD2 = A, PD3 =       PD7 = PWM Displ.
     k_port_d = %01111010;                 // Pull-Up-Widerstände Port D
     k_ddr_c = 0xff;                      // Port C Ansteuerung Dämpfungsglied
 // Taster, Digital-Bits ----------------------------------------------
     b_sw1 = 0;                           // Eingang Taster SW1, up 1x            port B
     b_sw2 = 1;                           // Eingang Taster SW2, down 1x          port B
     b_sw3 = 2;                           // Eingang Taster SW3, up 10x           port B
     b_sw4 = 3;                            // Eingang Taster SW4, down 10x         port B
     b_pwm = 7;                           // PWM Ausgang LCD-Beleuchtung          port D
     b_inc_a = 2;                         // Drehgeber Ausgang A         port D
     b_inc_b = 0;                         // Drehgeber Ausgang B         port D
     b_push = 3;                          // Drehgeber Taster            port D
 // Timer 2, PWM Steuerung --------------------------------------------
     k_tccr2 = %01101100;                 // Fast PWM, OC-Output, 1:64
     k_pwm = 200;                         // Vorgabe PWM-Steuerung Hell
     k_eep_pwm = 0x1f0;                   // Adresse EEPROM Speicherplatz PWM-Wert
 // User Flag Register ------------------------------------------------
     b_db_neu = 1;                        // dBm-Wert wurde geändert
     b_anz_neu = 2;                       // LCD-Anzeige aktualisieren
     b_taste_up1 = 3;                     // Taste Up 1x wurde betätigt
     b_taste_down1 = 4;                   // Taste Down 1x wurde betätigt
     b_taste_up2 = 5;                     // Taste Up 10x wurde betätigt
     b_taste_down2 = 6 ;                  // Taste Down 10x wurde betätigt
     b_taste_push = 7;                    // Taster Drehgeber
     b_offset = 8;                        // Offset aktiv
 
 // Variablen ----------------------------------------------------------
 var
     v_stat_int1,                         // für Statusabfrage im Interrupt 1
     v_stat_ovint,                        // für Statusabfrage im Overflow-Interrupt
     v_stat_net : boolean;                // für Statusabfrage in der Steuerung
 
     v_pwm,                               // PWM-Wert für die Hintergrundbeleuchtung
     v_pwm_zwi,                           // Zwischenspeicher für PWM-Wert
     v_db,                                // Enthält den Wert der geschalteten dB
     v_db_off,                            // Enthält den Offset für die Anzeige
     v_sw,                                // Enthält den Schalterzustand
     v_temp     : byte;                   // Global
 
     v_db_anz : integer;                  // Variable für den Anzeigewert
 
     v_ufr      : array [1..10] of boolean; // User Flag Register
     v_displ    : array [1..23] of char; // 1. Vorz., 2. Zehner, 3. Einer, Komma
     v_zeile : string[16];
 
 // LCD-Variablen für die Library -------------------------------------
 var LCD_RS : sbit at PORTB6_bit;
 var LCD_EN : sbit at PORTB7_bit;
 var LCD_D4 : sbit at PORTA4_bit;
 var LCD_D5 : sbit at PORTA5_bit;
 var LCD_D6 : sbit at PORTA6_bit;
 var LCD_D7 : sbit at PORTA7_bit;
 var LCD_RS_Direction : sbit at DDB6_bit;
 var LCD_EN_Direction : sbit at DDB7_bit;
 var LCD_D4_Direction : sbit at DDA4_bit;
 var LCD_D5_Direction : sbit at DDA5_bit;
 var LCD_D6_Direction : sbit at DDA6_bit;
 var LCD_D7_Direction : sbit at DDA7_bit;
 
 
 // Ende Vereinbarungsteil ------------------------------------------
 
 
 // Interrupt Service Routinen --------------------------------------
 
 // Drehgeber betätigt ----------------------------------------------
 procedure int0int(); org 0x002;  // Drehgeber wurde betätigt
 begin
 
    if (pind.b_inc_a = pind.b_inc_b) then
         begin
            if v_db <= 126 then
              begin
                v_db := v_db + 1;                // Wert für die Dämpfung incrementieren
              end;
         end;
      if (pind.b_inc_a <> pind.b_inc_b) then
          begin
             if v_db > 0  then
               begin
                  v_db := v_db - 1;               // Wert für die Dämpfung decrementieren
               end;
          end;
      v_ufr[b_db_neu]:= 1;
 end;
 
 
 // Taster Drehgeber betätigt ------------------------------------
 // Bei jeder Betätigung wird das Tasten Flag geändert
 procedure int1int(); org 0x004;  // Taster Drehgeber wurde betätigt
 begin
      if v_stat_int1 = 0 then
        begin
          v_ufr[b_taste_push] := 1;  // Taster Flag setzen
          v_stat_int1 := 1;
        end
        else
          begin
             v_ufr[b_taste_push] := 0;  // Taster Flag wieder löschen
             v_stat_int1 := 0;
          end;
       v_ufr[b_db_neu]:= 1;
 end;
 
 // PWM Steuerung der LCD Hintergrundbeleuchtung ------------------
 // Timer-Overflow Interrupt mit Abfrage der Up-Down-Tasten
 procedure ovf2int(); org 0x008; // Timer 2 Overflow Interrupt
 var
    v_zwi : byte;
 begin
    ocr2 := v_pwm;             // Output Compare Register mit PWM-Wert neu laden
 // Tasten im Timerinterrupt abfragen --------------------------
    v_zwi := 0;
    v_zwi := PINB;                       // Tastereingänge aus Port B laden
    v_zwi := not v_zwi;                  // und invertieren (Low aktiv)
    v_zwi := (v_zwi and 0x0f);           // Taster maskieren (Bit 0 bis 3)
    if (v_stat_ovint = 0) and (v_zwi > 0) then
       begin                             // Nur einmal ausführen solange Taster aktiv
         v_sw := v_zwi;                  // Tasterbits in Variable übernehmen
         v_stat_ovint := 1;              // Statusbit aktiv setzen
         v_ufr[b_db_neu] := 1;           // Berechnung neustarten
       end;
    if (v_zwi = 0) then v_stat_ovint := 0; // Statusbit inaktiv setzen
                                                    // wenn kein Taster mehr betätigt ist
 end;

 // Messwerte vom 10 Bit Analog/Digitalwandler lesen ---------------------
 procedure adcint(); org 0x01C;
 begin
                                       // wird momentan nicht benötigt
 end;
 
 procedure twiint(); org 0x0022;
 begin
                                       // wird momentan nicht benötigt
 end;
 // Ende der Interruptservice-Routinen ---------------------------------
 
 // Unterprogramme -----------------------------------------------------
 procedure p_init;                        // Prozessor initialisieren
 Var i : byte;
 Begin
     DDRA := k_ddr_a;                     // Port A Display, alles Output
     DDRB := k_ddr_b;                     // Disp. PB7=RS, PB6=E, PB0-PB4 = Sw1 - Sw4
     PORTB := k_port_b;                   // Pullup-Widerstände für Sw1 - Sw4 ein
     DDRC := k_ddr_c;                     // Ansteuerung Attenuator, alles Output
     DDRD := k_ddr_d;                     // Datenrichtung Taster + PWM Port
     PORTD := k_port_d;                   // Pull-Up-Widerstände Port D, 7 PWM-Port
     portd.b7 := 1;                       // Hintergrundbeleuchtung ein
 // LCD-Anzeige initialisieren -----------------------------------------
     Lcd_Init();                          // Display initialisieren
      lcd_cmd(_lcd_cursor_off);           // und Cursor ausschalten
     v_zeile :=  k_zeile1;
      lcd_out(1,1,v_zeile);               // Startmeldung ausgeben
     v_zeile :=  k_zeile2;
      lcd_out(2,1,v_zeile);
 // Werte aus EEPROM laden ---------------------------------------------
     v_pwm := EEPROM_Read(k_eep_pwm);          // PWM-Wert aus EEPROM laden
 // PWM Steuerung initialisieren ----------------------------------------
     ocr2 := v_pwm;                            // Output Compare Register vorbesetzen
     tccr2 := k_tccr2;                         // Timer 2 initialisieren
     timsk.toie2 := 1;                         // Timer 2, Overflow Interrupt ein
 // Globale Variablen initialisieren -------------------------------
     v_db := 0;                                // db-Wert löschen
     v_db_off := 0;                            // Offset löschen
     v_sw := 0;                                // Schalter löschen
 // Die Statusbits müssen global vereinbart werden, da lokale Variablen
 // bei jedem Prozedur Aufruf gelöscht werden!
     v_stat_net := 0;                          // Status in der Steuerung
     v_stat_int1 := 0;                         // Status im Interrupt 1
     v_stat_ovint := 0;                        // Status im Overflow-Interrupt
 // User Flag-Register für die Programmsteuerung
     for i := 1 to 10 do v_ufr[i] := 0; // User-Flag Register löschen
     v_ufr[b_db_neu] := 1;                     // Berechnung neustarten
     v_ufr[b_anz_neu]:= 1;                     // Anzeige aktivieren
 
      SREG_I_bit := 1;                         // Global Interrupt enable
 end;
 
 // Hintergrundbeleuchtung einstellen -------------------------------
 // Wird ausgeführt, wenn beim Einschalten die Down1x-Taste gedrückt wird.
 procedure p_pwm;
 begin
    v_zeile := '     Beleuchtung     ';
    lcd_out(1,1,v_zeile);
    v_zeile := '     einstellen      ';
    lcd_out(2,1,v_zeile);
    while pinb.b_sw2 = 0 do;             // Warten bis Down1x-Taste losgelassen wird
    repeat
       if ((pinb.b_sw3 = 0) and (pinb.b_sw4 = 1)) then
         if (v_pwm < 0xff) then           // prüfen ob Maxwert erreicht
             v_pwm := v_pwm + 1;          // Wenn nein, v_pwm incrementieren
       if ((pinb.b_sw4 = 0) and (pinb.b_sw3 = 1)) then
         if (v_pwm > 3) then              // prüfen ob Minwert erreicht
             v_pwm := v_pwm - 1;          // Wenn nein, v_pwm decrementieren
      delay_ms(10);                       // Verzögerung für Tastenbedienung
      until (pinb.b_sw1 = 0);             // Einstellung mit Up1x beenden
      v_zeile := '     Beleuchtung     ';
      lcd_out(1,1,v_zeile);
      v_zeile := '     eingestellt     ';
      lcd_out(2,1,v_zeile);
      EEPROM_write(k_eep_pwm, v_pwm); // PWM-Wert im EEPROM ablegen
      delay_ms(500);                        // Verzögerung für Anzeige
      v_ufr[b_taste_up1] := 0;              // Tasten-Flag wieder löschen
      v_ufr[b_taste_down1] := 0;            // Tasten-Flag wieder löschen
 end;
 
 // Startprozedur, wird nur einmalig beim Einschalten durchgeführt -----------
 procedure p_start;                 // Gerät initialisieren
 begin
 // 1 s Verzögerung für Startbildschirm
    delay_ms(1000);
    if (pinb.b_sw2 = 0) then p_pwm; // Falls Down1x gedückt, Beleuchtung anpassen
    repeat until (pinb.b_sw1 = 1);          // Warten bis Up1x-Taste losgelassen wird
 //Tasteninterrupts einschalten ---------------------------------------------
    mcucr.isc10 := 0;
    mcucr.isc11 := 1;                // Interrupt 1 bei Low-Flanke Taste Drehgeber INT1
    mcucr.isc00 := 0;
    mcucr.isc01 := 1;                // Interrupt 0 bei Low-Flanke Drehgeber "A"            INT0
    gicr.int0 := 1;                  // Interrupt 0 Taste Drehgeber "A" einschalten
    gicr.int1 := 1;                  // Interrupt 1 Taste Drehgeber einschalten
    v_sw := 0;                       // Tasten-Variable löschen
    v_db := 0;
    v_ufr[b_anz_neu] := 1;           // Flag für LCD-Anzeige setzen
 end;

 // Schalter auswerten --------------------------------------------------
 // Hier wird das untere Nibble der Schaltervariable ausgewertet. Momentan
 // werden nur die Einzelbetätigungen der Schalter ausgewertet. Mögliche
 // Doppelbetätigungen können bei Bedarf noch eingefügt werden.
 procedure p_switch;
 begin
    if v_sw > 0 then
       begin                   // Je nach gedrückter Tastenkombination wird
         case v_sw of          // die entsprechende Anweisung ausgeführt
            1: begin           // Taste Down1x betätigt
                  if v_db > 0 then v_db := v_db - 1;
 //                 if v_db <= 126 then v_db := v_db + 1;
               end;
            2: begin           // Taste Up1x betätigt
                  if v_db <= 126 then v_db := v_db + 1;
 //                if v_db > 0 then v_db := v_db - 1;
               end;
            3: begin    end;  // Taste Down1x und Up1x         betätigt
            4: begin           // Taste Down10x betätigt
                  if v_db > 9 then v_db := v_db - 10;
 //                 if v_db <= 117 then v_db := v_db + 10;
               end;
             5: begin    end; // Taste Up1x und Up10x        betätigt
             6: begin    end; // Taste Down1x und Up10x         betätigt
             7: begin   end; // Taste Down1x, Up1x und Up10x betätigt
             8: begin         // Taste Down1x betätigt
                 if v_db <= 117 then v_db := v_db + 10;
 //                 if v_db > 9 then v_db := v_db - 10;
                end;
             9: begin   end; // Taste Down10x und Down1x         betätigt
           10: begin    end; // Taste Down10x und Up1x         betätigt
           11: begin    end; // Taste Down10x, Up1x und Down1x betätigt
           12: begin    end; // Taste Down10x und Up10x         betätigt
           13: begin    end; // Taste Down10x, Up10x und Up1x betätigt
           14: begin    end; // Taste Down10x, Up10x und Down1x betätigt
           15: begin    end; // Taste Down10x, Up10x, Down1x und Up1x betätigt
         end;
         v_sw := 0;
         v_ufr[b_db_neu] := 1;
       end;
 end;
 
 // Bildung des Dämpfungswertes und Anzeigewert generieren -------
 procedure p_db;
 var
     v_ausgabe : byte;
     ee_adress: word;
 begin
 // Prüfen ob ein neuer dB-Wert vorliegt --------------------------
    If v_ufr[b_db_neu] = 1 then              // berechnen wenn neuer dB-Wert vorliegt
        begin
          v_db_anz := v_db;                  // dB-Wert in Anzeigevariable übernehmen
 // Offset prüfen -------------------------------------------------
          if (v_ufr[b_taste_push] = 1) and (v_ufr[b_offset] = 0) then
            begin
               v_db_off := v_db;             // aktueller dB-Wert als Offset übernehmen
               v_ufr[b_offset] := 1;         // Offset-Flag setzen
             end;
          if (v_ufr[b_taste_push] = 0) and (v_ufr[b_offset] = 1) then
            begin
               v_db_off := 0;                // Offset und Flag wieder löschen
               v_ufr[b_offset] := 0;
             end;
 // Anzeigewert bilden ----------------------------------------------
          v_db_anz := (v_db_anz - v_db_off);
 // Vorzeichen setzen
          if (v_db_anz + v_db_off) >= 0 then v_db_anz := (v_db_anz * -1);
 // Schaltwert aus EEPROM laden und an Attenuator ausgeben ----------
          ee_adress := v_db;                 // dB-Wert als Tabellenadresse laden
          v_ausgabe := EEPROM_READ(ee_adress); // Schaltmuster aus Tabelle laden
          PORTC := v_ausgabe;                // Attenuator schalten
          v_ufr[b_db_neu] := 0;              // Flag wieder löschen
          v_ufr[b_anz_neu] := 1;             // Flag für LCD-Anzeige setzen
        end;
 end;
 
 // Bildschirmausgabe -----------------------------------------------
 procedure p_lcd;
 Var
    v_text : array[3] of char;          // Variable für die Ausgabewerte als Text
 begin
 if (v_ufr[b_anz_neu] = 1) Then
    begin                             // Nur ausführen wenn neuer dB-Wert vorliegt
       ShortToStr(v_db_anz, v_text);
           begin
              if (v_ufr[b_offset] = 1) then
                begin
                   v_zeile := 'Out =              dBm';  // wenn Offset geschaltet
                   lcd_out(1,1,v_zeile);
                end
                else
                begin
                   v_zeile := 'Att =              dB ';  // Wenn kein Offset
                   lcd_out(1,1,v_zeile);
                end;
              lcd_out(1,8,v_text);                        // dB-Wert anzeigen
              v_zeile := 'Offset =           dB ';        // Offsetzeile eintragen
              lcd_out(2,1,v_zeile);
              ByteToStr(v_db_off, v_text);
              lcd_out(2,9,v_text);                        // Offset-Wert anzeigen
       end;
       delay_ms(100);                     // Verzögerung für Anzeigestabilität
    end;
    v_ufr[b_anz_neu] := 0;
 end;
 
 // Ende Unterprogramme --------------------------------------------------
 
 // ----------------------------------------------------------------------
 {Hauptprogramm}
 // ----------------------------------------------------------------------
 begin
    p_init;                                // System initialisieren
    p_start;                               // Startprozedur,
    while true do                          // Endlosschleife Hauptprogramm
     begin
        p_switch;                          // Schalter einlesen
        p_db;                              // dB-Wert bilden
        p_lcd;                             // und auf Display ausgeben
      end;
 end.
« Son Düzenleme: 10 Aralık 2016, 18:54:50 Gönderen: ipek »

Çevrimdışı gmngz

  • Yeni Üye
  • *
  • İleti: 10
Ynt: mikro C Atmel Pascal
« Yanıtla #1 : 10 Aralık 2016, 15:14:45 »
Başındaki rakamlar olmadan yüklersen derlerimde. Onları silmek zor geliyor :)

Çevrimdışı gmngz

  • Yeni Üye
  • *
  • İleti: 10
Ynt: mikro C Atmel Pascal
« Yanıtla #2 : 11 Aralık 2016, 11:22:31 »
8mhz dahili osilatör
atmega16
dosyalar linkte
https://yadi.sk/d/yVt9RTmr32vMpM
« Son Düzenleme: 11 Aralık 2016, 11:29:26 Gönderen: gmngz »

Çevrimdışı ipek

  • Profesyonel Üye
  • *****
  • İleti: 2248
Ynt: mikro C Atmel Pascal
« Yanıtla #3 : 11 Aralık 2016, 14:24:20 »
@gmngz öncelikle ilgin ve alakan için çok teşekkür ederim,pascal'dan hiç anlamıyorum.

devreyi simule ettim encoder ve buttonlar kusursuz çalışt,fakat attenuator'a hükmedecek PortC tuşlara göre değer almıyor,initialize olur iken port değişiyor bir dahada değişmiyor,atladığım birşeymi var yada Proteus'un azizliğimi bir kontrol etmeni rica edeceğim...
yazarın orijinal makalesi.....http://www.dl2khp.de/projekte/attenuator.html

buda simulasyon dosyası...http://s2.dosya.tc/server3/ing850/Attenuator.rar.html

iyi geceler dilerim...

Çevrimdışı ipek

  • Profesyonel Üye
  • *****
  • İleti: 2248
Ynt: mikro C Atmel Pascal
« Yanıtla #4 : 11 Aralık 2016, 15:29:25 »
enteresan birde display'da dB ve dBm karakterleri yok,matah almancam ile okumaya çalıştım problem sanırım eeprom kısmı ile ilgili..zira x1 butonlarının birine basarak devreyi çalıştırırsam pwm dimmer kısmına giriyor ve çıkarken değeri eeproma kaydediyor,fakat yeniden çalıştırdığımda ise dimmer fonksiyonu yokmuş gibi davranarak full aydınlıktan açılıyor,hadi bakalım hayırlısı yazar e-maile cevap vermediği için sadece yorum yapabiliyorum..


yazar pascal dosyasını pdf dosyasına yazmış,bende sayfa sayfa text çıkarmıştım,374 'ncü satır ve biraz altındaki 2x16 için verilmiş satırların arası açılmış text editörün hatası yani olması gerekeken '    maximum 16 karakter ' olmalıydı acaba editör başka yerleridemi bozdu... ?
« Son Düzenleme: 11 Aralık 2016, 15:57:09 Gönderen: ipek »

Çevrimdışı OG

  • Global Moderator
  • Profesyonel Üye
  • *****
  • İleti: 9151
    • http://www.cekud.org.tr
Ynt: mikro C Atmel Pascal
« Yanıtla #5 : 11 Aralık 2016, 15:48:59 »
Hocam bu basit bir iş, siz rahatlıkla yapabilirsiniz.
MCU seciminiz PIC olursa burada, forumda yardımcı oluruz ve beraber yaparız.
Bir zorluk yok bu çalışmada.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Çevrimdışı gmngz

  • Yeni Üye
  • *
  • İleti: 10
Ynt: mikro C Atmel Pascal
« Yanıtla #6 : 11 Aralık 2016, 15:56:39 »
Almancam yok ama anladığım kadarı ile eeprom tablosunu okumaya çalışıyor. girilen değerlere görede okuyacağı adresi değiştiriyor
http://www.dl2khp.de/media/files/Tabelle_EEPROM.pdf

Çevrimdışı ipek

  • Profesyonel Üye
  • *****
  • İleti: 2248
Ynt: mikro C Atmel Pascal
« Yanıtla #7 : 11 Aralık 2016, 16:02:58 »
bahsettiğiniz pdf'i okudum sanki offet kayması gibi hiçbirşey anlamadım,kısaca öz olarak 0 dan 127 rakamına kadar portC'de binary olarak gezinmesi lazım,yahu ne kadar zormuş.pic basicte yazdım simulasyonda sorunsuz çalışıyor,gerçek devrede encoder 5'er 10'ar kafasına göre çalışıyor,değeri kaydetmiyor aynı att'den bende var ona can vereyim dedim,adam hazır yapmış çalışan problemsiz bir devre diye üzerine düştüm ama bişey çıkmayacak galiba..

buda ETE hocam ile birlikte yaptığımız gerçek devrede 10 adet değişik encoder ile denedim maalesef bounce yapıyor tüm önlemleri almama rağmen,pic basic pro ile kesme kontrolü yapılmadan encoder rutininin çalışmayacağını gayet iyi anlamış bulunmaktayım,bende kesmeden anlamıyorum...
http://s2.dosya.tc/server3/gzpc3g/16F873A__Attenuator_v2_E2_Bar.rar.html
« Son Düzenleme: 11 Aralık 2016, 16:13:19 Gönderen: ipek »

Çevrimdışı ipek

  • Profesyonel Üye
  • *****
  • İleti: 2248
Ynt: mikro C Atmel Pascal
« Yanıtla #8 : 11 Aralık 2016, 17:46:46 »
micro pascal' ücretsiz sürümünü indirdim,proje dosyasını çağırıp ilgili LCD düzeltmelerini yaptım sadece uyarı olarak ilgili satırdaki 3 rakamını beğenmiyordu onuda 4 yaptım olumsuz mesaj vermedi ama hala portC 'de değişkenlik yok,birde yeniden derlediğimde Led backlight Pwm değerini artık hafızaya almaya başladı...yani bu kadar düzeltmeden sonra niye çalışmadı anlamadım,eeprom tablosunu yeniden oluştursam nereye yazmam gerekli ?
366:   v_text : array[3] of char;    // Variable für die Ausgabewerte als Text

Çevrimdışı ipek

  • Profesyonel Üye
  • *****
  • İleti: 2248
Ynt: mikro C Atmel Pascal
« Yanıtla #9 : 12 Aralık 2016, 04:38:58 »
bu atmel gıcık bir şeymiş,tabloyu elle editleyerek pascaldaki eeprom editörü kullandım,sonuçta bir hex dosyası oluşturabildim,şaka gibi bu seferde proteus eeprom için hex dosyası değil bin dosyası isterim diyor...
ne yazıkki program aletim Topmax2 universal programmer bunda'da eepromu çağıracak yer yok şunu bir çalıştırayım,bi daaaa ATMEL mi töbeee...

ne demişler atalarımız bildiğin yol en doğru yol,

Çevrimdışı mehmet

  • Global Moderator
  • Profesyonel Üye
  • *****
  • İleti: 2741
  • Modlar da ölümlü...
    • http://www.mehmetbilgi.net.tr
Ynt: mikro C Atmel Pascal
« Yanıtla #10 : 12 Aralık 2016, 04:57:37 »
Abi yapmayın ya... İyidir Atmel.
"Bir mum diğer mumu tutuşturmakla ışığından bir şey kaybetmez.''Mevlânâ
"Kendimiz için yaptıklarımız bizimle birlikte ölür. Dünya ve başkaları için yaptıklarımız ise sonsuza dek yaşar."Albert Pike"
"Kendi kurallarını koymazsan, başkalarının kurallarıyla yaşarsın."M
www.mehmetbilgi.net.tr

Çevrimdışı ipek

  • Profesyonel Üye
  • *****
  • İleti: 2248
Ynt: mikro C Atmel Pascal
« Yanıtla #11 : 13 Aralık 2016, 01:12:32 »
tam tahmin ettiğim gibiymiş,her şeyi doğru sırada yapmışım,yazar nihayet cevap verdi,eeprom'a shift ve offset tablosu gerekiyormuş,attenuator'u kalibre edebilmek için,
şimdi sizlerden istediğim stand alone yada universal program cihazlarında ana hex'i ve eeprom hex'i ayrı ayrı çağıracak bir fonksiyon yok,sadece main hex yada bin dosyasını dahil edebiliyorsunuz, tek kullanımlık olduğu için en az zararla bu iki dosyayı aynı anda çağırıp programlayabileceğim en ucuz en pratik çözümü önermeniz...


Çevrimdışı ipek

  • Profesyonel Üye
  • *****
  • İleti: 2248
Ynt: mikro C Atmel Pascal
« Yanıtla #13 : 13 Aralık 2016, 03:10:31 »
@engerex evet ideal çözüm gözüküyor,bana yürüme mesafesi 250m'de mevcut ,fakat iki dosyayıda aynı anda ayrı ayrı çağırabiliyormu ?

Çevrimdışı bocek

  • Emektar
  • *****
  • İleti: 537
Ynt: mikro C Atmel Pascal
« Yanıtla #14 : 13 Aralık 2016, 04:10:46 »
Bildiğim kadarıyla aynı anda çağırmaya gerek yok. Sırayla ayrı ayrı yazsanız da eeprom olan eeproma, program olan da flash'taki yerine yazılıyor zaten.
Hatırladığım kadarıyla Avr-gcc'de; programda eeprom tanımlaması varsa, derlediğimizde .hex'in yanında bir de .eep diye bir dosya oluşuyordu ve biz bunları aynı programlayıcı ile (usbasp) ayrı ayrı yazıyorduk iş bitiyordu.
Siz bir de öyle deneyin bence. Ayrı ayrı yazın.
1 ya da 0. işte 'bit'ün mesele..