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 w 2025? 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 25 kwi 2025, o 05:38


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
    Autor Wiadomość
    PostNapisane: 7 gru 2019, o 15:31 
    Offline
    Użytkownik

    Dołączył(a): 25 cze 2015
    Posty: 97
    Lokalizacja: Gdańsk
    Pomógł: 1

    Witam.
    Panowie i Panie, no nie mogę zrozumieć co się dzieje. Proszę o jakąś wskazówkę bo już dwa dni nad tym siedzę.
    Próbując napisać program do obsługi anemometru chciałem wykorzystać przerwanie INT0 do którego był by podłączony
    wiatraczek z kontaktronem. W czasie obrotu łączy i rozłącza masę na pin PD2 na ATmegę 32 a program ma zliczać ile razy w czasie sekundy wystąpiło przerwanie i na tej podstawie obliczać jaka jest prędkość wiatru.
    I tu zaczęły się cuda. Zorientowałem się że przerwanie działa w dziwny sposób, więc drogą stopniowej eliminacji zacząłem upraszczać
    program. (czytaj - cofać się do tyłu). Wywaliłem dosłownie wszystko, włącznie z timerami, lcd i INT0.
    Wstawiłem prostą obsługę klawisza i podłączyłem jako debuger diodę, która ma zmieniać stan na przeciwny po każdym zadziałaniu klawisza. Rolę klawisza wcześniej pełnił wspomniany wiatraczek z kontaktronem.
    I co się dzieje.
    Jeśli do PD1 lub PD0 lub PDx podłączam masę to dioda zmienia stan na przeciwny i go zachowuje. Jeśli wykorzystuję pin PD2 też tak działa ale pod warunkiem że masa jest podłączona do pinu. Jeśli odczepię masę od pinu PD2 to dioda zaczyna mrugać i tu uwaga tak jak by była napędzana timerem. Mniej więcej sekunda przerwy sekunda świecenia.

    Oczywiście wykorzystywany pin jest zawsze podciągnięty do VCC. Taktowanie jest 11059200,ale jego zmiana nic nie zmienia. Wymieniłem mk podejrzewając że coś jest nie tak z tym którego używam. Wszystko robię na płycie Mirka ATB 1.05a.

    Pomocy bo oczadzieję ze złości.

    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.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 gru 2019, o 15:38 
    Offline
    Użytkownik

    Dołączył(a): 05 sty 2015
    Posty: 393
    Lokalizacja: Mielec
    Pomógł: 14

    A JTAG wyłączony?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 gru 2019, o 15:38 
    Offline
    Użytkownik

    Dołączył(a): 25 cze 2015
    Posty: 97
    Lokalizacja: Gdańsk
    Pomógł: 1

    OCZYWIŚCIE.

    Zresztą JTAG jest podłączony do portu C o ile dobrze pamiętam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 gru 2019, o 16:13 
    Offline
    Użytkownik

    Dołączył(a): 14 sie 2016
    Posty: 905
    Pomógł: 39

    klik zerujesz gdziekolwiek?

    _________________
    Moje porady są błędne,nie czytać,zbanować od razu.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 gru 2019, o 16:17 
    Offline
    Użytkownik

    Dołączył(a): 25 cze 2015
    Posty: 97
    Lokalizacja: Gdańsk
    Pomógł: 1

    Nie bardzo rozumiem.
    A ok.
    Nie no nie zeruję bo on sam się zeruje po przepełnieniu. To zmienna uint8.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 gru 2019, o 16:22 
    Offline
    Użytkownik

    Dołączył(a): 22 kwi 2017
    Posty: 99
    Lokalizacja: Piła
    Pomógł: 4

    A gdzie masz DDRD |= sensor lub DDRD &= ~senor?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 gru 2019, o 16:28 
    Offline
    Użytkownik

    Dołączył(a): 25 cze 2015
    Posty: 97
    Lokalizacja: Gdańsk
    Pomógł: 1

    A po co DDRD |= sensor. Przecież w ten sposób ustawie pin sensora na wyjście a on ma być na wejście.
    Zresztą zastanówcie się. Nic nie zmieniając w kodzie, poza tylko zmianą pinu na PD2 powoduje nieprawidłowe działanie. Na innych pinach np. na PD0,1,4,7 jest ok.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 gru 2019, o 16:52 
    Offline
    Użytkownik

    Dołączył(a): 22 kwi 2017
    Posty: 99
    Lokalizacja: Piła
    Pomógł: 4

    A nie masz zworki między INT a PD2 pod wyświetlaczem numerycznym?

    ------------------------ [ Dodano po: 6 minutach ]

    Taktuje Ci RTC co sekundę.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 gru 2019, o 17:03 
    Offline
    Użytkownik

    Dołączył(a): 05 gru 2017
    Posty: 430
    Lokalizacja: Puck
    Pomógł: 7

    Witaj jaca

    Nie jestem ekspertem ale wydaje mi się że w tym fragmencie kodu coś nie gra

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


    w DDRC |= (1<<PC7); ustawiasz kierunek dla pinu PC7 jako wyjście ale nie ustawiasz czy na tym wyjściu ma być stan
    niski -0 czy wysoki - 1

    a dla PORTD masz ustawiony stan wysoki - 1 ale nie masz ustawionego rejestru kierunku czy to ma być wejście czy wyjście

    ------------------------ [ Dodano po: 38 minutach ]

    Ja za czujnik zastosowałbym fotooptor szczelinowy (nie wiem czy to fachowo tak się to nazywa
    ale mam nadzieję że wiesz o co mi chodzi ) niema drgań styków które mogły by zakłócać pomiar



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 gru 2019, o 17:45 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 paź 2014
    Posty: 1033
    Lokalizacja: Trójmiasto
    Pomógł: 190

    Układem na zestawie ATB_1.05A który generuje przerwanie co 1s jest układ RTC PCF8583. Tak jak juz wyżej to sugerował kolega kazekat.
    Pod wyświetlaczem 4x7 segm masz zespół zworek które są podzielone na grupy. Grupa opisane jako RTC ma 3 piny z czego środkowy z numerkiem 2 jest podłączony do pinu przerwania układu RTC. W tym przypadku masz zapewne założoną zworkę na piny 1-2 która podaje to przerwanie na pin PD2. Najprawdopodobniej zdjęcie tej zworki załatwi sprawę.
    Obrazek


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 gru 2019, o 18:03 
    Offline
    Użytkownik

    Dołączył(a): 05 gru 2017
    Posty: 430
    Lokalizacja: Puck
    Pomógł: 7

    W tym fragmencie też mi coś nie gra

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


    w tym kawałku kodu if(!klik && !(PIND & sensor) ){
    powinno być tak if(!klik && !(PINC & sensor) ){

    ------------------------ [ Dodano po: 6 minutach ]

    oraz tutaj else if(klik && (PIND & sensor))klik++;
    powinno być else if(klik && (PINC & sensor))klik++;

    A nie troszkę z tego portu i troszkę z tamtego
    albo robisz to na PINC albo na PIND



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 gru 2019, o 18:30 
    Offline
    Użytkownik

    Dołączył(a): 25 cze 2015
    Posty: 97
    Lokalizacja: Gdańsk
    Pomógł: 1

    xentis napisał(a):
    Układem na zestawie ATB_1.05A który generuje przerwanie co 1s jest układ RTC PCF8583. Tak jak juz wyżej to sugerował kolega kazekat.
    Pod wyświetlaczem 4x7 segm masz zespół zworek które są podzielone na grupy. Grupa opisane jako RTC ma 3 piny z czego środkowy z numerkiem 2 jest podłączony do pinu przerwania układu RTC. W tym przypadku masz zapewne założoną zworkę na piny 1-2 która podaje to przerwanie na pin PD2. Najprawdopodobniej zdjęcie tej zworki załatwi sprawę.
    Obrazek

    Wielkie dzięki!!
    Oczywiście że tu był problem. A zastanawiałem się czy coś na zestawie nie jest ekstra z komunikowane z PD2, zajrzałem nawet w schemat i tego nie znalazłem. No cóż starość. Człowiek ślepy nawet w okularach.

    ------------------------ [ Dodano po: 10 minutach ]

    miki53 napisał(a):
    Witaj jaca

    Nie jestem ekspertem ale wydaje mi się że w tym fragmencie kodu coś nie gra

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


    w DDRC |= (1<<PC7); ustawiasz kierunek dla pinu PC7 jako wyjście ale nie ustawiasz czy na tym wyjściu ma być stan
    niski -0 czy wysoki - 1

    a dla PORTD masz ustawiony stan wysoki - 1 ale nie masz ustawionego rejestru kierunku czy to ma być wejście czy wyjście


    PC7 ma być wyjściem bo obsługuje diodę świecącą, jaki ma być stan nie ustawiam bo bym na stałe zapalał diodę albo ją gasił w zależności od tego co bym ustawił. To robi program rozkazem PORTC ^= (1<<PC7);
    A PD2 ma być wejściem. Wejść nie trzeba ustawiać bo to ustawienie domyślne mikrokontrolera, więc instrukcja DDRD &=~(1<<PD2) nie jest potrzebna. Natomiast rozkaz PORTD |= (1<<PD2); podciąga ten pin do VCC by pozbyć się stanów nieustalonych.

    ------------------------ [ Dodano po: 15 minutach ]

    miki53 napisał(a):
    W tym fragmencie też mi coś nie gra

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


    w tym kawałku kodu if(!klik && !(PIND & sensor) ){
    powinno być tak if(!klik && !(PINC & sensor) ){

    ------------------------ [ Dodano po: 6 minutach ]

    oraz tutaj else if(klik && (PIND & sensor))klik++;
    powinno być else if(klik && (PINC & sensor))klik++;

    A nie troszkę z tego portu i troszkę z tamtego
    albo robisz to na PINC albo na PIND


    Kawałki kodu, które opisałeś obsługują klawisz, inaczej podawanie masy na PD2 i eliminację drgań styków.
    Zapoznaj się z poradnikiem Mirka "Drgania styków to bajki".
    PORT C obsługuje diodę i z klawiszem nie ma nic wspólnego.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 8 gru 2019, o 13:54 
    Offline
    Użytkownik

    Dołączył(a): 22 kwi 2017
    Posty: 99
    Lokalizacja: Piła
    Pomógł: 4

    jaca napisał(a):
    No cóż starość. Człowiek ślepy nawet w okularach.

    Podałeś temat na forum, było więcej okularów więcej można zauważyć.
    Powodzenia.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 8 gru 2019, o 17:42 
    Offline
    Moderator
    Avatar użytkownika

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

    kazekat napisał(a):
    Podałeś temat na forum, było więcej okularów więcej można zauważyć.

    Krótko mówiąc - forum to takie większe okulary ;)

    _________________
    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  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


    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