24 Haziran 2018, 19:11:29

Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME


mikro C Atmel Pascal

Başlatan ipek, 10 Aralık 2016, 01:43:17

ipek

10 Aralık 2016, 01:43:17 Son düzenlenme: 10 Aralık 2016, 07:54:50 ipek
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 PrastDL2KHP 
 Datum
:                    15.10.2014 
 Prozessor
:                ATMega16 
 Clock
:                    8 MHzintern 
 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 wirdwird der eingestellte Wert als 
 Offset übernommen
. Die Anzeige zeigt dann anstelle von "Att = xx dB" 
 "Out = xx dBm" 
ander 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 werdenDas ist als Hilfe gedachtwenn Geräte 
 z
.Bbis 20dBm kalibriert werden sollenDann 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" angezeigtDer Anzeige 
 entspricht jetzt dem tatsächlichen Ausgangswert
Jetzt kann dann auch bis zum 
 eingestellten Offset
über "0" hinausbis 20 dBm eine Einstellung vorgenommen 
 werden
Ein erneuter Druck auf den Drehgeber schaltet den Offset wieder ab
 
 
Wenn beim Einschalten die Taste Down1x festfehalten wirdkann die Helligkeit 
 des Displays mit den Tasten Up10x und Down10x eingestellt werden
Ein Druck auf 
 
die Taste Up1x beendet die EinstellungDer 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 ;                  // 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..10of boolean// User Flag Register 
     
v_displ    : array [1..23of 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_bthen 
         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_bthen 
          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 0then 
       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 0then 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 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 := 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 do;             // Warten bis Down1x-Taste losgelassen wird 
    
repeat 
       
if ((pinb.b_sw3 0) and (pinb.b_sw4 1)) then 
         
if (v_pwm 0xffthen           // 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 3then              // 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_pwmv_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 0then 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 
            
1begin           // 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
            
2begin           // 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
            
3begin    end;  // Taste Down1x und Up1x         betätigt 
            
4begin           // 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
             
5begin    end// Taste Up1x und Up10x        betätigt 
             
6begin    end// Taste Down1x und Up10x         betätigt 
             
7begin   end// Taste Down1x, Up1x und Up10x betätigt 
             
8begin         // 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
             
9begin   end// Taste Down10x und Down1x         betätigt 
           
10begin    end// Taste Down10x und Up1x         betätigt 
           
11begin    end// Taste Down10x, Up1x und Down1x betätigt 
           
12begin    end// Taste Down10x und Up10x         betätigt 
           
13begin    end// Taste Down10x, Up10x und Up1x betätigt 
           
14begin    end// Taste Down10x, Up10x und Down1x betätigt 
           
15begin    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_adressword
 
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] = 0then 
            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] = 1then 
            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[3of char;          // Variable für die Ausgabewerte als Text 
 
begin 
 
if (v_ufr[b_anz_neu] = 1Then 
    begin                             
// Nur ausführen wenn neuer dB-Wert vorliegt 
       
ShortToStr(v_db_anzv_text); 
           
begin 
              
if (v_ufr[b_offset] = 1then 
                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_offv_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

gmngz

Başındaki rakamlar olmadan yüklersen derlerimde. Onları silmek zor geliyor :)

gmngz

11 Aralık 2016, 00:22:31 #2 Son düzenlenme: 11 Aralık 2016, 00:29:26 gmngz
8mhz dahili osilatör
atmega16
dosyalar linkte
https://yadi.sk/d/yVt9RTmr32vMpM

ipek

@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...

ipek

11 Aralık 2016, 04:29:25 #4 Son düzenlenme: 11 Aralık 2016, 04:57:09 ipek
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... ?

OG

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.

gmngz

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

ipek

11 Aralık 2016, 05:02:58 #7 Son düzenlenme: 11 Aralık 2016, 05:13:19 ipek
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

ipek

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

ipek

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,

mehmet

Abi yapmayın ya... İyidir Atmel.
nothing

ipek

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...


ipek

@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 ?

bocek

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..