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 10 cze 2025, o 23:03


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 16 ] 
    Autor Wiadomość
    PostNapisane: 29 sie 2018, o 17:46 
    Offline
    Nowy

    Dołączył(a): 23 sie 2017
    Posty: 9
    Lokalizacja: Wejherowo
    Pomógł: 0

    Dzień dobry,

    Pracuję właśnie nad zegarkiem NIXIE na ATMEGA8A i 6 lampach IN-4 i napotkałem następujący problem:

    Zacząłem do multipleksowania lamp za pomocą programu z bluebooka o multipleksowaniu wyświetlaczy 7-SEG.

    Przerobiłem go do współpracy z 6 NIXIE i tranzystorami NPN zamiast PNP. Przy częstotliwości taktowania 8 MHz z wewnętrznego oscylatora hula jak powinno - lampy nie migają, świecą ciągłym światłem.
    Problem pojawił się kiedy podłączyłem do ATMEGA8A kwarc zewnętrzny 16 MHz wraz z dwoma kondensatorami 22pF. Ustawiłem fuse bity za pomocą mkAvrcalculator na kwarc zewnętrzny >8MHz. W Eclipse również zmieniłem kwarc na 16 MHz. Preskaler zmieniłem, jak powinno żeby ponownie uzyskać częstotliwość 300 Hz i... klops. 2 lampy świecą mrugając szybko jak nie wiem, a pozostałe śpią.

    Kiedy odłączam kwarc, zmieniam wszystko na 8 MHz działa jak powinno. Proszę o pomoc. Co sprawdzić? Gdzie szukać?
    Poniżej załączam kody pliku nagłówkowego i pliku .c
    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.


    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: 29 sie 2018, o 18:03 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 04 cze 2014
    Posty: 855
    Lokalizacja: pod Warszawą
    Pomógł: 58

    cześć
    Pokaż ten kawałek kodu odpowiedzialny za ustawienia timera od multipleksowania.
    Czy po zmianie częstotliwości w projekcie zrobiłeś "clean"?

    _________________
    Pomóżcie mi stanąć na nogi



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 sie 2018, o 18:14 
    Offline
    Nowy

    Dołączył(a): 23 sie 2017
    Posty: 9
    Lokalizacja: Wejherowo
    Pomógł: 0

    Wrzuciłem. To ten drugi listing - nixie_tubes.c
    Użyłem opcji clean, jeszcze raz build, wgrałem do Atmegi i niestety nic się nie zmieniło. Musiałem zrobić to wcześniej.

    Dodam, że zauważyłem, że kiedy drastycznie zmniejszę wartość OCR2 to ruszaja 6 lamp, ale wciąż strasznie szybko migają.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 sie 2018, o 19:36 
    Offline
    Użytkownik

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

    Próbowałeś, jak pracuje z zewnętrznym kwarcem 8MHz?

    Jak masz ustawiony fusebit CKOPT?
    Powinien być zaprogramowany, wtedy oscylator pracuje z większą amplitudą i jest mniej podatny na zakłócenia.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 sie 2018, o 20:00 
    Offline
    Nowy

    Dołączył(a): 23 sie 2017
    Posty: 9
    Lokalizacja: Wejherowo
    Pomógł: 0

    Niestety z zewnętrznych kwarców posiadam tylko 16 MHz.
    CKOPT był ustawiony na 0, zmieniłem na 1, ale bez efektów. Wciąż strasznie szybko migają tylko 4 lampy.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 sie 2018, o 20:15 
    Offline
    Użytkownik

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

    Jeśli CKOPT był na 0, to tak powinien być (zaprogramowany oznacza 0).
    Niemniej, jeśli na wewnętrznym oscylatorze 8MHz działa poprawnie, to warto sprawdzić ten sam program na zewnętrznym taktowaniu o tej samej częstotliwości. Wtedy byłaby względna pewność, że nie jest to wina programu.
    Moim zdaniem objawy, które opisujesz, mogą wskazywać, że jest to wina zakłóceń (resetowanie mikrokontrolera).



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 sie 2018, o 20:35 
    Offline
    Nowy

    Dołączył(a): 23 sie 2017
    Posty: 9
    Lokalizacja: Wejherowo
    Pomógł: 0

    Miałem na myśli, że wcześniej był niezaprogramowany. Po twojej sugestii go zaprogramowałem, ale to nic nie zmieniło.
    Reset mam podłączony przez rezystor 10k do VCC. Może przez obecność przetwornicy wariuje?

    Zauważyłem teraz w ciemności, że ostatnia cyfra żarzy się raz po raz nieznacznie. Mam zaprogramowany ten zegar wstępnie by zliczał, ale widzę, że to, co powinno być sekundą, trwa jakiś jej ułamek, bo bardzo szybko przełącza katody.

    Katody mam na PORTB, oscylator też jest na PORTB, może jakoś tam ingeruje? Wydaje mi się, że dobrze maskuję PORTB.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 sie 2018, o 07:26 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 04 cze 2014
    Posty: 855
    Lokalizacja: pod Warszawą
    Pomógł: 58

    Kurczę ustawienia timera masz ok.
    Zrób prosty test i pomigaj diodą na którymś pinie co 1sek. będziesz wiedział czy zewnętrzny kwarc prawidłowo pracuje.
    Mam na myśli wgranie prostego programu

    _________________
    Pomóżcie mi stanąć na nogi



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 sie 2018, o 08:12 
    Offline
    Nowy

    Dołączył(a): 23 sie 2017
    Posty: 9
    Lokalizacja: Wejherowo
    Pomógł: 0

    Tak zrobiłem. Przy 1 sekundzie opóźnienia dioda zmienia swój stan jak stroboskop :o



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 sie 2018, o 08:43 
    Offline
    Użytkownik

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

    Kod, który znajduje się na początku funkcji main() znajdujący się przed główną pętlą programu while(1) wykonywany jest tylko raz przy starcie. Wstaw tam zapalenie jakiejś diody (bez delay, po prostu zapal).
    Dioda powinna się zapalić i świecić (pełnym światłem) przez cały czas działania programu. Jeśli będzie migać lub przygasać, będzie to oznaczać, że mikrokontroler się resetuje. Później pozostanie znalezienie przyczyny. Przetwornica może być jednym z głównych podejrzanych...



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 sie 2018, o 08:55 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2013
    Posty: 2596
    Pomógł: 129

    A ja polecam zakup nawet najprostszego analizatora logicznego - wcale nie są drogie a jak poogladasz filmiki Mirka co dzięki nim można zrobić to od razu wpadniesz na pomysł, jak je wykorzystać do poszukiwania źródła problemu w swoim układzie.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 sie 2018, o 09:26 
    Offline
    Użytkownik

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

    Bardzo fajne urządzonko, nie raz rozwiązał moje wątpliwości.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 sie 2018, o 09:40 
    Offline
    Nowy

    Dołączył(a): 23 sie 2017
    Posty: 9
    Lokalizacja: Wejherowo
    Pomógł: 0

    Odłączyłem przetwornicę, odłączyłem NIXIE. Kiedy wrzuciłem diodę na jeden pin (zupełnie nowy program) przed nieskończoną pętlę, żeby ustawić ją na stałę, rzeczywiście dalej działa jak stroboskop. Skąd ten reset w takim razie? Atmega jest zasilana z programatora, jest filtracja zasilania, jest reset przez rezystor do VCC. Przyczyną może być ten oscylator?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 sie 2018, o 09:41 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 04 cze 2014
    Posty: 855
    Lokalizacja: pod Warszawą
    Pomógł: 58

    andrews napisał(a):
    Kod, który znajduje się na początku funkcji main() znajdujący się przed główną pętlą programu while(1) wykonywany jest tylko raz przy starcie. Wstaw tam zapalenie jakiejś diody (bez delay, po prostu zapal).
    Dioda powinna się zapalić i świecić (pełnym światłem) przez cały czas działania programu. Jeśli będzie migać lub przygasać, będzie to oznaczać, że mikrokontroler się resetuje. Później pozostanie znalezienie przyczyny. Przetwornica może być jednym z głównych podejrzanych...


    Tak trzeba zrobić ale myślę, że na wewnętrznym oscylatorze efekt przy złym zasilaniu byłby ten sam.
    Ja bym wgrał do procka coś takiego
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    sprawdził ponownie ustawienie taktowania w programie i fusy.
    Przecież to musi działać i podłączona dioda miga co sekundę.

    Wrzuć jakieś zdjęcia lub schemat


    Autor postu otrzymał pochwałę

    _________________
    Pomóżcie mi stanąć na nogi



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 sie 2018, o 09:51 
    Offline
    Użytkownik

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

    Dziaba napisał(a):
    Skąd ten reset w takim razie?

    Jeśli to "zupełnie nowy program", w którym nie ma nic poza zapaleniem diody, wyeliminowałeś źródła zakłóceń i ewentualne problemy z zasilaniem, to obstawiłbym omyłkowe włączenie watchdoga (zaprogramowany fusebit WDTON). Podczas zmiany taktowania na zewnętrzne musiałeś zmieniać fusebity, więc mogłeś się pomylić.


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 30 sie 2018, o 09:59 
    Offline
    Nowy

    Dołączył(a): 23 sie 2017
    Posty: 9
    Lokalizacja: Wejherowo
    Pomógł: 0

    Wgrałem. Za każdym razem, kiedy chcę migać diodą co 1s lub kiedy ustawiam ją na stałe w pętli nieskończonej lub poza, dioda wciąż miga jak pokręcona.

    Tutaj są ustawienia:
    mkAvrCaclucator
    Obrazek

    Eclipse Mars
    Obrazek

    Zauważyłem też, że mimo, że jest to ATMEGA8A to mkAvrCalculator i eclipse wykrywają ją jako ATMEGA8, powinno tak być?

    ------------------------ [ Dodano po: 5 minutach ]

    andrews napisał(a):
    Dziaba napisał(a):
    Skąd ten reset w takim razie?

    Jeśli to "zupełnie nowy program", w którym nie ma nic poza zapaleniem diody, wyeliminowałeś źródła zakłóceń i ewentualne problemy z zasilaniem, to obstawiłbym omyłkowe włączenie watchdoga (zaprogramowany fusebit WDTON). Podczas zmiany taktowania na zewnętrzne musiałeś zmieniać fusebity, więc mogłeś się pomylić.


    Zbawco! Rzeczywiście, w jakiś sposób musiałem zaznaczyć ten fuse bit :o Chociaż nie przypominam sobie, żebym to robił rzeczywiście był zaznaczony. Spróbuję na nowo zmontować NIXIE i powiadomię o wynikach.

    ------------------------ [ Dodano po: 11 minutach ]

    Działa. Wszystkie 6 NIXIE pięknie się wyświetla, chociaż poświata jest inna niż przy wewnętrznych 8MHz, ale to już spróbuję dopasować częstotliwością multipleksowania. Bardzo dziękuję wszystkim za pomoc!



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

    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