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

[Atmega8] Uart nie działa po podniesieniu portów INT0 i INT1

26 Lip 2011 11:28 1407 12
  • Poziom 14  
    Witam.
    Od wczoraj dociekam w czym tkwi problem gdy komunikacja kończy się po 6-8 cyklach i znalazłem problem.
    Program jest prosty. Wystarczy że zakomentuję linię która zaznaczyłem w kodzie a komunikacja działa poprawnie, w przeciwnym wypadku pętla while wykona się około 7-8 razy poprawnie, później nie wysyła żadnych danych a dioda z PB0 dalej sobie mryga czyli procek nie zwisł.
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Poziom 14  
    8 bitów i 2 bity stopu.
    Pod INT0 i INT1 mam npnki na bazach. F_CPU jest ustalane przez kompilator i na 100% jest prawidłowe.
  • Poziom 18  
    ...albo może inaczej - jest taki rejestr PORTx...i rejestr PINx jeden z nich jest wejściowy drugi wyjściowy nie potrzeba wachlować PORTx'em
  • Poziom 14  
    Racja, miało być
    DDRD &= ~_BV(0) & ~_BV(1);
    PORTD &= ~_BV(0) & ~_BV(1);

    Już poprawione. Problem dalej ten sam.

    Dodano po 3 [minuty]:

    gayetan napisał:
    ...albo może inaczej - jest taki rejestr PORTx...i PINx jeden jest wejściowy drugi wyjściowy nie potrzeba wachlować PORTx'em

    Podnoszę stan na wysoki na potrzeby przerwania.
  • Poziom 14  
    A po to żeby reagował na zbocze opadające nie używając pull-upa rezystorowego.
  • Poziom 17  
    INT0 i INT1 ustawiasz na wyjścia => DDRD |= _BV(3) | _BV(2);
    Jaki to ma sens?
    Gdzie jest obsługa przerwań?
    Wygląda jakbyś pokazał fragment kodu.
  • Poziom 14  
    Tak, pokazałem fragment bo cała reszta została zakomentowana w celu znalezienia błędu - tak to zawsze sobie robię.
    Ustawione na wyjścia bo w ten sposób pull-up działał jak należy, lub coś pomieszałem. W każdym razie przerwania działały jak należy a problem z uartem przy podniesionych pinach pozostał. Nie szukał bym tu winy po stronie przerwań INT0 i INT1 bo nie mam ich nawet zainicjalizowanych (jak w kodzie widać).
  • Poziom 18  
    To w takim razie musisz dołączyć schemat może? skoro to mają być przerwania zewnętrzne. Co ty masz tam przyłączone do PD2 i PD3?

    P.S.
    Sorry ja odpadam - nie rozumiem po co taki kod. Skoro nie masz zainicjowanych przerwań?
  • Poziom 14  
    Obecnie tylko bazy npnek. Npnki do diód przełączających i do wtrysku i sygnału drogi w komputerze samochodowym (obecnie odłączone). Wszystko z tego działa poprawnie.
    Aha i sprawdzałem na kilku atmegach i ten sam problem.

    Dodano po 18 [minuty]:

    gayetan napisał:
    To w takim razie musisz dołączyć schemat może? skoro to mają być przerwania zewnętrzne. Co ty masz tam przyłączone do PD2 i PD3?

    P.S.
    Sorry ja odpadam - nie rozumiem po co taki kod. Skoro nie masz zainicjowanych przerwań?

    A po co mam inicjować przerwanie skoro już samo podniesienie portu powoduje mi błąd?
    Wyobraźmy sobie że na portach PD2 i PD3 chcę zapalić diodę i powoduje mi to błąd w komunikacji uart. Póki co tak to wygląda.