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



Teraz jest 12 mar 2025, o 23:18


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 17 ] 
Autor Wiadomość
PostNapisane: 16 paź 2014, o 16:30 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

Witam

Pytanie jak w temacie - probuje w ramach ćwiczeń napisać program który po naciśnieciu klawisza zliczałby ilość naciśnieć i wyświetlał to na wyśw. hd 44780 o ile nie mam problemu żeby to zrobić w pamięci RAM to mam duży problem aby zmienną której przypisuje liczbe naciśnieć umieścić w pamięci EEPROM i potem ją wywołać w lcd_int.

Chodzi też o to aby po ponownym włączeniu zasilania wyśw. pokazywał ostatnią ilość naciśnieć.

Proszę o jakieś rady i najlepiej przykłady które możnaby omówić tu na forum dla lepszego zrozumienia ;-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 paź 2014, o 17:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 maja 2013
Posty: 288
Ostrzeżenia: -2
Pomógł: 23

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



Deklarujesz sobie funkcje do zapisywania w pamięci eeprom:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jako argument przekazujesz : * adres oraz uint8_t value (twoja nowa wartość).

Funkcje wywołujesz:

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


Odczyt z pamieci Eeprom:
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: 16 paź 2014, o 17:22 
Offline
Moderator
Avatar użytkownika

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

Mac napisał(a):
Proszę o jakieś rady i najlepiej przykłady które możnaby omówić tu na forum dla lepszego zrozumienia

Panie kolego wystarczy oglądać poradniki z bloga ;) tu masz dopiero przykład ;) ....

http://mirekk36.blogspot.com/2012/11/av ... iazek.html

obejrzyj to - to zrozumiesz raz a dobrze jak warto podchodzić do korzystania z pamięci EEPROM w prockach AVR

_________________
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: 18 paź 2014, o 11:04 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

bogdanc - próbowałem zrobić jak pokazałeś ,ale oczywiście coś źle mi to wyszło
poniżej kod:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i poniżej ostrzeżenia aclipse

./main.c:72: warning: operation on 'licznik_klikniec' may be undefined
../main.c:75: warning: comparison between pointer and integer
../main.c:75: warning: passing argument 1 of '__eerd_byte_tn2313' makes pointer from integer without a cast
../main.c:83: warning: statement with no effect
../main.c:83: warning: statement with no effect


Jeśli chodzi o poradnik to obejzałem, ale nie wszystko jeszcze do mnie dotarło;-)
(niektórych rzeczy jak transmisja danych jeszcze nie przerabiałem)

przydałby się poradnik o operacjach na eeprom bardziej prostszy np. na jakimś prostym programiku do zliczania kliknęć ;-) i wszystko szczegól po szczególe wyjaśnione tak aby taki hobbysta jak ja to zrozumiał;-)
pozdrawiam!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 paź 2014, o 11:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 mar 2014
Posty: 580
Lokalizacja: Jastrzębie-Zdrój
Pomógł: 71

Witam,

Zrób jak kolega wyżej napisał:

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


Ty masz bez inicjalizacji.

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


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


z Niebieskim pozdRowieniem,
Doman89



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 paź 2014, o 15:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 maja 2013
Posty: 288
Ostrzeżenia: -2
Pomógł: 23

Ja bym zrobił to w ten sposób:
Stworzył bym sobie jakąś zmienną
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
żeby niepotrzebnie nie wykonywać operacji na EEPROM.
Na niej wykonywał operacje np: inkrementacji po wciśnięciu przycisku krótko.
Przy wciśnięciu przycisku dłużej powiedzmy 5s zapis do pamięci EEPROM.

A co do tego co TY napisałeś wyżej to:

Tu masz 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.


Zmienna licznik_kliknięć jest w pamięci EEPROM czyli aby zainkrementować musisz ją oczytać z pamięci bo powyższa operacja nie odniesnie skutku.
Możesz zrobić tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Błąd wkradł Ci się tutaj również:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 paź 2014, o 19:21 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

bogdanc - wielkie dzięki za poprawki oczywiście teraz programik śmiga bez zarzutu nawet nie wiecie jak mi pomogliście - dotej pory z pamięcią eeprom i flasch to podchodziłem jak do jeża teraz już jest trochę lepiej.
Oczywiście zadam jeszcze pare "głupich " pytań do tego programiku i operacji na eeprom aby rozwiać wszelkie wątpliwości.
DZIĘKI ;-)

------------------------ [ Dodano po: 37 minutach ]

Pytanie o zmieną licznik_klikniec - jak to się dzieje ,że przy starcie programu ta zmienna jest zainicjalizowana "0" potem jej wartość wzrasta wraz z kliknięciami do jakiejś tam
"n" wartości ,nastepuje przerwa w zasilaniu, ale po ponownym włączeniu zasilania kiedy znów startuje program i znowu nastepuje inicjalizacja "0" czyli tak właściwie ta "n" wartość zostaje zmieniona na "0" , program jednak mimo inicjalizacji '0" wyświetla ostatnią wartość???



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 paź 2014, o 20:54 
Offline
Użytkownik

Dołączył(a): 17 sty 2013
Posty: 327
Lokalizacja: Białystok
Pomógł: 14

uint8_t EEMEM licznik_klikniec = 0; //inicjalizujesz ja 0

w tej linijce usuń =0 i będziesz miał ostatnią wartość :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 paź 2014, o 21:04 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

Mscichu - właśnie cała rzecz w tym że mimo iż inicjalizuje '0' to program i tak pamięta ostatnią wartość - dlaczego - jak to się dzieje?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 paź 2014, o 21:23 
Offline
Użytkownik

Dołączył(a): 17 sty 2013
Posty: 327
Lokalizacja: Białystok
Pomógł: 14

Nie jestem pewien, ale to chyba jest początkowa wartość którą można wgrać programatorem wraz z programem (plik .EEP), ale to są tylko moje przypuszczenia. Możesz zerować zmienną zapisując ręcznie do niej 0 (tak jak zapisujesz wartość kliknięć), jednak EEPROM używa się aby ta wartość została zachowana po zaniku zasilania. Oczywiście w ramach ćwiczeń możesz robić co chcesz tylko później pamiętaj o ograniczonej żywotności tej pamięci.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 paź 2014, o 22:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 mar 2014
Posty: 580
Lokalizacja: Jastrzębie-Zdrój
Pomógł: 71

Witam,

Kolega logika komputerów - one robią co im każesz :)

Jak nawet inicjalizujesz tą zmienną zerem to nigdzie nie ma funkcji zapisu jej do EEPROM, masz poźniej odczytywanie jej z EEPROM - nawet w 3 if'ie.

Oczywiście mogę się mylić, bo nigdy jeszcze nie korzystałem z EEPROMu.

z Niebieskim pozdRowieniem,
Doman89



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 paź 2014, o 23:01 
Offline
Moderator
Avatar użytkownika

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

Mac napisał(a):
Pytanie o zmieną licznik_klikniec - jak to się dzieje ,że przy starcie programu ta zmienna jest zainicjalizowana "0"

A ja bym jednak polecił powrót do lektury Bluebooka bo kolega chyba strasznie przeskakuje rozdziały ? albo ... albo nie wiem co ;)

WSZYSTKIE zmienne GLOBALNE inicjalizowane są ZEREM w języku C .... to jest zasada, którą warto sobie wbić do głowy - przydaje się, poważnie ...

Czyli jeśli zdefiniujesz zmienną globalną czy to w RAM, czy w EEPROM to:

1. w RAM zostanie zainicjalizowana ZEREM w sekcji inicjalizacyjnej przed startem programu
2. w EEPEROM ? ... po zaprogramowaniu tej pamięci plikem *.eep wraz z *.hex - będzie w tej komórce czy komórkach zero

ale jak mówię jest to klarowane jak wiele innych ważnych podstaw w BB

_________________
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 paź 2014, o 09:14 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

P. Mirku - jak zwykle wszystko się zgadza

------------------------ [ Dodano po: 12 minutach ]

pyt. jeszcze o wytrzymałośc pamięci eeprom w attiny jest to 100 000 razy zapis/kasowanie
czy to znaczy jeśli każde klikniecie to zapis do eeprom a co 10 klikniecie to dodatkowy zapis zerujący ilość kliknieć , to tych zliczeń do 10-ciu teoretycznie może być tylko 90 tys razy?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 paź 2014, o 09:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1967
Lokalizacja: Lipsko
Pomógł: 125

Jak chcesz oszczędzić EEPROM to możesz zrobić badanie zaniku napięcia zasilania i w tym momencie dopiero zapisywać wartość, a przywracać ją po ponownym włączeniu. Takie badanie najłatwiej zrobić z nieco większym kondensatorem elektrolitycznym na zasilaniu procka, a przed sekcją stabilizatora wstawić diodę i przed diodą (na głównym zasilaniu) badać napięcie procesorem (oczywiście przez dzielnik napięcia odpowiednio dobrany). Przy zaniku zasilania kondensator będzie miał jeszcze na tyle zgromadzonej energii, że bez problemu powinien zdążyć zapisać stan zmiennej. Oczywiście przy jego doborze należy wziąć pod uwagę dodatki bezpośrednio obciążające procek czyli np. wyświetlacz LED, diody LED, itp...

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 paź 2014, o 09:52 
Offline
Moderator
Avatar użytkownika

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

Innym rozwiązaniem jest to o czym mówię w poradniku - że na bieżąco cały czas działamy w pamięci RAM w tej strukturze danych, a dopiero w jednym momencie albo na żądanie użytkownika (jakiś specjalny klawisz) albo jeszcze lepiej jak pisze wyżej kolega przy zaniku zasilania - zapisujemy całość do eeprom, a nie tam za każdym kliknięciem zapisywanie do eeprom ;) bo to nie trzyma się tzw kupy - innymi słowy tak się nie robi

_________________
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: 22 paź 2014, o 18:18 
Offline
Użytkownik

Dołączył(a): 10 kwi 2014
Posty: 141
Lokalizacja: 3-miasto
Pomógł: 0

Czy można w taki sposób przypisać zmiennej w eeprom wartość zmiennej zapisanej w ram?

(eeprom_read_byte(&licznik_klikniec))= licznik_klikniec_ram;

bo eclipse wyświetlił błąd taki:

../main.c:80: error: lvalue required as left operand of assignment
make: *** [main.o] Error 1

Teraz już rozumiem jak powinno się wykorzystywać eeprom ;-)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 paź 2014, o 18:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 mar 2014
Posty: 580
Lokalizacja: Jastrzębie-Zdrój
Pomógł: 71

Cytuj:
(eeprom_read_byte(&licznik_klikniec))= licznik_klikniec_ram;



Kolega masz funkcję do odczytu a chcesz jednocześnie zapisywać. Masło maślane :)
eeprom_write_byte(&licznik_klikniec) wystarczy bo ten znak równości nic nie daje w tym przypadku bo i tak przesyłasz tą zmienną do zapisu.

z Niebieskim pozdRowieniem,
Doman89



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: 17 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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