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



Teraz jest 16 kwi 2026, o 12:57


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 17 ] 
Autor Wiadomość
PostNapisane: 30 sty 2014, o 20:33 
Offline
Moderator
Avatar użytkownika

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

rozumiem, że przykłady z mojego bloga nic nie nie ułatwiły ? ;)

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: 30 sty 2014, o 21:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Jak by nie patrzeć tablica to jednak obszar pamięci :)
więc niestety musisz przez to przebrnąć
(żeby nie było też tego się jeszcze uczę)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2014, o 21:37 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Ja bym to zrobił tak, najpierw bym zadeklarował dwie identyczne tablice, jedna w pamięci RAM a druga w EEPROM
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


a potem już w kodzie używał funkcji jakie pokazywał Mirek w poradniku, czyli:

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


Oczywiście użyłbym tego pod warunkiem że jest to jedyna tablica, zmienna, przechowywana w EEPROM. Jakby miałoby być tego więcej, to pozostają struktury, tak przynajmniej mi się wydaje. Mam nadzieję że ktoś z większym doświadczeniem napisze czy słuszna to droga, czy też można to zorganizować lepiej.


Autor postu otrzymał pochwałę

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 sty 2014, o 21:50 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Napiszę tak jak ja to widzę. W funkcji zapisującej RAM do EEPROM nie podajemy żadnego adresu pod którym miałyby być zapisane te dane, po prostu wrzucamy coś, gdzieś. Skoro więc za chwilę byśmy użyli innej funkcji z innymi danymi do wczytania z RAM do EEPROM, to myślę że byśmy nadpisali to co wcześniej było w EEPROM.
Dobrze myślę?


Autor postu otrzymał pochwałę

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2014, o 12:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

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


Tego typu podejście najczęściej prowadzi potem do "ifologii" typu:
if (wybor==1)
budziki_pon...
else if (wybor==2)
budzik_wto...;

Wrzuć to w tablicę:
enum {pon=0, wto, sro, czw, pia, sob, nie, sp1, sp2, sizetable};
ustawienia_budzenia budziki [sizetable];

I odwołujesz się jak człowiek ;)
budziki[wybor].godzina=66.6;

A, no i definicje w plikach nagłówkowych to najczęściej zły pomysł.


Autor postu otrzymał pochwałę

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2014, o 17:10 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Weles napisał(a):
....Mózg mi kipi już...

Skąd ja to znam ;) Jak pierwszy raz po obejrzeniu poradnika zabrałem się za wykorzystanie struktury, to myślałem że osiwieje ;) W końcu jednak jakoś sobie poradziłem, chociaż do perfekcyjnego opanowania tego tematu to jeszcze dłuuuuuuga droga.
Dzisiaj trochę się zastanawiałem nad sposobem zapisania do EEPROM pojedynczej zmiennej i przypominało mi się że w jednym ze swoich programów gdzie mam strukturę używam funkcji zapisującej tylko jedną konkretną zmienną w tej strukturze, gdy dokonam zmiany wartości tejże zmiennej. Funkcja zapisująca wygląda 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 jest to funkcja biblioteczna. Pierwszy parametr wskazuje na miejsce gdzie chcemy zapisać, a drugi wskazuje na to co chcemy w zapisać.
Hmm, to może z tym pokombinuj. Chociaż z drugiej strony jak będziesz zapisywał np. 10 różnych zmiennych w jednym momencie, to wywoływanie dziesięć razy funkcji eeprom_write_byte(); będzie mało eleganckie i wygodne.


Autor postu otrzymał pochwałę

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2014, o 21:36 
Offline
Moderator
Avatar użytkownika

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

Weles napisał(a):
Mam dość..


No pewnie ... po co tam się męczyć i uczyć programowania ? ;)

_________________
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: 31 sty 2014, o 21:42 
Offline
Moderator
Avatar użytkownika

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

łooo ;) gdybym ja na projekty które pisałem tracił tylko pół nocy to byłbym szczęśliwy ;) ... że tak szybko mi to idzie

------------------------ [ Dodano po: 1 minucie ]

przecież kolega na własne życzenie omija jedne z najważniejszych zagadnień w C, które ułatwiają pracę i przyśpieszają ją znakomicie jak właśnie struktury czy unie ... więc co się dziwić że idzie powoli i z problemami? :(

_________________
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: 31 sty 2014, o 21:53 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Konkretnie to co nie działa? Próbujesz bawić się tym wszystkim co wcześniej napisałeś, czy może na razie tylko jedną tablicą, zmienną? Piszesz że dane w tablicy będziesz uaktualniał zdalnie. Robisz to już teraz? Jeśli tak, to jesteś pewien że transmisja działa?
Nie wiem jak wygląda Twój cały program oraz jak jest to wszystko rozwiązane sprzętowo, więc trochę ciężko tak pomagać po omacku. Natomiast mogę Ci napisać jak ja to robiłem gdy pierwszy raz zabrałem się za struktury i EEPROM. Utworzyłem sobie strukturę wg Mirka poradnika, czyli tak jak Ty swoją. W strukturze tej są jakieś tam zmienne. Podłączyłem sobie do procka diody, przycisk i zacząłem się bawić zmianą wartości jednej ze zmiennych. Zapisywałem do EEPROM, resetowałem procek, sprawdzałem czy się zapisało np poprzez zapalenie diody w jakimś warunku i tak do skutku, aż zaczęło wychodzić. Patrzą więc na Twoją strukturę to pobawiłbym się zmienną GODZINA. Zmieniłbym w programie wartość tej zmiennej przyciskiem na np

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


zapisał do EEPROM, a w pętli głównej dałbym warunek że jeśli ustawienia.GODZINA == 10 to zapal diodę, jeśli nie to zapal dwie, lub żadną. Jeśli by zadziałało to znowu zmieniłbym tą wartość na inną, zmienił warunek i tak aż bym był pewien że działa.

PS.
Sorry za może zbyt łopatologiczny opis, no ale jak pisałem wyżej, bez całości kodu, ciężko coś doradzić.

------------------------ [ Dodano po: 4 minutach ]

Weles napisał(a):
Zajęło mi to ponad pół nocy i teraz także siedzę już chyba z 5 godzin. I nadal bez efektu.

Na próby zapisu numeru czujników DS18B20 i ich późniejszego odczytu z EEPROM, to zszedł mi dobry tydzień. Co to jest więc pół nocy ;)

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2014, o 22:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

Weles napisał(a):
Zajęło mi to ponad pół nocy i teraz także siedzę już chyba z 5 godzin. I nadal bez efektu.
No dobrze, czyli zeszło Ci na to kupa czasu. Czy zdążyłeś w tym czasie wyizolować problem? Tzn. okroić kod do najprostszej (najkrótszej, bez innych funkcjonalności) postaci przedstawiającej dany problem?

Z tego co zrozumiałem, problem jest z obsługą pamięci EEPROM. W pliku eeprom.h masz deklaracje 2 uniwersalnych funkcji do jego obsługi:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Funkcje te jako pierwszy argument przyjmują adres pierwszego bajtu bloku pamięci w RAMie, jako drugi argument adres pierwszego bajtu bloku pamięci w EEPROMie, a jako trzeci argument wielkość tego bloku pamięci w bajtach. Co warunkuje kierunek kopiowania jest dosyć oczywiste ;)
Jak widzisz po typie wskaźników, typ bloku jest totalnie obojętny. Możesz dać wskaźnik do chara, inta, long inta, floata, tablicy, unii, tablicy wskaźników ( :twisted: ) - ważne jest tylko, żeby zgadzał się rozmiar, i aby w obu miejscach (RAM i EEPROM) odpowiednio długi blok pamięci został wcześniej zarezerwowany.

A jako, że najpierw uczymy się mnożyć, a dopiero potem potęgować, przetrenuj działanie tych funkcji na takim programie:
Tworzysz strukturę zawierającą 2 zmienne int - "a" i "b" dajmy na to.
Po włączeniu uC odczytuje ich wartość z EEPROMa i wyświetla.
Potem sprawdza, czy jakiś przycisk został naciśnięty (jeżeli tak, to wykonuje przypisaną do niego akcje i przestaje robić cokolwiek - wchodzi w pętle while(1); na przykład).
Akcje do przycisków:
1. Zwiększa a o 1 i zapisuje w EEPROMie.
2. Zwieksza b o 3 i zapisuje w EEPROMie.
3. Zmniejsza b o a i zapisuje w EEPROMie.
4. Zeruje a i b i zapisuje w EEPROMie.
Aby odczytać nowe wartości a i b musisz odłączyć na chwilę uC od zasilania, ale dzięki temu będziesz mieć pewność, że program na pewno działa ;)

No i możliwe będzie łatwe sprawdzenie co robisz źle ;)

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2014, o 23:38 
Offline
Moderator
Avatar użytkownika

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

Weles napisał(a):
Czuje cynizm w tej wypowiedzi więc nie skomentuję z uwagi na autora którego szanuję za wkład w nauczanie C. Ale jak widać nauka nie wszystkim przychodzi tak łatwo i nie wszyscy mają na to tyle czasu. Niektórzy muszą pogodzić pracę ,rodzinę , dzieci i na końcu hobby(o ile starczy na nie cokolwiek czasu).


na pewno nie ma w tym nuty cynizmu - ale nie rozumiem niestety tego typu wypowiedzi ... jedyne co miałem na celu to zmotywować - ponieważ - ja na prawdę często dużo dłużej siedzę - czy to coś złego? dziwnego?

prędzej ja za cynizm mógłbym uznać że niektórzy muszą pogodzić pracę, rodzinę itp .... no tak , a ja rozumiem, że mam luzik, zero rodziny, pracy itp tak ?

ale ok - nie nakręcajmy się - bo ja nikogo nie miałem zamiaru obrażać ani ironizować - a jeśli kolega tak to odebrał to przepraszam ...

_________________
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: 31 sty 2014, o 23:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

Musisz pokazać trochę większy fragment kodu, bo obecnie pokazałeś zmianę wartości w strukturze BUDZIK_PON, potem zapis i odczyt czegoś o nazwie ustawienia...

A to, że nie pokazujesz momentu przyrównania ustawienia=BUDZIK_PON (o ile są tego samego typu) sugeruje, że wkładasz kanapkę do bagażnika i dziwisz się, że nie ma jej w schowku ;)

A obsługę zapisu C-stringa przedstawiłem powyżej. Zauważ, że każda zmienna jest blokiem pamięci (no, upraszczając ;) ).

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2014, o 23:47 
Offline
Użytkownik

Dołączył(a): 22 gru 2012
Posty: 256
Lokalizacja: Rumia
Pomógł: 22

Weles napisał(a):
Zaraz potem zapisuję to (teoretycznie bo to nie działa)
Kod:
eeprom poleceniem   eeprom_write_block(&ustawienia,&ustawieniaEEPROM,sizeof(ustawienia_budzienia));


Resetuję procek i wczytuję dane z eeprom poleceniem
Kod:
eeprom_read_block(&ustawienia,&ustawieniaEEPROM,sizeof(ustawienia_budzienia));



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.


oraz

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

_________________
http://www.marcingibas.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 31 sty 2014, o 23:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

Marcin_G:
Niekoniecznie, bo:
int a;
sizeof(a)==sizeof(int)

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lut 2014, o 00:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

Nie zmiennej, a tablicy typu char ;)

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łę

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lut 2014, o 02:04 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

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

oznacza tablicę 5 elementów typu tablica 10 elementów int.

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

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


Zapis 1 z 5 elementów (starszy wymiar)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Zapis 1 z 10 elementów (młodszy wymiar)
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łę

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 lut 2014, o 15:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lut 2013
Posty: 223
Zbananowany użytkownik

Pomógł: 21

A obsługa tablic typów złożonych no to już przez analogię można.

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

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

to dalej operujesz jak na zwykłej zmiennej int

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

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

operujesz jak na zwykłej zmiennej typu Tstrukturalny, czyli, np.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


A zapis i odczyt takich zabawek do EEPROMa dokładnie tak jak wyżej napisałem - te funkcje interesuje jedynie długość bloku pamięci do przekopiowania.


Autor postu otrzymał pochwałę

_________________
Nie pisz komentarzy - dobry kod komentuje się sam.



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