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



Teraz jest 30 sty 2025, o 18:27


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 7 lip 2014, o 15:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2013
Posty: 104
Pomógł: 0

Witam.
Napisałem taki kod:

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


Tutaj chyba działanie programu jest jasne. Ewentualnie proszę o podpowiedź jak w inny sposób to rozwiązać. Proszę też o podpowiedź jak poradzić sobie z drganiami styków, ale bez wykorzystania _delay_ms(80);.

Teraz co chciałbym zrobić ... Chciałbym, aby tablica "powrot_zadany" była przechowywana w pamięci eeprom. Tzn., chcę, aby użytkownik mógł sobie wypełnić ją swoimi wartościami i żeby to się zapisało w tej pamięci. W dalszej części programu będę musiał odczytywać wartości z tej tablicy i wykorzystywać je w programie.

Wiem, że są takie funkcje jak:

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


Ale jak ich poprawnie używać? Co mam wstawić za adres oraz jak zapisać całą tablicę na raz? Tak aby nie wykonywać zapisu po nadaniu wartości każdemu jej elementowi z osobna?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lip 2014, o 15:25 
Offline
Moderator
Avatar użytkownika

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

pavel0910 napisał(a):
Ale jak ich poprawnie używać?


Może warto zaglądać na bloga do poradników ?

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

_________________
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: 8 lip 2014, o 15:12 
Offline
Użytkownik

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

Przed zmienną dopisujesz EEMEM i musisz dorzucić bibliotekę
#include <avr/eeprom.h>
wtedy zapisujesz i odczytujesz tak jak zapisałeś

Co do obsługi klawiszy bez delay to poczytaj o superdebounce, temat był dokładnie opisany na forum



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2014, o 15:27 
Offline
Moderator
Avatar użytkownika

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

pavel0910 napisał(a):
Proszę też o podpowiedź jak poradzić sobie z drganiami styków, ale bez wykorzystania _delay_ms(80);.


również blog panie kochany ;) masz to tutaj:

http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html

_________________
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: 8 lip 2014, o 18:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2013
Posty: 104
Pomógł: 0

Ok, z tą pamięcią eeprom będę jeszcze kombinował, ale najpierw chcę obsłużyć te klawisze.

Napisałem takie coś:

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



1. Obsługa klawisza opisana na blogu Mirka:
Dioda miga sobie jak chce, nie da się normalne jej włączyć lub wyłączyć, rzadko się to udaje.

2. Kocia obsługa:
Jeśli przytrzymam przycisk przez 0.5s to dioda zmieni stan na przeciwny, wszystko działa ok, jeśli przytrzymam dłużej to dioda miga sobie co 0.5s.

Ale ja bym chciał żeby niezależnie od czasu naciśnięcia przycisku instrukcje wykonały się tylko raz. Co może być nie tak, że u mnie sposób opisany na blogu nie chce poprawnie działać? Wiem, że jest to raczej nie możliwe, ale u mnie coś jest nie tak.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lip 2014, o 19:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Spróbuj na początek zmienić zmienną key_lock z uint8_t na uint16_t.

Pętlę główną masz prawie pustą więc jej "obrót" trwa bardzo krótko. A tym samym zmienna key_lock bardzo szybko doliczy do zera. Jeśli po tym czasie styk będzie nadal drgał to obsługa klawisza może szaleć.
U mnie na na ATB działa z key_lock jako uint8_t. Ale na stykówce z jakimiś klawiszami z wylutu też mi nie działało.

Gdybyś w pętli while miał jakieś działania czasochłonne np. wyświetlanie na LCD to problemu mogło by nie być.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lip 2014, o 19:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2013
Posty: 104
Pomógł: 0

Co do tego zapisu do pamięci EEPROM. Obejrzałem 2 części poradnik i na jego podstawie stworzyłem takie coś jak w załączniku. W sumie jest to prawie to samo, ale bez obsługi IR, UARTA.
Problem polega na tym, że jeśli wyświetlam na lcd dane przechowywane w pamięci RAM, to wyświetlają się one poprawnie. Jeśli wyświetlam dane z pamięci FLASH to również wyświetlają się poprawne.
Problem pojawia się wtedy gdy chcę wyświetlić dane z pamięci EEPROM. Wtedy pokazuje się coś innego. Tak jakby dane z pamięci RAM nie były kopiowane do pamięci EEPROM.

Jeśli ktoś może rzucić okiem na ten projekt to będę wdzięczny.


Załączniki:

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lip 2014, o 23:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Zmiennych z pamięci Eeprom nie można odczytywać w ten sposób
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Żeby odczytać te zmienne musisz skorzystać z funkcji, które dostępne są w pliku eeprom.h.

W tym przypadku żeby odczytać zmienną jedno bajtową trzeba użyć funkcji eeprom_read_byte czyli
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: 9 lip 2014, o 23:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2013
Posty: 104
Pomógł: 0

jacekk232, dzięki! Właśnie o to chodziło. Taki prosty błąd...



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 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