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



Teraz jest 29 mar 2024, o 14:09


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 21 lip 2018, o 12:35 
Offline
Użytkownik

Dołączył(a): 13 paź 2015
Posty: 303
Lokalizacja: Rybnik
Pomógł: 10

Witam wszystkich,

Po oglądnięciu poradników video Pana Mirka na temat pamięci EEPROM staram się wykorzystać tą wiedzę na kolorowej diodzie RGB. Już od dłuższego czasu staram się napisać program na zestawie uruchomieniowym ATB wraz z ATB SHIELD IO. Założenie działania programu jest takie:
Przyciskiem zmieniać kolory diody RGB oraz wraz z każdą zmianą koloru procesor powinien zapisać dany kolor do pamięci EEPROM, aby po resecie włączył się zapamiętany kolor diody.

Częściowo się to udało. Zmieniam kolory i zapisuje je do pamięci EEPROM, ale podczas resetu nie wszystkie kolory są prawidłowo zapamiętane. Problem jest z kolorem białym, czerwonym i żółtym.

Poniżej zamieszczam kod programu (Nie uporządkowany bo w fazie testów). Jakby ktoś mógł sprawdzić na swoim zestawie i może będzie wiedział o co chodzi:

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


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


common.h
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: 21 lip 2018, o 13:40 
Offline
Użytkownik

Dołączył(a): 07 cze 2016
Posty: 563
Pomógł: 143

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


Nie analizowałem dokładnie całego kodu, ale to co zauważyłem "na pierwszy rzut oka". Masz wewnątrz funkcji niezainicjowany wskaźnik wsk i zapisujesz go do EEPROM? Raczej to nie zadziała tak jak zakładasz. Wskaźnik będzie zawierał przypadkowe dane. Kompilator nie zgłaszał zastrzeżeń?

W ogóle nie bardzo rozumiem co chcesz zrobić. Po co używasz funkcji atoi()? Po co te warunki? Co tak naprawdę chcesz wpisać do tej struktury? Jeśli chcesz zapisać do EEPROM aktualną zawartość struktury ram_cfg wywal zupełnie tę funkcję RBG() i w jej miejscu użyj od razu funkcji copy_ram_to_eem(), przykładowo:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

...a nawet można jej użyć tylko raz, po zakończeniu tych wszystkich instrukcji if.

W pętli głównej, zamiast tego szeregu if'ów lepiej użyć switch. Tak jak jest też będzie działać, ale ze switch będzie czytelniej.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


EDIT:
Jeszcze nie zauważyłem jednej rzeczy. Przykładowo makro DLEDR_ON masz zdefiniowane jako PORTB &= ~LEDR_PIN.
Później używasz zapisu:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Co zostanie rozwinięte przez preprocesor (tak w uproszczeniu) do:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Niewykluczone, że to jakoś zadziała, ale nie sądzisz, że to dość dziwny zapis?
Do ustawienia koloru w strukturze używaj raczej wartości liczbowych (0 lub 1, bo zakładam, że nie sterujesz jasnością poszczególnych kolorów) np.:
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 później na podstawie tej wartości zmieniaj stan pinu, tak jak to masz na początku funkcji main().


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lip 2018, o 11:45 
Offline
Użytkownik

Dołączył(a): 13 paź 2015
Posty: 303
Lokalizacja: Rybnik
Pomógł: 10

Dziękuję Ci bardzo andrews, wprowadziłem poprawki według Twoich wskazówek i teraz kod działa tak jak sobie założyłem.

Funkcją atoi() chciałem zamienić parametr na liczbę i wpisać ją do struktury, widać musze poczytać na temat tej funkcji, widziałem ją w poradniku i też próbowałem z niej skorzystać. Jednak na działaniach liczbowych nie bardzo :p



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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