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

[Atmega32a] Atmega32a USART nie działa, mimo poprawnej konfiguracji na Atmega88

sekibun 19 Wrz 2012 22:06 1425 8
REKLAMA
  • #1 11328455
    sekibun
    Poziom 2  
    Witam. Od paru godzin męczę się z niedziałającym USARTem na atmedze32. Na atmedze88 wszystko śmiga jak ma więc przejściówka USB<->RS232 jest ok. Brak zimnych lutów na płytce. Kwarc zewnętrzny (ustawiony jako EXTHIFXTALRES_258CK_4MS - przy czym nie wiem czy tak ma być dla kwarcu 16MHz). Kod zamieszczam poniżej:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Wcześniej spaliłem programator podpinając go do tego układu (źle podpiąłem kandę). Jest taka możliwość, że atmega przeżyła, ale spalił się tylko USART?
  • REKLAMA
  • #2 11329430
    sekibun
    Poziom 2  
    Do portów podpiąłem diodę i mogę nią normalnie zamrugać. Jakieś pomysły?
  • REKLAMA
  • #3 11329524
    gaskoin
    Poziom 38  
    sekibun napisał:
    Jest taka możliwość, że atmega przeżyła, ale spalił się tylko USART?


    Jest, ale w takim przypadku nie liczyłbym na to, że wszystko inne będzie działało poprawnie :)

    Napisałeś za dużo kodu :) Kod trzeba testować krokowo, a Ty napisałeś milion linijek i teraz dochodź tu co jest nie tak.
  • #4 11329592
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • REKLAMA
  • Pomocny post
    #6 11330314
    Konto nie istnieje
    Poziom 1  
  • #7 11331490
    sekibun
    Poziom 2  
    Zedytowałem pierwszy post - usunąłem zbędny kod i wprowadziłem poprawki.
    USART zadziałał ale...no właśnie, ale nie działa gdy działa programowy PWM. Zakomentuję linię z init_timer1(); i USART działa. Wtedy nie mam PWM, którego również potrzebuję. Dlaczego tak się dzieje? :/
  • Pomocny post
    #8 11331842
    zumek
    Poziom 39  
    sekibun napisał:
    ... Dlaczego tak się dzieje? :/


    Dlatego, że przerwanie ISR(TIMER1_COMPA_vect) jest wywoływane co 128 taktów zegara, a wykonanie procedury przerwania timera1 zajmuje ~200 taktów.
    Po zakończeniu wykonywania przerwania od timera, gdy uC wraca do programu głównego, ma już ustawioną flagę od OCR1 i ewentualnie flagę RXC. Ponieważ timer "stoi wyżej" w hierarchii przerwań, to obsługa przerwania od RXC, nigdy nie zostanie wykonana.
  • #9 11331963
    sekibun
    Poziom 2  
    Oł. :/ Jest jakiś sposób żeby pogodzić to ze sobą? :/ Ewentualnie czy jest jakiś lepszy sposób na programowy PWM żeby działał z USARTem?

    EDIT
    Dobra oświeciło mnie. Zwiększyłem OCR1A dwukrotnie, dwukrotnie zmniejszyłem maksymalną wartość licznika i śmiga jedno i drugie. :)
REKLAMA