Hallo,
ich versuche mit dem ATmega644 eine UART Verbindung zum PC herzustellen,
bzw. soll der ATmega ein paar Zeichen senden. Ich erhalte jedoch
keinerlei Reaktion am PC (mit CP2102 und Putty und mit Arduino versucht
zu lesen).
Fuses sind wie folgt gesetzt: Low: 0xE2 High: 0x99 Extended: 0xFF.
Ich gehe davon aus, dass der ATmega bei diesen Einstellungen mit 8MHz
läuft. Nach vielen Fehlversuchen, habe ich den Code auf folgendes
minimiert:
1 | #define F_CPU 8000000UL
|
2 |
|
3 | #include <avr/io.h>
|
4 | #include <util/delay.h>
|
5 |
|
6 | #define baudrate 9600UL
|
7 | void uart0_init(void);
|
8 | void uart0_putchar(unsigned char c);
|
9 |
|
10 | int main()
|
11 | {
|
12 | uart0_init();
|
13 |
|
14 | while (1)
|
15 | {
|
16 | uart0_putchar('t');
|
17 | }
|
18 |
|
19 | return 0;
|
20 | }
|
21 |
|
22 | void uart0_init(void)
|
23 | {
|
24 | UCSR0A = (1<<U2X0);
|
25 | UBRR0H = (uint8_t) ((F_CPU / (8 * baudrate)) - 1)>>8;
|
26 | UBRR0L = (uint8_t) (F_CPU / (8 * baudrate)) - 1;
|
27 | UCSR0C = (1<<UCSZ01) | (1<<UCSZ00); // Asynchron 8N1
|
28 | UCSR0B = (1<<TXEN0) | (1<<RXEN0); // tx & rx enable
|
29 | }
|
30 |
|
31 | void uart0_putchar(unsigned char c)
|
32 | {
|
33 | loop_until_bit_is_set( UCSR0A, UDRE0 );
|
34 | UDR0 = c;
|
35 | }
|
Ich habe leider kein Oszilloskop, aber habe die Spannung am TX Pin
gemessen. Diese beträgt ca. 2,3V. Wenn ich nichts übertrage, liegt diese
bei 4,78V. Die Spannung am RX Pin liegt bei 0V.
Ich hoffe, hier weiß jemand woran es liegen könnte.
Gruß Niclas