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



Teraz jest 28 mar 2024, o 11:36


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 11 wrz 2022, o 19:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 546
Pomógł: 0

Witam.
Dla utrwalenia wiedzy z zakresu programowania języka C wykonałem ćwiczenie odczytu zmiennej z Eeproma i wyświetlenie na LCD.
Niestety robię jakiś błąd i nie wiem gdzie .
Opisze dokładniej:

Deklaruję zmienną globalną i nadaje jej wartość 40 :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Następnie próbuję odczytać przy pomocy funkcji i przekazać do zmiennej estart :

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


Niestety po próbie wyświetlenia na lcd :
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wartość wyświetla -1 :(

Pokarze 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.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 wrz 2022, o 19:43 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 544
Pomógł: 27

Użyj tej funkcji do odczytu
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
a nie
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: 11 wrz 2022, o 20:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 mar 2015
Posty: 313
Lokalizacja: Czerwionka-Leszczyny
Pomógł: 22

A gdzie masz funkcję do zapisu zmiennej do eeprom?
Ja bym to 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.

i dopiero teraz wyślj zmienną "tmp1" na wyswietlacz.

_________________
http://www.avrboss.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 wrz 2022, o 21:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 546
Pomógł: 0

No dobrze tak będzie ale jak zrobić żeby od razu w deklaracji zmienna uint8_t zmienna_w_eeprom EEMEM przyjęła wartość 40 ? A dopiero potem w pętli głównej ją odczytać?
to znaczy jak inaczej wykonać ten zapis skoro jest zły :(
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: 12 wrz 2022, o 09:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 mar 2015
Posty: 313
Lokalizacja: Czerwionka-Leszczyny
Pomógł: 22

Nie tylko zapis deklaracji zmiennej jest zły ale ty nigdzie w programie nie zapisujesz jej do eeprom a próbujesz ją z niego odczytać.
A jeśli chcesz ją zadeklarować od razu z wartością i zapisać, to zrób tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

I dopiero teraz na wyświetlacz.


Autor postu otrzymał pochwałę

_________________
http://www.avrboss.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 wrz 2022, o 18:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 546
Pomógł: 0

Tak oczywiście masz racje dopiero teraz zrozumiałem że tak należy zrobić, mylnie rozumowałem że można prościej.
Dlaczego w ogóle o to pytam już wyjaśniam: W pewnym moim projekcie napotkałem na problem ze stosem dlatego kombinuje czy część zmiennych globalnych zapisałbym do EEproma i zwolniłbym RAM.
Ale nie wiem czy to się uda i czy to dobry kierunek moich rozważań?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 wrz 2022, o 20:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 mar 2015
Posty: 313
Lokalizacja: Czerwionka-Leszczyny
Pomógł: 22

Ja do eeproma zapisuję tylko takie dane, które chcę mieć przy starcie procka, czyli tzw."ustawienia fabryczne" a
co do zmiennych to tam gdzie nie jest to konieczne, to nie używam zmiennych globalnych, tylko zmienne lokalne.
Mam nadzieję, że pomogłem.

_________________
http://www.avrboss.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2022, o 07:46 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2561
Pomógł: 126

Ja bym do Eeproma takich rzeczy nie chował. Eeprom potrafi płatać figle przy zakłóceniach. Trzeba się zabezpieczać sumami kontrolnymi, żeby miec pewność, że to co jest zapisane nie uległo przekłamaniu.
Lepiej w swoim kodzie pootymalizuj co się da lub zmień procek na większy zamiast pakować zmienne do eeproma. W Eepromie trzyma sie ustawienia a nie zmienne. Chyba, że byś chciał użyć szeregowego RAMu - są takie kruszynki lub nawet FRAM. Ale to już takie fanaberie :)


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 wrz 2022, o 13:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2017
Posty: 546
Pomógł: 0

Dzięki za podpowiedz to teraz wątpliwości już mam rozwiane



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 6 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