Forum: Mikrocontroller und Digitale Elektronik Uart Atmega 8


von N. Weber (Gast)


Lesenswert?

Hallo,
ich habe ein Problem mit meinem Sendecode für Uart.
1
 #include <avr/interrupt.h>
2
 #include <avr/io.h>
3
 #include <stdio.h>
4
5
 #define F_CPU 8000000
6
 #include <util/delay.h>
7
8
 
9
10
11
 ISR(USART_TX_vect)
12
 {
13
 PORTD |= (1<<PORTD0);
14
 }
15
16
 //Hauptprogramm
17
 int main (void)
18
 {
19
20
 //Init usart DMX-BUS
21
 DDRD |= (1<<DDD0) ;
22
 UBRRL  = 1;
23
 DDRD |= (1<<PD1); //Output TXD Pin ATmega88
24
 UCSRB|=(1<<TXEN)|(1<<TXCIE); // TXEN0 Transmitter enable / TXCIE0 TX complete interrupt enable
25
 //UCSRC|=(1<<USBS); //USBS0 2 Stop bits
26
 sei();//Globale Interrupts Enable
27
 UDR = 0;
28
29
 
30
 
31
 //Endlosschleife
32
 while(1)
33
 {
34
 
35
 }
36
 }
Bei mir wird die ISR nicht aufgerufen. D.h die Led, die an Pd0 ist, geht 
nicht an. An der Led und so liegt es nicht.
Hoffe mir kann jmd. helfen. Baudrate habe ich auf 1 gestellt, dass 
müsste eine Geschwindigkeit von 250k sein.
Mfg Niclas

von N. Weber (Gast)


Lesenswert?

Ist ein übernommener Code. Das "Atmega 88" was auskommentiert ist, 
stimmt nicht.

von Dietrich L. (dietrichl)


Lesenswert?

N. Weber schrieb:
> Bei mir wird die ISR nicht aufgerufen.

Der Interrupt wird erzeugt, wenn das ganze Zeichen aus dem Senderegister 
herausgeschoben wurde. Dazu muss aber zuerst ein Zeichen in das Register 
hineingeschrieben werden, das dann gesendet wird.

D.h. beim 1. Mal muss man das außerhalb der Interrupt-Routine tun, alle 
weiteren Zeichen kann man dann in der Interrupt-Routine in das 
Senderegister schreiben.

Gruß Dietrich

von N. Weber (Gast)


Lesenswert?

Mit
Udr = 0;
schreibe ich doch was in den Uart

von Route_66 H. (route_66)


Lesenswert?

N. Weber schrieb:
> DDRD |= (1<<DDD0) ;
>  UBRRL  = 1;
>  DDRD |= (1<<PD1);

Wie sind denn Deine einzelnen Bits des Port D definiert? Sollte es nicht 
PD0 statt DDD0 heißen?

von Planlos (Gast)


Lesenswert?

N. Weber schrieb:
> ISR(USART_TX_vect)

Compiliert dein Code ohne Warnungen?

wenn's ein Mega8 und kein 88 ist, heißt das Teil evtl anders:

ISR(USART_TXC_vect)

von Niclas (Gast)


Lesenswert?

Gar nicht beachtet, aber ja, da kommt eine Warnung

von Niclas (Gast)


Lesenswert?

Weißt du geg. Woran das liegen kann, dass wenn ich probiere die uart auf 
2 stoppbits umzustellen, alles verrückt spielt? Dh. Eine Lampe am tx 
Port blinkt schnell.

von Niclas (Gast)


Lesenswert?

Liegt am bit "ursel"

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.