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

ATMEGA16[C] - Nie za każdym razem układ uruchamia się

10 Cze 2014 21:30 1713 14
  • Poziom 9  
    Witam wszystkich. Może ktoś pomoże znaleźć mi błąd w kodzie .

    Otóż zlutowałem układ do pomiaru temperatur , ciśnienia, oraz wilgotności , zaprogramowałem na Atmedze 16 oraz wyświetlam wyniki na LCD 2x16.

    Po podłączeniu zasilania układ nie zawsze rusza, widać czarny ekran, kilkukrotne podłączenie i odłączenie zasilania, sprawia ze układ rusza i pokazuje się ekran powitalny oraz wyniki z czujników.

    Jak usunąć tą usterkę?
    Trochę przypał na obronie pracy jak mi się układ nie będzie chciał włączyć

    ATMEGA16[C] - Nie za każdym razem układ uruchamia się


    Kod main.c

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 33  
    Może jakiś kondensator na reset daj.
    A czy a pewno układ nie rusza?
    Może procek i czujniki działają tylko wyświetlacz szwankuje
  • Poziom 31  
    Bardziej to wygląda na problemy z elektroniką niż z oprogramowaniem. Takie objawy może dawać np.: niestabilne zasilanie (m.in. brak kondensatorów filtrujących), źle zaprojektowany układ resetu, problemy z zegarem (kwarcem), itd.

    Pozdr!
  • Poziom 9  
    Z tym że wgrywałem inny program ktory tylko napis wyświetlał i wszystko startuje za każdym razem.

    Jest kondensator na resecie

    Dodano po 1 [minuty]:

    ATMEGA16[C] - Nie za każdym razem układ uruchamia się


    @slawko_k znaczy podaje zasilanie na czujniki układ bo dodałem diody przed każdym czujnikiem i świeca. Wyświetlacz nie rusza

  • Poziom 14  
    Może przed zainicjowaniem wyświetlacza dać niewielkie opóźnienie _delay_ms(200), aby wyświetlacz był już gotowy na przyjmowanie danych gdy zacznie pracować procesor.
  • Poziom 9  
    Widać efekt delaya - zapalone segmenty potem inicjowanie wyświetlacza.

    Lecz problem wciąż ten sam, czasem czarny ekran kompletnie
    Czasem odpala rusza z ekranem powitalnym

    Dodam że w takiej sytuacji czarnego ekranu pomaga wciśniecie resetu na atmedze i rusza program.

  • Poziom 14  
    To zwiększ jeszcze to opóźnienie, np. do 500mS.
  • Poziom 9  
    niestety, wciąż to samo .... :(

    wciśnięcie resetu pomaga zawsze za pierwszy razem ... hmmm

  • Poziom 14  
    A jakim zegarem taktujesz procesor. Ja kiedyś miałem problem przy taktowaniu 1MHz i po zwiększeniu do 8MHz wszystko ruszyło. Może problem jest w ustawieniach kompilatora i źle wylicza opóźnienia w procedurach obsługi lcd.
  • Poziom 9  
    Taktowałem 1MHZ przestawiłem na 8MHz wciąż to samo z tym że jak już program pójdzie to strasznie powoli chodzi wyświetlanie na lcd
  • Poziom 14  
    Jeśli MCU nie zawsze startuje po (p)odłączeniu zasilania proponuję włączyć funkcjonalność "Brown Out Detection" za pomocą fuse'ów.

    Miałem kiedyś podobne zachowanie gdy ponownie załączane było zasilanie w momencie kiedy na procesorze napięcie było jeszcze powyżej 0 ale niższe od zasilania nominalnego.
  • Poziom 22  
    Korzystam z podobnych procedur (Mirek Kardaś + DHT11) i moim zdaniem problem leży w obsłudze DHT11, którą przerabiałem na swoje potrzeby, bo oryginalna nie działa jak powinna (choćby dlatego, że dwa razy czyta to samo i za każdym razem ignoruje połowę danych).
    Obsługa DHT11 ma w sobie pętlę while, która czeka na zmianę stanu portu, która to zmiana nie zawsze występuje lub czasy odczytu nie są właściwe.
    co ja bym zrobił:
    - sprawdził czy masz w projekcie poprawnie zadeklarowane F_CPU
    - wywalił tymczasowo obsługę DHT i sprawdził czy pomogło
    - odczytywał go rzadziej (czas reakcji jest pomiędzy 6-15 sekund). Ja odczytuję go co 15 sek (minimum to chyba sekunda). Aby tego dokonać zrezygnuj z tych nieszczęsnych delay_ms() i zastosuj licznik, a pętlę główną możesz uzależnić od stanu licznika (zmiennej, flagi itp).
    Obowiązkowo zastosowałbym WatchDoga (jak Ci się zawiesi podczas "prelekcji" to dopiero będzie tragedia)
    Mam nadzieję, że to obrona pracy w technikum, bo na wyższym stopniu to trochę się nie nadaje...(ale to inny temat)
    Czy przy DS18B20 jest dioda LED? Załącz całość schematu, to może znajdziemy inne problemy.
    PS. ten bajerek "pomiar" nie nadaje się na obronę pracy - chyba, że za wszelką cenę nie pokażesz źródła...

    Dodano po 9 [minuty]:

    Chyba trochę się pośpieszyłem... doczytałem, że on nie startuje, a na starcie nie ma odczytu DHT. Tak czy inaczej, będziesz miał problemy z tym czujnikiem, więc warto zwrócić na niego uwagę.
    Dlaczego usunąłeś przerwę na konwersję temperatury ? (750ms)
  • Poziom 9  
    usunąłem tą przerwę gdyż wszystkie pomiary wyświetlanie jednocześnie po przejsciu całego kodu , i delay jest i tak już długi po dht tak więc starczy mu czasu na konwesję temperatury..

    zaraz sprawdzę poradę wyżej

    Dodano po 1 [minuty]:

    obrona pracy inżynierskiej to jest , taki temat dostałem. Jeszcze muszę skomunikować to z labview i jeszcze prawdopodobnie dodam czujnik pomiaru kierunki i siły wiatru.

    czemu się nie nadaje na nic nic na obrone w technikum?
    mój kolega takie coś bronił na mgr.

    ten bajerek przerobię go na wyświetlanie SPRAWDZ CZUJNIKI, jeśli ktoryś z czujników będzie odłączony to program wyświetli to, a jeśli wszystko bedzie OK to przejdzie do wykonywania pomiarów, oraz wyświetlanie mojego nazwiska


    Tak przy każdym czujniku jest dioda LED
  • Poziom 30  
    Bardzo często pomaga w takich sytuacjach przestawienie fuse SUT (to te połączone z ustawianiem zegara) np SUT:10 (65ms) co da spore opóźnienie startu samego procka i pozwoli ustabilizować się jego "bebechom" przed wykonaniem właściwego programu.