Elektroda.pl
Elektroda.pl
X
Deimic One - Szkolenia
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Atmega8][C] - Atmega zawiesza się

ShadowDancer 12 Sty 2013 12:54 3519 15
  • #1 12 Sty 2013 12:54
    ShadowDancer
    Poziom 10  

    Witam,

    Mam dziwny problem, z którym nie jestem w stanie sobie poradzić. Posiadam kilka układów sterujących podajnikiem do pieca CO. Jeden z nich (nie mam pojęcia dlaczego) po pół roku pracy zaczął się zawieszać (sporadycznie, raz na tydzień). Nie jest to zwyczajne zawieszanie się procesora, ponieważ zadziałałby watchdog, wygląda na to, że zmienne przyjmują losowe wartości (i np. procesor wchodzi w tryb ustawień, ale zabiepieczenie powodujące powrót do pracy po 15 sekundach nie działa), innym razem układ zamarza podczas odliczania.

    Układ składa się z procesora, LCD, diody RGB, Enkodera, stycznika SSR, przekaźnika.
    [Atmega8][C] - Atmega zawiesza się
    Edycja: Poprawiony schemat - dodane rezystory do let, zamieniony przekaźnik na stycznik!

    Pierwsze podejrzenie padło na zakłócenia generowane przez silnik, ale kondensator przy zasilaczu jest dość duży (3300uF), poza tym załączany silnik (trójfazowy) jest daleko od skrzynki (jednak zasilanie układu jest brane z przed stycznika).
    Jedyna cewka koło kontrolera to przekaźnik na 230V zwierający jeden port do masy (nie ma go na schemacie).

    Kompletnie wychodzę z siebie, ponieważ nie mogę dojść co to jest. Zmiana kontrolera nie pomogła, a nie bardzo chcę mi się robić nowego układu.

    0 15
  • Deimic One - Szkolenia
  • #2 12 Sty 2013 13:00
    piotrva
    Moderator na urlopie...

    1. Gdzie Twój program? Może on jest winny? Nadpisanie stosu itp.?
    2. Jak masz tak podłączoną diodę RGB to procesor mógł się upalić - zero rezystorów ograniczających prąd...
    3. Ogólnie schemat krańcówek itp. jest bardzo nieczytelny. Można odnieść wrażenie, że procesor zasila przekaźnik/ napięcie z przekaźnika może być podane na nogę procesora.

    0
  • #3 12 Sty 2013 13:01
    BlueDraco
    Specjalista - Mikrokontrolery

    Tak pobieżnie to widzę niebezpieczne połączenie portu PB1 oraz nie widzę rezystorów przy LED. Przy długich połączeniach portów ze "światem zewnętrznym" dorzuciłbym rezystory podciągające nie większe niż 4k7 oraz kondensatory 100n do masy.

    0
  • Deimic One - Szkolenia
  • #4 12 Sty 2013 13:05
    ShadowDancer
    Poziom 10  

    Rezystory przy led są jest, natomiast co do krańcówki - zasilanie przekaźnika idzie przez krańcówkę, natomiast kontroler tylko dostaje informacje (port jest wejściem). Jest to też forma zabezpieczenia przed wariującym kontrolerem (jeśli rozewrze krańcówkę to tranzystor traci masę na emiterze).
    Nie ma tam przekaźnika, tylko stycznik półprzewodnikowy, więc nic się nie upali.

    Kod jest tutaj: http://ideone.com/KE68Lk
    Ale inny układ z tym programem działa już półtorej roku, więc wątpię, aby to było to.

    0
  • #5 15 Sty 2013 14:22
    grisha75
    Poziom 12  

    Dystansując się od projektu sprzętu i oprogramowania:
    Czy podmieniasz na inne takie samo urządzenie i też jest problem z innym sterownikiem ?
    Na razie wszystko wskazuje że ten jeden sterownik chodzi niestabilnie, więc jest chyba uszkodzony.
    ps. To steruje podajnikiem ślimakowym do pieca CO w domu mieszkalnym czy w przemyśle ?

    0
  • #6 15 Sty 2013 20:05
    hotdog
    Poziom 26  

    Sprawdź czy BOD jest włączony we fusach.

    0
  • #7 15 Sty 2013 20:25
    grisha75
    Poziom 12  

    Nawiązując do mojego wczesniejszego postu, proponuję sprawdź czy użytkownik pieca nie podłączył za ścianą urządzenia o obciążeniu indukcyjnym...
    Czyli sprawdzamy nie tylko to co zmeniło się w urządzeniu (ewentualna usterka, ale żeby to szybko sprawdzić trzebaby podmienić urządzenie na inne) ale również czy nie zmieniły się warunki pracy urządzenia.

    0
  • #8 15 Sty 2013 21:01
    ShadowDancer
    Poziom 10  

    Nie, za ścianą nic nie ma. W ogóle nie zmieniło się tam nic, co mogło by powodować zakłócenia. W sobotę zminiłem sterownik na inny (taki sam) i działa, jednak ciężko powiedzieć na jak długo (poprzednie padały co ok. tydzień). Urządzenie działa w domu.

    Stary egzemplarz mam narazie na stole i ciężko mi powiedzieć, co jest zepsute. Napięcie jest ok, kontroler nowy, elektrolity wyglądają ok. Aktualnie mam kontroler na stole i działa, zastanawiam się czy po prostu nie wylutować wszystkich kondków i pomierzyć pojemności, może któryś nawalił?

    BOD jest włączony (5V), Watchdog też (jednak watchdog nie pomaga - wydaje mi się, że zmienne dostają po prostu losowe wartości).

    0
  • #10 15 Sty 2013 22:17
    mirekk36
    Poziom 42  

    ShadowDancer napisał:

    Kompletnie wychodzę z siebie, ponieważ nie mogę dojść co to jest. Zmiana kontrolera nie pomogła, a nie bardzo chcę mi się robić nowego układu.


    Na prawdę polecam ci jednak zapoznanie się z kilkoma ważnymi tematami bo inaczej to ciągle będziesz borykał się z takimi problemami, że coś będzie raz działać a raz nie.

    Zacznij ZDECYDOWANIE od prawidłowego zasilania i jego filtracji - bo przy bezpośrednim sterowaniu diod LED pomimo to że masz rezystory (doczytałem) to jednak warto dodać jeszcze mały elektrolit przy procku

    http://mirekk36.blogspot.com/2012/04/mikrokontroler-prawidowe-zasilanie.html

    poza tym sposób sterowania tego przekaźnika (pin 15 procka podłączony do emitera) wydaje się być co najmniej dziwny, ale ktoś już wyżej pisał ci o tym. Toż to można zrobić inaczej a emiter normalnie do GND puścić .... tu możesz mieć kłopoty

    Kolejna rzecz - to dosyć dziwnie napisany program - ty WSZYSTKO wykonujesz w przerwaniach - wydaje mi się że nie za bardzo rozumiesz istoty działania przerwań, a na pewno nie wiesz o tym, że w trakcie startu przerwania inne są wyłączone. Tymczasem widzę u ciebie w jednym z przerwań cli(); - po co ? Tak napisany program już może działać dziwnie :(

    a na koniec - na prawdę polecam ci zajrzyj proszę do kursu video Eagla bo to nie tylko ułatwi tobie życie ale też innym którym pokazujesz swój schemat:

    http://atnel.pl/kurs-cadsoft-eagle.html

    0
  • #11 16 Sty 2013 00:49
    ShadowDancer
    Poziom 10  

    No więc poprawiłem schemat. Niestety ten pierwszy był błędny, ponieważ np. diody miały tylko być zaznaczone na których nogach kontrolera powinny być. Przepraszam za zamieszanie - generalnie dodałem rezystory do diod i zamieniłem ten nieszczęsny przekaźnik na stycznik ssd - nie miałem pojęcia, że wprowadzi on aż tyle zamieszania - oto poprawiony schemat:
    [Atmega8][C] - Atmega zawiesza się

    Mam nadzieję, że teraz już jasne dlaczego na porcie 15 nie ma więcej niż 5V.

    Cytat:

    Zacznij ZDECYDOWANIE od prawidłowego zasilania i jego filtracji - bo przy bezpośrednim sterowaniu diod LED pomimo to że masz rezystory (doczytałem) to jednak warto dodać jeszcze mały elektrolit przy procku

    Zasilanie jest filtrowane, zarówno przy procesorze, jak i przy kontrolerze (myślałem, że to widać na schemacie) i nie bardzo wiem który punkt z linkowanego artykułu mnie dotyczy.


    Cytat:

    poza tym sposób sterowania tego przekaźnika (pin 15 procka podłączony do emitera) wydaje się być co najmniej dziwny, ale ktoś już wyżej pisał ci o tym. Toż to można zrobić inaczej a emiter normalnie do GND puścić .... tu możesz mieć kłopoty

    To przez to zamieszanie z tym schematem, mam nadzieję, że teraz już wygląda dobrze. Ciężko mi wyobrazić sobie inne rozwiązanie, ponieważ najlepiej dla mnie byłoby, gdyby krańcówka odcinała też sterowanie silnika - na wszelki wypadek (a kontroler też musi mieć informację o krańcówce, aby wyświetlić komunikat).


    Cytat:

    Kolejna rzecz - to dosyć dziwnie napisany program - ty WSZYSTKO wykonujesz w przerwaniach - wydaje mi się że nie za bardzo rozumiesz istoty działania przerwań, a na pewno nie wiesz o tym, że w trakcie startu przerwania inne są wyłączone. Tymczasem widzę u ciebie w jednym z przerwań cli(); - po co ? Tak napisany program już może działać dziwnie

    Oczywiście się z tym zgodzę - jednak program pisałem baardzo dawno i od tamtej pory przeczytałem sporo not katalogowych :) cli w przerwaniu było, ponieważ nie wiedziałem, że nie może wtedy polecieć inne przerwanie i podczas komunikacji z lcd wyłączałem przerwania, aby nie wpadło jakieś przerwanie podczas delay().

    Co do wykonywania wszystkiego w przerwaniach - generalnie wszystko wykonuje w przerwaniu, ponieważ tak mi jest wygodnie - nie muszę martwić się o to, czy podczas odświeżania ekranu/wyłączania silnika nie poleci przerwanie. Logikę uaktualniałem co 250 ms, więc i ekran był uaktualniany zaraz po logice, nic innego praktycznie się w programie się nie dzieje (oprócz debouncingu przycisków).

    Dziękuje za linka do eagle, na pewno przeglądnę (schemat robiłem dla siebie, więc nie czułem potrzeby poświęcania czasu na naukę cadów).

    0
  • #12 16 Sty 2013 08:15
    BlueDraco
    Specjalista - Mikrokontrolery

    Fajnie jest wszystko robić w przerwaniach, ale pod jednym warunkiem - takim, że to, co dzieje się w przerwaniu nie wymaga żadnego oczekiwania, czyli odpadają takie ekscesy jak wyświetlanie na LCD czy transmisja przez UART ( lub jakakolwiek inna powolna - I2C, 1Wire). Za to tym, co na pewno należy zrobić w przerwaniu timera, jest badanie stanu i eliminacja drgań przycisków.

    Wydaje mi się więc, że Twój projekt stoi na głowie.

    0
  • #13 16 Sty 2013 08:40
    mirekk36
    Poziom 42  

    ShadowDancer --> jeśli uważasz, że link do opisu prawidłowej filtracji zasilania nie dotyczy twojego schematu to trudno, rób tak dalej jak masz tylko później się nie dziw efektom specjalnym. A jak nie widzisz różnic to znaczy, że jednak tylko rzuciłeś pobieżnie okiem zamiast przeczytać. Ale też może to wynikać właśnie z tego że nie za bardzo umiesz czytać (bo rysować na pewno) schematy. Dlatego link do Eagla - i wcale nie po to żebyś się uczył CAD'ów jak piszesz - panie kochany - rzuć okiem chociaż na pierwszy i drugi odcinek to od razu w głowie ci się wyjaśni milion rzeczy i zaczniesz sam patrzeć na swój schemat jak na dziwoląga - mam tu na myśli sam sposób rysowania.

    Bo rozumiem, że możesz nie wiedzieć jak zrealizować sobie operację OR albo AND w celu sterowania tego przekaźnika i z mikrokontrolera i z krańcówki - no rozumiem - pewnie początkujesz w tej dziedzinie. Ale jak ludzie podpowiadają ci że ten pomysł z doprowadzeniem tej masy do emitera tranzystora z procka to chory pomysł - to szukaj innych rozwiązań bo są i to proste i w zasięgu twojej ręki. Rzuć sobie okiem na temat chociażby prostych bramek logicznych ale i bez nich - tylko na tranzystorze jednym czy dwóch czy z diodami zwykłymi i już można je zastąpić przy normalnym i prawidłowym podłączeniu przekaźnika do masy a nie do nóżki procesora przez ten nieszczęsny tranzystor :(

    ----------------------

    Cytat:
    Co do wykonywania wszystkiego w przerwaniach - generalnie wszystko wykonuje w przerwaniu

    Panie kochany - ty nie wykonujesz wszystkiego w przerwaniach - ty sobie program główny napisałeś wewnątrz przerwania - czasem w jakimś małym bździdełku i w jednym przerwaniu można sobie tak zrobić, ale ty korzystasz tu z dwóch przerwań timerów, które nawzajem się dodatkowo blokują.

    Oczekujesz więc podpowiedzi na forum a jednocześnie:

    - piszesz że taki kod jest OK bo tobie jest wygodnie
    - piszesz że schemat jest OK bo robiłeś go dla siebie a nie dla kogoś kogo zapytasz o poradę
    - z linkami/poradami nie zaznajomisz się dogłębnie bo po co tam CADów się uczyć albo polepszać coś w filtrowaniu - przecież kondensator 3300uF wszystko powinien ci załatwić no nie ???? Szkoda panie kochany że nie przeczytałeś z uwagą tego LINK'a i nie dowiedziałeś się SKĄD SIĘ BIORĄ zakłócenia - no ale to twoja strata.

    więc jestem ciekawy jakiego typu pomocy oczekujesz?

    0
  • #14 16 Sty 2013 08:58
    94075
    Użytkownik usunął konto  
  • #15 16 Sty 2013 09:16
    BlueDraco
    Specjalista - Mikrokontrolery

    albertb: czy znasz jakąś lepszą i bardziej uniwersalną metodę niż badanie stanu przycisków np. z częstotliwością 100 Hz, przechowywanie kolejnych kilku stanów i decydowanie na podstawie tej historii o stanie przycisku, który ma być zinterpretowany przez program?
    Jeśli tak, to się nią podziel. Szczerze mówiąc nie spotkałem się z lepszym rozwiązaniem w żadnym przyzwoicie zrobionym oprogramowaniu. W zależności od parametrów i zastosowania zmienia się tylko algorytm obrabiania zmian w przechowywanej "historii" przycisku.

    0
  • #16 16 Sty 2013 09:41
    94075
    Użytkownik usunął konto