Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

Zapis tablicy do eepromu

Czajnik
-
-
Posty: 264
Rejestracja: 17 cze 2004, o 15:40
Lokalizacja: Kraków
Kontaktowanie:

Zapis tablicy do eepromu

Postautor: Czajnik » 11 gru 2009, o 00:24

Witajcie...

Czy zapisywał ktoś kiedyś tablice zmiennych do eepromu w AVRowym bascomie?

R_temp as byte
Zmienna as byte
Element_tablicy(400) as eram byte


Writeeeprom R_temp , element_tablicy(zmienna)

Taka linijka kodu jest nie do przełknięcia przez kompilator. Zapisywanie zamieniając "zmienną" na konkretna wartość liczbową działa ale mija się z celem przy zapisie ponad 400 zmiennych.

Jakieś pomysły zapisu do eepromu w pętli?

Z góry dziękuje za pomoc :)

Awatar użytkownika
almatea
-
-
Posty: 240
Rejestracja: 12 gru 2003, o 17:02
Lokalizacja: Brzeszcze
Kontaktowanie:

Postautor: almatea » 11 gru 2009, o 13:55

Dlaczego mija się z celem?

Puszczasz pętlę For...Next i nic Cię nie interesuje.

Pzdr

Czajnik
-
-
Posty: 264
Rejestracja: 17 cze 2004, o 15:40
Lokalizacja: Kraków
Kontaktowanie:

Postautor: Czajnik » 11 gru 2009, o 14:57

Chyba nie zrozumiałeś...

Faktycznie chciałem to zrobić dokładnie jak piszesz... jednak w pętli musisz jakoś zmieniać numer komórki tablicy. Czyli musisz napisać :

zmienna=1

while zmienna <400

Writeeeprom R_temp(zmienna) , element_tablicy(zmienna)
incr zmienna

wend


Problem w tym że kompilator nie przyjmuje takiej składni.

Napisanie:

element_tablicy(1) 'as eram byte


jest poprawne,


natomiast napisanie:

element_tablicy(zmienna) 'as eram byte ' zmienna as byte

już nie jest poprawne.


To co mija się z celem (ze względu na zajmowane miejsce) to pisanie:

Writeeeprom R_temp(zmienna) , element_tablicy(1)
Writeeeprom R_temp(zmienna) , element_tablicy(2)
Writeeeprom R_temp(zmienna) , element_tablicy(3)

itd.

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty: 2650
Rejestracja: 24 sty 2005, o 00:39
Lokalizacja: Winny gród

Postautor: pajaczek » 11 gru 2009, o 16:40

natomiast napisanie:

element_tablicy(zmienna) 'as eram byte ' zmienna as byte

już nie jest poprawne.
No zaraz, a czy tu przypadkiem nie deklarujesz tablicy o wielkości... nie wiadomo jakiej, bo tak na dobrą sprawę "zmienna" nie jest constans (i jest nieokreślona w tym miejscu)?

Czajnik
-
-
Posty: 264
Rejestracja: 17 cze 2004, o 15:40
Lokalizacja: Kraków
Kontaktowanie:

Postautor: Czajnik » 11 gru 2009, o 16:57

nie nie... tam jest to dodane jako komentarz rzeby dokładnie określić na jakich zmiennych operuje.. kod dokładnie wygląda tak:


dim element_tablicy(100) as eram byte
dim R_temp as byte
dim Zmienna as byte

zmienna=1

while zmienna < 100

R_temp = jakieś obliczenia
writeeeprom R_temp , element_tablicy(zmienna)
incr zmienna

wend


i taki kod nie działa...

natomiast wymiana (zmiena) na (1)

dim element_tablicy(100) as eram byte
dim R_temp as byte
dim Zmienna as byte

zmienna=1

while zmienna < 100

R_temp = jakieś obliczenia
writeeeprom R_temp , element_tablicy(1)
incr zmienna

wend


już śmiga.

Tylko nie daje mi to możliwości zmiany elementu tablicy. Tu mam problem właśnie...

Awatar użytkownika
j_bravo
-
-
Posty: 189
Rejestracja: 14 wrz 2005, o 16:30
Lokalizacja: Lublin
Kontaktowanie:

Postautor: j_bravo » 11 gru 2009, o 19:47

A moze tak:

Kod: Zaznacz cały

Element_tablicy(400) as eram byte .... while zmienna < 100 R_temp = jakieś obliczenia element_tablicy(zmienna)=R_temp incr zmienna
zapiszesz R_temp do tablicy w eepromie wewnątrz AVRa.
O to chodziło ??

Czajnik
-
-
Posty: 264
Rejestracja: 17 cze 2004, o 15:40
Lokalizacja: Kraków
Kontaktowanie:

Postautor: Czajnik » 11 gru 2009, o 21:52

Dziękuję :)

Awatar użytkownika
j_bravo
-
-
Posty: 189
Rejestracja: 14 wrz 2005, o 16:30
Lokalizacja: Lublin
Kontaktowanie:

Postautor: j_bravo » 12 gru 2009, o 08:43

Znaczy się działa ?? ;)

Czajnik
-
-
Posty: 264
Rejestracja: 17 cze 2004, o 15:40
Lokalizacja: Kraków
Kontaktowanie:

Postautor: Czajnik » 12 gru 2009, o 10:40

Tak działa :)

Natomiast obczaiłem jeszcze inny sposób. Otóż w pleceniu

writeeeprom var, adres

zmienna adres wcale nie musi być deklarowana jako zmienna eram. Można wstawić tam zwykłą zmienną byte i też śmiga... co więcej można tam wstawić nawet z palca wpisaną konkretną liczbę. Co więcej jeśli wstawimy tam jakaś zwykłą zmienną to już kompilator przyjmuje składnie zmienna(zmienna2) :) szkoda ze help tego nie opisuje :)

P.S. dlatego lubie ASM :) inna bajka ze nie znoszę go za czas jaki trzeba mu poświecić :P

Awatar użytkownika
almatea
-
-
Posty: 240
Rejestracja: 12 gru 2003, o 17:02
Lokalizacja: Brzeszcze
Kontaktowanie:

Postautor: almatea » 12 gru 2009, o 23:09

To chyba Ty nie zrozumiałeś...
Prosta For Next załatwia sprawę.
Kwestia poprawności składni...

Pzdr

Czajnik
-
-
Posty: 264
Rejestracja: 17 cze 2004, o 15:40
Lokalizacja: Kraków
Kontaktowanie:

Postautor: Czajnik » 12 gru 2009, o 23:17

No właśnie o tą składnie pytałem...

To że trzeba było napisać coś w pętli chyba jest oczywiste... i było zawarte w pierwszym poście :)

Awatar użytkownika
pikczu
-
-
Posty: 89
Rejestracja: 5 paź 2003, o 19:55
Lokalizacja: Dublin
Kontaktowanie:

Postautor: pikczu » 5 sty 2010, o 11:58

Witam
np tak

Kod: Zaznacz cały

for index = 1 to 8 ds = &h0f + index writeeeprom dsadres1(index) , ds next index
działa bez problemu

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 35 gości