Hallo liebe Forengemeinde,
ich würde mich selbst als Anfänger auf dem Gebiet der µC bezeichnen,
habe aber durch mein Studium Erfahrungen mir C. Jetzt habe ich
angefangen, mich mit kleinen Programmen in die Sache hineinzuarbeiten
und es lief auch bis zur UART.
Ich würde gerne eine Kommunikation zwischen meinen myAVR Board MK2 USB
Version 2.0 bestückt mit einem ATmega8 und meinem ThinkPad aufbauen.
Ich habe das Programm so einfach wie möglich gehalten und will einfach
nur das berühmte 'x', in einer Endlosschleife, an den PC senden.
Es funktioniert bedingt....Ich empfange in meinem Hyperterminal das
Zeichen aus dem Anhang.
Hier mein Code:
1 | #include <avr/io.h>
|
2 | #include <stdlib.h>
|
3 | #include <util/delay.h>
|
4 | //#include <util/interrupt.h>
|
5 | #include <stddef.h>
|
6 |
|
7 | //F_CPU in Makefile definiert auf 3686400
|
8 |
|
9 | #define BAUD 9600
|
10 | #define MYUBRR F_CPU/16/BAUD-1
|
11 |
|
12 |
|
13 | void USART_Init( unsigned int ubrr)
|
14 | {
|
15 | /* Set baud rate */
|
16 | UBRRH = (unsigned char)(ubrr>>8);
|
17 | UBRRL = (unsigned char)ubrr;
|
18 | /* Enable receiver and transmitter */
|
19 | UCSRB = (1<<RXEN)|(1<<TXEN);
|
20 | /* Set frame format: 8data, 2stop bit */
|
21 | UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
|
22 |
|
23 | }
|
24 |
|
25 | void USART_Transmit( unsigned char data )
|
26 | {
|
27 | /* Wait for empty transmit buffer */
|
28 | while ( !( UCSRA & (1<<UDRE)) );
|
29 | /* Put data into buffer, sends the data */
|
30 | UDR = data;
|
31 | }
|
32 |
|
33 | unsigned char USART_Receive( void )
|
34 | {
|
35 | /* Wait for data to be received */
|
36 | while ( !(UCSRA & (1<<RXC)) );
|
37 | /* Get and return received data from buffer */
|
38 | return UDR;
|
39 | }
|
40 |
|
41 | int main( void )
|
42 | {
|
43 |
|
44 | USART_Init ( MYUBRR );
|
45 |
|
46 | while(1)
|
47 | {
|
48 |
|
49 |
|
50 | USART_Transmit('x');
|
51 |
|
52 |
|
53 | }
|
54 |
|
55 |
|
56 | return 0;
|
57 | }
|
Ich habe in meinem Hyperterminal 9600, 8N2 und keine Flusssteuerung
eingestellt.
Ich denke es liegt Irgendwo an der Baudrate, habe schon viele Tipps aus
Foren ausprobiert - leider kein Erfolg. Auch wenn ich den Wert für UBRR,
aus dem Datenblatt bei der eingestellen F_CPU (23), direkt in main, in
die Endlosschliefe, schreibe - auch kein Erfolg.
Habt ihr eine Idee, die mir helfen könnte?
Vielen Dank im Voraus
Smi