bu kodu bana hex ve eep'e çevirecek arkadaşlar varmı ?
Attenuator.mpas mikroPascal PRO for AVR by mikroElektronika
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.
Başındaki rakamlar olmadan yüklersen derlerimde. Onları silmek zor geliyor :)
8mhz dahili osilatör
atmega16
dosyalar linkte
https://yadi.sk/d/yVt9RTmr32vMpM
@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...
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... ?
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.
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
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
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
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,
Abi yapmayın ya... İyidir Atmel.
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...
USB ISP Programmer temin edebilirseniz işinizi görebilir. 1-2 dolar ama vaktiniz yoktur.
https://www.aliexpress.com/item/USB-ISP-Programmer-for-ATMEL-AVR-ATMega-ATTiny-51-AVR-Board-ISP/32766276417.html?ws_ab_test=searchweb0_0,searchweb201602_6_10065_10068_10084_10083_10080_10082_10081_10060_10061_10062_10056_10055_10054_10059_10099_10078_10079_426_10073_10103_10102_10096_10052_10050_10051,searchweb201603_6&btsid=5a8724f8-68c9-4c91-a8d9-ef63e4594bdb
@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 ?
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.
@ipek Burada olduğu gözüküyor.
(http://1.bp.blogspot.com/-13Q7LtkhYN8/T24Gd7RomkI/AAAAAAAAAOc/LA3dHWC_q54/s1600/Progisp.gif)
@engerex ilgine teşekkür ederim,yarın bir tane temin edeceğim.....