logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C] Atmega32 resetuje się przy użyciu RS232 i ADC - analiza kodu C

Dragas 16 Cze 2012 12:30 1281 3
REKLAMA
  • #1 11007301
    Dragas
    Poziom 26  
    Witam

    Chciałbym się dowiedzieć, gdzie jest problem w programie poniżej.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Problem polega na tym, że kiedy przerwania od odbierania danych są wyłączone, ADC, działa. Problem natomiast powstaje, kiedy włączę przerwania (przy użyciu sei() ), procek resetuje się przy wywołaniu polecenia ADCMeasure(). Próbowałem wyłączyć przerwanie na czas odczytu danych, lecz to i tak nic nie pomaga.
    Dodam, że odbieranie danych działa bez problemu, ale dopóki nie odczytuje ADC.

    Pozdrawiam
    Dragas
  • REKLAMA
  • Pomocny post
    #2 11007328
    mirekk36
    Poziom 42  
    Przecież włączasz obsługę przerwania ADC:

    Cytat:
    ADCSRA |= (1 << ADEN) | (1 << ADIE) | (1 << ADPS0) | (1 << ADPS1) | (1 << ADPS2);


    A nigdzie nie masz napisanej jego obsługi

    ISR( )

    więc się resetuje

    nie włączaj tego bitu
  • REKLAMA
  • #3 11007815
    Dragas
    Poziom 26  
    Mirekk36 jesteś wielki :!:

    Siedziałem nad tym prawie 3 dni, myślałem już, że hardware jest źle zaprojektowany, a tu kod. Teraz działa poprawnie; nigdy bym nie pomyślał, aby błędy szukać w konfiguracji, która działa poprawnie bez włączonych przerwań. Dziwne, że pomimo wyłączonych przerwań na chwilę, i tak całość padała, ale cieszę się, że dobrze się skończyło :)

    Mam przy okazji 2 pytania:
    1. Przy jakim napięciu na ADC następuje wyzwolenie (jeśli miałbym włączone przerwania od ADC i napisaną funkcje)?
    2. Dlaczego przy prędkości 115200 (RS232), wysyłane są krzaczki, pomimo kwarcu 16MHz? (dotyczy kody podanego w pierwszym wpisie).

    Pozdrawiam
    Dragas
  • #4 11007848
    LordBlick
    VIP Zasłużony dla elektroda
    Dragas napisał:
    1. Przy jakim napięciu na ADC następuje wyzwolenie (jeśli miałbym włączone przerwania od ADC i napisaną funkcje)?
    Wszystko wyjaśnia nota katalogowa. Przerwanie nie jest wyzwalane żadnym poziomem napiecia, tylko zakończeniem pomiaru (nie trzeba wtedy badać bitu ADSC w ADCSRA). Pomiar należy wystartować niezależnie, lub można w tym samym przerwaniu po odczytaniu poprzedniego.
    Dragas napisał:
    2. Dlaczego przy prędkości 115200 (RS232), wysyłane są krzaczki, pomimo kwarcu 16MHz? (dotyczy kody podanego w pierwszym wpisie).
    Również to wyjaśnia nota katalogowa. Jest tam tabelka z % błędów przy danym zegarze i prędkości transmisji.
    http://lmgtfy.com/?q=atmega32+datasheet
REKLAMA