Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 16 gru 2025, o 11:38


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 35 ]  Przejdź na stronę 1, 2  Następna strona
Autor Wiadomość
PostNapisane: 20 lis 2012, o 18:19 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Witam
Mama taki kłopot.
Potrzebuje w czasie trwania programu aby uC mi zapisał do swojego EEPROMa cyfrę. A po załączeniu zasilania żeby ją odczytał.
W książce jest to opisane ale jak wgrać tablicę a to jest inaczej.
Macie jakieś pomysły?
Bardzo proszę o odp.

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 19:21 
Offline
Użytkownik

Dołączył(a): 16 maja 2012
Posty: 349
Lokalizacja: Legnica
Zbananowany użytkownik

Pomógł: 23

Metoda "brute force". Mam nadzieję, że się nie machnąłem bo pisane na szybko.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


[ to jeszcze proszę pamiętać o znacznikach [ syntax = c ] a nie brute foce [ code ] ok ;) ? - mirekk36 ]

Będę na przyszłość pamiętał. Skorygowałem kod bo odczyt EEPROM'u był poza main().

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 20:09 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Dzięki za pomoc tylko nie bardzo rozumiem jak ma to działać.
po co 2 pętle for przy zapisie i odczycie?
Oraz po co IN_COUNT , OUT_COUNT , i , j ??
Mógłbyś to wytłumaczyć, bo jakoś nie mogę tego pojąć.

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 20:23 
Offline
Użytkownik

Dołączył(a): 26 lut 2012
Posty: 82
Pomógł: 0

Ta tablica jest dwuwymiarowa dlatego OUT_COUNT i IN_COUNT
Coś jakby 8 wierszy[OUT_COUNT] po 5 znaków[IN_COUNT].
Podwójna pętla służy temu, że najpierw zapisujesz sobie "znaki" w pierwszym wierszu:
if(i = 0)
TablicaEEPROM[0][0], TablicaEEPROM[0][...], TablicaEEPROM[0][5]
Następnie w drugim:
if(i=1)
TablicaEEPROM[1][0], TablicaEEPROM[1][...], TablicaEEPROM[1][5]
Itd...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 20:36 
Offline
Nowy

Dołączył(a): 14 wrz 2012
Posty: 23
Pomógł: 1

Ja zapisuję do eeprom ustawienia, czy buzzer ma być włączony i podświetlenie, po wybraniu odpowiednich ustawień wykonuję takie coś:
eeprom_write_byte(&buzzer, ustawSPEAKER);
eeprom_write_byte(&background, ustawLIGHT);
I mam już je w eeprom, ustaw(X) to zmienne które zapisuję, a np. &buzzer pobiera adres do zmiennej zapisanej w eeprom, która zadeklarowałem przed pętlą main uint8_t EEMEM buzzer = 1;



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 20:50 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Wielkie dzięki
Już więcej wiem ale podkreśla mi:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

W poprzednim przykładzie tak samo podkreśla więc czy to jest dobrze?
Bo ja wcześniej tak eksperymentowałem i właśnie podkreślało(Obok tego jest znak zapytania).
Proszę o pomoc Jeśli to jest dobrze to zapis mam.
Lukas A jak zrobiłeś odczyt tych danych?

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 20:52 
Offline
Nowy

Dołączył(a): 14 wrz 2012
Posty: 23
Pomógł: 1

a dodałeś #include "avr/eeprom.h" ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 20:54 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Tak jest dodany
Oto cały kod
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 20:57 
Offline
Użytkownik

Dołączył(a): 16 maja 2012
Posty: 349
Lokalizacja: Legnica
Zbananowany użytkownik

Pomógł: 23

Kolego Janadamis nie napisałeś jaką tablicę chcesz zapisywać w EEPROM więc skrobnąłem taką dwuwymiarową żeby nie było za łatwo ;-) Tak w zasadzie zapis czy to pojedynczej zmiennej czy tablicy zmiennych opiera się na tej samej zasadzie. pierwszy argument to adres w pamięci EEPROM a drugi to wartość do zapisania. Bardziej zaawansowane techniki zapisu danych "masowych" to poszukaj hasła eeprom_update_block(). Wtedy unikasz tych pętli zamiatających po tablicy. Dlatego w nagłówku napisałem, że jest to "metoda na siłę".

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 21:05 
Offline
Nowy

Dołączył(a): 14 wrz 2012
Posty: 23
Pomógł: 1

Stworzyłeś zmienną globalną, zapisujesz ją do eeprom, ale nie zainicjalizowałeś jej żadną wartością, może spróbuj przed zapisem ją zainicjalizować bo teraz nie pamiętam już, czy domyślnie równa ona jest zerem.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 21:09 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27445
Lokalizacja: Szczecin
Pomógł: 1045

Lukas napisał(a):
Stworzyłeś zmienną globalną, zapisujesz ją do eeprom, ale nie zainicjalizowałeś jej żadną wartością, może spróbuj przed zapisem ją zainicjalizować bo teraz nie pamiętam już, czy domyślnie równa ona jest zerem.


To trzeba zapamiętać raz na zawsze - każda zmienna globalna jest zawsze inicjalizowana i to zerem.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 21:26 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

perlon -Patrz mój pierwszy post wyraźnie napisałem że chcę zapisać cyfrę.
Lukas-Nie pomogło.
Ok wiem ze to na siłę ale czy to będzie działać ? jest takie użycie dopuszczalne?
Musi być oficjalny sposób na zapisanie zmiennej w eepromie procesora. Chyba co nie?

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 21:41 
Offline
Nowy

Dołączył(a): 14 wrz 2012
Posty: 23
Pomógł: 1

Jeżeli dalej Ci to podkreśla to już nie mam pomysłu. Poza tym nie wiem czy jako błąd czy warnning. Jako warnning możesz skompilować i zobaczyć czy działa i powinno działać, chyba, że coś z biblioteką nie tak. Swoją drogą jesteś pewny, że w pętli głównej chcesz za każdym jej wykonaniem zapisywać zmienną do eepromu? Pamiętasz co jest napisane w nocie katalogowej: Write/Erase Cycles: 10,000 Flash/100,000 EEPROM.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 21:51 
Offline
Użytkownik

Dołączył(a): 16 maja 2012
Posty: 349
Lokalizacja: Legnica
Zbananowany użytkownik

Pomógł: 23

Wg mnie deklaracja zmiennej jest OK. Wątpliwość budzą dwie rzeczy.
1. Bezwarunkowe użycie eeprom_write_byte() w pętli głównej skutecznie ubije eprom w kilka chwil. Trzeba pamiętać o limicie gwarantowanej skuteczności zapisu 100000 cykli. Ile razy w ciągu sekundy u ciebie się wykona taki zapis?
2. Przed zapisem chyba brakuje jeszcze eeprom_busy_wait();

Kolega Lukas mnie ubiegł ;-)

No i zupełnie poza tematem w miejscach inkrementacji i dekrementacji zmiennej krok brakuje kontroli zakresu.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 21:57 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27445
Lokalizacja: Szczecin
Pomógł: 1045

perlon napisał(a):
2. Przed zapisem chyba brakuje jeszcze eeprom_busy_wait();


Akurat tego nie brakuje, bo funkcje eeprom_write_xx już z tego korzystają wewnątrz.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 22:04 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

W tym kodzie chodzi mi wyłącznie o działający zapis do eeprom
Co do tego że ciągle wgrywa to na to nie patrzcie. Tak na pewno nie będzie tylko nie chcę podawać całego programu do czego ma to być żeby nie mylić w oczach. W mniejszym programie łatwiej jest zauważyć babola
Lukas-to jest warnning. Ale w kodzie nigdy nie powinny być takie warnningi. Zawsze trzeba się ich pozbywać.

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 22:10 
Offline
Nowy

Dołączył(a): 14 wrz 2012
Posty: 23
Pomógł: 1

Tu masz kod z pewnej ksiażki, kod jest na 100% pewny, jeżeli tu też masz warnningi to przypatrz się swojemu środowisku i kompilatorowi, bo u mnie w eclipse, żadnych problemów z tym nie mam
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 22:20 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Dziwne ale przy tym nadal mam ale nie warnning tylko znak zapytania oraz przy definicji F_CPU bo ja mam inną ustawioną.
Zawsze było dobrze hmm co może być przyczyna? czy jakiś usunięty plik z eclipse czy co?
Wielkie dzięki za kod spróbuję jutro wgrać i zobaczę.

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 22:29 
Offline
Nowy

Dołączył(a): 14 wrz 2012
Posty: 23
Pomógł: 1

Jeszcze jakbyś podał co Ci piszę przy tych znakach zapytania i wykrzyknikach jak na nie najedziesz...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 23:30 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27445
Lokalizacja: Szczecin
Pomógł: 1045

Janadamis napisał(a):
Dziwne ale przy tym nadal mam ale nie warnning tylko znak zapytania oraz przy definicji F_CPU bo ja mam inną ustawioną.


Kurczę TYLE razy powtarzam - nie definiować w kodzie F_CPU !!!

sorki - ale już więcej nie będę powtarzał i jak ktoś podeśle tu kod z tym #define F_CPU to sorki ale nie pomagam bo już nie mogę :( .... ileż można o tym pisać, i w książce i na forum i wszędzie

a ludzie nadal z uporem to samo i potem jeszcze pytają o błędy eeeeh

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2012, o 23:46 
Offline
Nowy

Dołączył(a): 14 wrz 2012
Posty: 23
Pomógł: 1

Eclipse wtedy informuje poprzez warninga , ze częstotliwość została wielokrotnie zdefiniowana, ja skopiowałem jakiś przykładowy kod nie mojego autorstwa, więc nie bawiłem się w usuwanie tej definicji. Założyłem, że zainteresowani wiedzą co z tym zrobić, poza tym chodziło o coś całkiem innego.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2012, o 00:07 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27445
Lokalizacja: Szczecin
Pomógł: 1045

sorrry mi się już pochrzaniło - myślałem że to autor wątku wstawił to #define F_CPU

Lukas - rozumiem teraz już twoje wyjaśnienie .... ale tak czy inaczej na przyszłość nie warto powielać tego durnego błędu z tym F_CPU w kodzie bo jak mówię to jest ostatnio ZMORA, a wiecie chyba przez co ???? ano przez AVR Studio 5/6

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2012, o 15:04 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Ok jak najechałem myszką to się wyświetliło coś takiego:
http://img18.imageshack.us/img18/3439/s ... 150024.png
W konsoli nie widzę żadnego warninga czy coś innego.
O co w tym chodzi?

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2012, o 15:38 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27445
Lokalizacja: Szczecin
Pomógł: 1045

tak teraz okienko komunikatu zasłoniło to co pod nim i nikt nic nie wie o co chodzi ....

pokaż jeszcze co jest pod tym komunikatem. Albo najlepiej spakuj cały projekt do ZIP'a i zapodaj go jako załącznik to sprawdzę.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2012, o 15:47 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Ok spakowałem jest w załączniku.
Oraz dodaje kod na forum tam pomiędzy ukośnikami jest ten błąd
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


------------------------ [ Dodano po: 17 minutach ]

Spróbowałem wgrać ten program do Atmega32 i zobaczyć to w praktyce czy działa czy nie.
Okazało się że świetnie działa tak jak zakładałem ustawiałem różne wartości i zawsze zapamiętało.
Tylko gdy dodawałem wartości to dodawało co 2 a nie co 1 do zmiennej. Ale to nie ważne.
Działa dobrze tylko czemu wyświetla przy tym znak zapytania?


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2012, o 16:25 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27445
Lokalizacja: Szczecin
Pomógł: 1045

proszę bardzo oto widok twojego projektu po kompilacji u mnie w Eclipse

Obrazek

widzisz gdzieś jakiś błąd ?

Zainstaluj sobie Eclipse INDIGO i skończą ci się takie problemy.


Autor postu otrzymał pochwałę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lis 2012, o 16:32 
Offline
Użytkownik

Dołączył(a): 27 mar 2012
Posty: 511
Lokalizacja: Sląsk
Pomógł: 14

Ok
Dzięki za pomoc

_________________
Programowanie to styl życia :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2014, o 22:33 
Offline
Nowy

Dołączył(a): 12 lip 2014
Posty: 24
Zbananowany użytkownik

Pomógł: 0

Przyłączę się do tematu. W tym przypadku chodzi o zapis i odczyt float

Składnia: [ Pobierz ] [ Ukryj ]
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Po uruchomieniu program nie zawiesza się (na terminalu przez uart lecą cyferki) ale wartości nie odczytują się z EE a w pętli nie są wykonywane żadne obliczenia (!). Gdy dotknę cokolwiek na ATB (np piny) wtedy program zawiesza się i odwiesza watchdogiem. Gdy wykasuje linie 6,7,8 wszystko wraca do normy. Skąd takie dziwne zachowanie?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2014, o 23:01 
Offline
Nowy

Dołączył(a): 14 wrz 2012
Posty: 23
Pomógł: 1

a jak wygląda funkcja eeprom_write_float??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lip 2014, o 08:57 
Offline
Nowy

Dołączył(a): 12 lip 2014
Posty: 24
Zbananowany użytkownik

Pomógł: 0

Wydaje mi się że analogicznie jak np void eeprom_write_byte (uint8_t *__p, uint8_t __value);
void eeprom_write_float (float *__p, float __value);
float eeprom_read_float (const float *__p) __ATTR_PURE__;
co prawda nie rozumiem przekazywania adresu typu float



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 35 ]  Przejdź na stronę 1, 2  Następna strona

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO