mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega1284P, USART1 und Rec_Interrupt


Autor: Andreas H. (heilinger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe zwar schon ein paar USART-Schnittstellen auf nem AVR 
programmiert, jedoch funzt mein Receive-Interrupt diesmal nicht, also 
der Interrupt wird nicht aufgerufen.

Hier mal der relevante Code:
#define UBRR_19k2  129 //für Baudrate 19,231k

int main(void)
{
  [...]
  USART1_init(UBRR_19k2); //USART1 intialisieren
  PORTD &= ~(1<<PD7);
  sei();   
  [...]                                               
}

void USART1_init(unsigned int ubrr1)
{
  UBRR1H = (unsigned char) (ubrr1>>8); 
  UBRR1L = (unsigned char) ubrr1;
  
  UCSR1C = (1<<UCSZ11) | (1<<UCSZ10); //frame format: 8data, 1stop bit, asynchronous USART, No parity
  UCSR1B = (RXCIE1)    | (1<<TXEN1)  | (1<<RXEN1); //Enable receiver & transmitter and receiver interrupt
  UCSR1A = (1<<U2X1);                 //Double speed mode
}


ISR(USART1_RX_vect)
{
  static unsigned char uc_zaehler_RXD_Bytes = 0;

  PORTD |= (1<<PD7); 

  uc_Receive_RX1[uc_zaehler_RXD_Bytes] = UDR1;

  if (uc_Receive_RX1[uc_zaehler_RXD_Bytes] == 0x0D) //Ende der Übertragung
  {
    uc_zaehler_RXD_Bytes = 0;
    f120_Flag.O2_Sensorkommunikation_komplett = 1;
  }
  else
    uc_zaehler_RXD_Bytes++;
}

PD7 geht nicht auf high, weswegen ich annheme, dass der Interrupt nicht 
aufgerufen wird.
Ich benutze nen ATmega1284P mit 20MHz

Autor: Andreas H. (heilinger)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
kleiner Nachtrag:

An PD2 liegt folgendes Signal an.
Es sind 9 Byte, die mit 19.2kHz gesendet werden.

Autor: Andreas H. (heilinger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
okay, hab den Fehler gefunden.

Vielleicht sollte ich anstatt

UCSR1B = (RXCIE1)    | (1<<TXEN1)  | (1<<RXEN1);
lieber
UCSR1B = (1<<RXCIE1)    | (1<<TXEN1)  | (1<<RXEN1);

schreiben, sch*****

Autor: Andreas H. (heilinger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe trotzdem noch ein Frage:

Wenn ich den Receive-Interrupt aktiviere, dann ist es nur eine Frage der 
Zeit, bis mein uC abstürzt, was sich darin bemerkbar macht, dass die 
Peripherie rundherum ausfällt (Display, Tasten).

Wenn ich nun einen C=15pF an den PIN des RXD1 gegen Masse hänge, dann 
stürzt er nicht ab. Wieso ist das so?

Es liegt auf jeden Fall an der Aktivierung des Receive-Interrupts, denn 
wenn ich diesen nicht aktiviere, dann habe ich das Problem nicht, auch 
ohne Kondensator.

Dabei ist es egal, ob ein Signal an RXD anhängt oder nicht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.