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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 11 cze 2025, o 00:09


    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 ] [ Zaznacz wszystko ]
    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: 27408
    Lokalizacja: Szczecin
    Pomógł: 1043

    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: 27408
    Lokalizacja: Szczecin
    Pomógł: 1043

    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 ] [ Zaznacz wszystko ]
    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:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO