Forum: Mikrocontroller und Digitale Elektronik ATTiny: RX Interrupt wird nicht erreicht


von Bausparfuchs (Gast)


Lesenswert?

Hallo,

ich verzweifle gerade an dem RX-Interrupt meiner USART0.
Ich nutze bei einem ATTiny841 die USART0 (RXD0 an PB2 und TXD0 an PA7).

Initialisierung:
#define F_CPU 8000000UL

#define BAUD 9600UL
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD)

#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
#error Systematischer Fehler der Baudrate groesser 1% und damit zu hoch!
#endif

void UART_init(void)
{
  UBRR0H = UBRR_VAL >> 8;
  UBRR0L = UBRR_VAL & 0xFF;
  UCSR0C = (1<<UCSZ00) | (1<<UCSZ01); 8N1
  UCSR0B |= (1<<RXEN0) | (1<<TXEN0) | (1<<RXCIE0);
}

meine Main:
int main(void)
{
        DDRB = 0b00000101;
  PORTB = 0b00000101;

  DDRA  = 0b00111111;
  PORTA = 0b00100000;

  UART_init();
  sei();
        while(1)
        {...}
}

ISR:
ISR(USART0_RX_vect)
{
  PORTA = 0b00000000;
}

Mittlerweile möchte ich in meiner ISR nur noch eine LED ausschalten um 
zu schauen ob der µC noch da rein springt. Tut er nicht, und ich 
verstehe nicht warum. Hab mit nem Oszi nachgemessen, die Daten liegen 
definitiv an. Zusätzlich hab ich mal den INT0 getestet, da funktioniert 
alles wie gewünscht. Weiß jemand Rat?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

> (RXD0 an PB2 und TXD0 an PA7).
In diesem Fall solltest du noch das REMAP Register beschreiben, da der 
Normalfall PA2 (RXD0) und PA1(TXD0) benutzt. Also
1
REMAP |= (1 << U0MAP);

Siehe Abschnitt 18.12.7 im Datenblatt.
Ob es sinnvoll ist, RXD vorher als Ausgang zu definieren, bleibt die 
Frage. Das Freigeben des Empfänger überschreibt die normale I/O Funktion 
des Portes, aber sinnvoll ist es m.E. nicht.

von Bausparfuchs (Gast)


Lesenswert?

Danke! Der Remap hat es gebracht! Das andere hab ich entsprechend 
angepasst.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.