Hallo, bin gerade dabei das erste mal UART zu verwenden. Wie so häufig
bockt das teil aber, oder ich mach was falsch :/
Ich benütze die "updated avr UART Lib"
http://beaststwo.org/avr-uart/index.shtml . Mein Hauptprogramm sieht so
aus:
1 | #define F_CPU 1000000UL
|
2 | #define xtalCpu 1000000UL
|
3 | #define baudRate 2400
|
4 | #include <avr/interrupt.h>
|
5 | #include <avr/io.h>
|
6 | #include <stdint.h>
|
7 | #include <util/delay.h>
|
8 |
|
9 | #include <uart.h> // updated fleury's lib
|
10 |
|
11 | int main (void){
|
12 | DDRD |= 0x02;
|
13 | MCUCSR = (1<<JTD); //disable JTAG
|
14 | MCUCSR = (1<<JTD);
|
15 | uart_init(2400); //UART_BAUD_SELECT(xtalCpu,baudRate)
|
16 | sei();
|
17 | for(;;){
|
18 | uart_putc('A');
|
19 | _delay_ms(500);
|
20 | }
|
21 |
|
22 | return 0;
|
23 | }
|
Leider kommt kein A am hyperterminal an. Ich hab dann mal ein
funktionierendes UART in Proteus nachgebaut mit virtuellen Com-ports,ich
kann ohne Probleme in Proteus nach draußen schreiben und umgekehrt. Mit
"draußen" mein ich von Proteus über den virtuellen Com-port ins Windows
Hyperterminal.
Dann hab ich noch den Atmega32 mit dem Programm dazugehängt (in proteus)
und dort die Signal am Oszi verglichen. Auf dem Bild sieht man die
beiden Signal die gelbe Linie ist ein 'A' von Proteus und die Blaue was
am TXD Pin vom Atmega rauskommt.
An der oben verlinkten Bibliothek habe ich nichts verändert lediglich
eingefügt.Es ist dort auch kein Beispiel dabei deshalb vermute ich mal
das
nach uart_init(baudrate angeben) und sei() für die Interrupts UART
startklar zum benützen ist?