eeprom w attiny2313

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Nick_2
Użytkownik
Posty: 105
Rejestracja: 09 maja 2007, 8:11

eeprom w attiny2313

Post autor: Nick_2 » 24 gru 2007, 18:15

Witam
Mam pytanie odnosnie pamieci eeprom w procesorze attiny 2313. Napisałem ostatnio program w bascomie, do licznika motogodzin do ciągnika. Jest to w zasadzie zwykły zegarek ktory na czterech wyswietlaczach pokazuje jedynie godziny, minuty i sekundy są pomijane. Do poprawnego działanie układu niezbędne jest zapisanie biezącego stanu licznika po wyłączeniu zapłonu i jego odczytanie oraz kontynułowanie zliczania po ponownym załaczeniu silnika. Po wyłączeniu zapłonu zasilanie jest dostepne wiec nie ma problemu z zapisaniem danych. Mam jedynie problem z załadowaniem do pamieci eeprom wartosci poczatkowych ktora powinna wynosic 0000. Nie moge tego zrobic na poczatku programu bo jak wyłacze zasilanie i ponowne je włacze wskaźnik sie wyzeruje, a przeciez po kazdym kolejnym włączeniu zapłonu licznik ma zwiekszac swoja wartosc od ostatnio zapisanej. Nie jestem pewien ale wydaje mi sie ze jedymym wyjsciem z tej sytuacji jest napisanie oddzielnego pliku do pamieci eeprom z tymi wartosciami tylko nie wiem jak to zrobic w bascomie i jak zrobic aby przy ładowaniu własciwego programu do pamieci flash w ktorym odwoluje sie do eepromu poprzednio załadowania zawartosc eepromu nie została skasowana. Na poczatku programu po zdefiniowaniu zmiennych wykonuje czterokrotnie instrukcje readeeprom przypisując do odpowiednich zmiennych wartosci z czterech komórek eepromu zaczynajac od 1. Po wykryciu braku napiecia na jednym z przewodów od wiazki silnika (czyli po wyłączeni załonu) za pomoca instrukcji writeeeprom nadpisuje te dane. Problem jest jedynie zaraz po zaprogramowaniu układu kiedy wartosc poczatkowa musi wyniesc 0000.
Bede wdzieczny za pomoc w tej sprawie

ZbeeGin

Post autor: ZbeeGin » 24 gru 2007, 19:01

Dane które chcesz zainicjalizować w EEPROM trzeba zapisać na początku programu:

Kod: Zaznacz cały

$EEPROM
DATA 0, 0, 0, 0
$DATA
Spowoduje to utworzenie podczas kompilacji pliku EEP w którym to 4 pierwsze bajty będą zerami. Teraz podczas programowania wystarczy wykonać dwie operacje programowania:
1. Wybranie zakładki "Flash memory" i kliknięcie programowania, a program (plik bin) trafi do pamięci Flash,
2. Wybranie zakładki "EEPROM memory" i kliknięcie programowania ponownie, a dane (plik eep) trafią do EEPROM.
Jeśli w opcjach kompilatora masz zaznaczone "Upload code and data" to nic w sumie nie będziesz musiał przełączać. Podczas automatycznego programowania wszystkie dane trafią na swoje miejsca.

Jeśli będziesz dokonywał poprawek w programie to wystarczy, że zaprogramujesz tylko samą zawartość pamięci Flash.

Nick_2
Użytkownik
Posty: 105
Rejestracja: 09 maja 2007, 8:11

Post autor: Nick_2 » 24 gru 2007, 21:20

Dzieki za odpowiedz. Dołączyłem ten listing do mojego programu i musze powiedziec ze nie do konca dziala to tak jak powinno. Procek programuje programatorem na usb za pomoca programu avr-ospII. W załaczniku zamieszczam listing calego programu, na razie bez opisow. Jak mozesz przejrzyj poczatek po wpisaniu danych do eepromu tak jak mi napisales odczytuje dale z poszczegolnych komorek a potem je wyswietlam na czterech siedmiosegmentowych wyswietlaczach. I tu pojawia sie problem bo nic sie nie wyswietla. Dopiero po pewnym czasie zapala sie zero na prawym skrajnym wyswietlaczu, a pozostale 3 sa zgaszone. dopiero gdy na pierwszym wyswietlaczu pojawi sie cyfra 9 zapala sie kolejny wyswietlacz wskazujac 0. Moze wiesz w ktorym miejscu popelnilem blad ze tak sie dzieje?

[ Dodano: 2007-12-26, 19:02 ]
Podczas programowanie pamieci eeprom pojawia mi sie teraz błąd taki jak ponizej może ktoś mogłby mi wyjaśnić jak poprawnie programować eeprom przy pomocy programu AVR-OSPII?

Checking programmer type ...
Found AVR ISP
Entering programming mode...
Reading HEX input file for EEPROM operations...
Wrong HEX file format, missing fields!
Line from file was:
Unsupported HEX record format!
Line from file was: ().
Premature end of file encountered! Make sure file contains an EOF-record.
HEX file defines data outside specified range!
Invalid range! - Start must be 0 or larger, End must be inside allowed memory range.
Programming EEPROM contents... 0x0080 TO 0x0000
Address outside legal range!
Reading EEPROM contents... 0x0080 TO 0x0000
Invalid range! - Start must be 0 or larger, End must be inside allowed memory range.
Address outside legal range!
Comparing EEPROM data...
Equal!
Leaving programming mode...
Załączniki
bez tytułu.JPG
zegaz do claas2a_uklad.rar
(1.09 KiB) Pobrany 243 razy

ODPOWIEDZ