Založen: Sep 13, 2005 Příspěvky: 867 Bydliště: Praha
Zaslal: st říjen 27 2010, 10:19 Předmět: ATmega - problemek s eeprom
Objevil se mi problemek pri praci s eeprom v ATmega128 (nebo ATmega128L).
SW je CodeVison C verze 1.24.9
Je tam nejaka restrikce pro praci s eeprom v cyklech? ASM vypada na prvni pohled dobre. V nize uvede casti kodu se ale zapisi se jen prvni 4 bajty, pak kod pokracuje dal. Kdyz za nej dam while(1); a nasledne vyctu eeprom jsou tam prave ty 4 bajty.... po te, co jsem jako "debug" zacal davat do pole i, maji hodnotu 01 02 03 04
--------------------------------
if(dac_first_eep) //first run after programming
{
unsigned int i;
dac_first_eep=0;
for(i=1;i<DAC_CALTABLE_LEN;i++) //start at index 1
{
dac_cal_data_eep[i]=i;//-128; //-128 = not set
}
Ukládáš unsigned int do charu takže do eeprom se ti uloží jen spodni byte proměnne i ,ale jinak to musi chodit, v AVrku mi ten kód naplnil všech 3000 byte eeprom, možná bude chyba jinde ....
Založen: Sep 13, 2005 Příspěvky: 867 Bydliště: Praha
Zaslal: st říjen 27 2010, 12:55 Předmět:
Ze davam uint do charu vim, to je tam jen jako "debug", abych alespon malinko vedel, co se tam deje, normalne se tam ma ukladat ta "-128" (0x80)....
Krom toho se mi zda, ze nechodi radne ani jine operace s eeprom vykovanane v cyklu.....
Nemam ted zadny napad co s tim.
Jeste mne napadlo, ze je tam prvadepodobne Atmega128L na 5V@16MHz, nikdy jsem ale problem s L verzi na 5V@16MHz nemel.
pokud máš povolenej watchdog tak ho zkus zakázat, jinak nevím, může ti tam přetékat proměnná, to umí dělat kouzla ,hoď sem toho kódu víc (pokud to není tajný) mrknem a uvidíme
Založen: Sep 13, 2005 Příspěvky: 867 Bydliště: Praha
Zaslal: st říjen 27 2010, 13:17 Předmět:
WDT je zakazano. Tohle je na zacatku - inicializace v mainu, dal ten program bezi celkem normalne (az na ty eep operace) nerestartuje se, nepada....
Kod tajny neni, ale ma asi 1500 radek bez knihoven, coz je problem... udelam vyber relevantnich casti. Taky jemozny, ze je to nejaka trapna bota, pac je to kod psany po nocich .
Necituj pořád celý bezprostředně předcházející příspěvek, když je zjevné, že na něj odpovídáš, prosím.
Hill
if(dac_first_eep) //prvni beh po naprogramovani
{
unsigned int i;
dac_first_eep=0;
for(i=1;i<DAC_CALTABLE_LEN;i++)
{
dac_cal_data_eep[i]=i;//-128; //-128 = not set
}
}
/*->*/ while(1); //<- kdyz necham zde zaseknout a vyctu eep, jsou tam jen ty 4 bajty
Založen: Sep 13, 2005 Příspěvky: 867 Bydliště: Praha
Zaslal: st říjen 27 2010, 19:23 Předmět:
To uz jsem zkousel take.... marne. V asm je ale videt, ze se testuje pripravenost eepromky.
Uz mne proste nic neapada. Krom spatne eep, ale chip je novy a do jinych mist lze psat.
V tom asm by také mělo být vidět, za jakých okolností to ten cyklus může opustit. Přerušení máš zakázaná (máš?), watchdog taky, tak do toho nemůže nic zasahovat.
Založen: Sep 13, 2005 Příspěvky: 867 Bydliště: Praha
Zaslal: st říjen 27 2010, 22:02 Předmět:
zkusebne jsem odstranil veskery kod pred tou smyckou - beze zmeny. Vetsinou jsou zapsane 4 bajty, obcas 6. Leda, ze by to codevision spatne nacital...
jeste se ponorim do toho asmu...
Zkouska na druhem, identickem kusu, se stejnym vysledkem...
Zajimave zjisteni, kdyz ve vyctene eeprom upravim dac_first_eep na nenulovou hodnotu, coz zapricini novy beh smycky po resetu a poslu to zpet do mcu, tak vzdy skoncim o cca 4 bajty dal.... zapisova fce eepromwrb neprovadi zapis, pokud jsou data shodna, takze se provedou jen ty cca 4 dalsi zapisy....
dalsi poznatek: umistenim
for(i=65535;i;i--);
pred prvni zapis do eep problem zmizi.
aha, tak jeste upresneni - cekani treba vlozit mezi testovani flagu dac_first_eep v ifu a jeho nulovani, nebo toto nulovani zrusit, takze se zda, ze cteni nasledovane relativne bezprostrednim zapisem do toho sameho mista tomu dela nejak spatne... A zpozdeni vyse uvedenym cyklem je na hranici, ponevadz, kdyz se pouzije misto "i" jiny int ktery je alokovan v registrech a operuje se s nim tudiz rychleji, tak uz to nestaci a zas to nefunguje.....
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2, 3Další
Strana 1 z 3
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.