Forum: Compiler & IDEs UART. sende probl.


von Tom (Gast)


Lesenswert?

Hallo zusammen, ich kommen hier nicht ganz weiter! aus meiner sicht, 
sollte der code funktionieren! denke ich habe ein hadware-problem!
aber um "dumme" fehler auszuschließen, wollte ich euch kurz bitten, den 
conde anzuschauen!
1
#include <avr/interrupt.h>
2
#include "usart.h"
3
4
5
6
ISR(USART_RXC_vect) 
7
{
8
Usart_Rx_Data();
9
}
10
11
int main(void)
12
{
13
uint16_t UBRR =(4000000/(16*9600))-1;// Interne Taktquelle
14
15
sei();    //Global Interrupt Enable Bit im Status Register gesetz
16
Usart_init(UBRR);
17
while(1)
18
{
19
Usart_Tx_Data('A');
20
}
21
22
}

...und hier die ".c" mit den funktionen!
1
#include <avr/io.h>
2
#include "usart.h"
3
4
5
void Usart_init(uint16_t baud)
6
{
7
UBRRH = (unsigned char)(baud>>8);
8
UBRRL = (unsigned char)baud;
9
10
/*
11
USART Control and Status Register B: UCSRCB
12
13
Bit 7 – RXCIE: RX Complete Interrupt Enable
14
Bit 6 – TXCIE: TX Complete Interrupt Enable
15
Bit 5 – UDRIE: USART Data Register Empty Interrupt Enable
16
Bit 4 – RXEN: Receiver Enable
17
Bit 3 – TXEN: Transmitter Enable
18
Bit 2 – UCSZ2: Character Size
19
Bit 1 – RXB8: Receive Data Bit 8
20
Bit 0 – TXB8: Transmit Data Bit 8
21
*/
22
23
UCSRB |= (1<<RXCIE) |(1<<TXEN) | (1<<RXEN);    //Inerrups-Flap bei RX aktiv, RX und TX aktiv 
24
25
/*
26
USART Control and Status Register C: UCSRC
27
28
Bit 7 – URSEL: Register Select
29
Bit 6 – UMSEL: USART Mode Select
30
Bit 5:4 – UPM1:0: Parity Mode
31
Bit 3 – USBS: Stop Bit Select
32
Bit 2:1 – UCSZ1:0: Character Size
33
Bit 0 – UCPOL: Clock Polarity
34
*/
35
36
UCSRC |= (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);    //Frame-Format: 8Data-Bits, 1Stop-Bit
37
38
}
39
40
void Usart_Tx_Data(unsigned char DATA)
41
{
42
    while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich */
43
    {
44
    }
45
    UDR = DATA;    
46
}
ich wollte nur fix die usart_data funktion testen...aber nix :D
habe ich etwas übersehen!? benutze avr-studio/gcc!
danke für die antworten :)

mfg
Tom

von Johannes M. (johnny-m)


Lesenswert?

Tom wrote:
> ISR(USART_RXC_vect)
> {
> Usart_Rx_Data();
> }
Wo ist die Funktion Usart_Rx_Data und was soll die machen?

von Timmo H. (masterfx)


Lesenswert?

Die ISR für den Receive Interrupt hast du bestimmt angelegt, oder?
Stimmt auch deine Taktrate? Zeig mal deine FUSES

von Tom (Gast)


Lesenswert?

hallo, danke für die schnellen antworten!
die receive funnktion habe ich noch nicht ferig geschrieben!
es ging mir jetzt erstmal um das senden, wass eigl funzen sollte :(

ich benutze den internen rc-takt 4mhz!

mfg
Tom

von was-willst-du (Gast)


Lesenswert?

Was geht denn nicht?

von Tom (Gast)


Lesenswert?

Sorry...

ich empfange nicht auf den hyperterminal!
er sollte mir doch viele "A" ausstucken oder nicht^^
ich habe den termianl auf 9600,8,n,1 konfiguriert!
genau wie die usart-schnittstelle auf meinem µC!

mfg
Tom

von Johannes M. (johnny-m)


Lesenswert?

> uint16_t UBRR =(4000000/(16*9600))-1;// Interne Taktquelle
Das geht auch schief. 4000000 passt nicht in einen int. Das gibt ohne 
ein UL dahinter Müll.

von Johannes M. (johnny-m)


Lesenswert?

Tom wrote:
> hallo, danke für die schnellen antworten!
> die receive funnktion habe ich noch nicht ferig geschrieben!
Ich fragte nicht, ob Du die Funktion fertig geschrieben hast oder nicht, 
sondern was die macht! Wenn mit dem Receiver noch nicht gearbeitet wird, 
gibt es keinen Grund, den überhaupt einzuschalten und den Interrupt 
freizugeben!

von Tom (Gast)


Lesenswert?

@johannes: da hast du recht!
werde die funktion schreiben, damit der interrupt auch genutzt wird!
mfg

von Johannes M. (johnny-m)


Lesenswert?

Immer dran denken: Im RXC-Handler muss UDR gelesen werden!

von Tom (Gast)


Lesenswert?

Danke leute es funzt jetzt :)

von Falk B. (falk)


Lesenswert?

@  Tom (Gast)

>Danke leute es funzt jetzt :)

Durch Zufall. RC-Oszillator und UART ist ein Don't!

http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART#UART_konfigurieren

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.