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

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

dominkaster 26 Lip 2011 11:28 1587 12
  • #1 9759903
    dominkaster
    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 / C++
    Zaloguj się, aby zobaczyć kod
  • #3 9759969
    dominkaster
    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.
  • #4 9759989
    gayetan
    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
  • #6 9760065
    dominkaster
    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.
  • #7 9760084
    gayetan
    Poziom 18  
    a po co?
  • #8 9760096
    dominkaster
    Poziom 14  
    A po to żeby reagował na zbocze opadające nie używając pull-upa rezystorowego.
  • #10 9760145
    dominkaster
    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ć).
  • #11 9760146
    gayetan
    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ń?
  • #12 9760177
    dominkaster
    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.
REKLAMA