Hallo,
wir versuchen hier mithilfe eines MAX232 Zeichen an den PC zu senden.
Das ganze funktioniert solange die RxD-Leitung vom ISP (USB-AVR Lab) mit
der des µC verbunden ist. Trennen wir diese Verbindung sendet der µC
nichts mehr. Eine Test-LED an PINC0 blinkt weiterhin fröhlich vor sich
hin.
Der verwendete Code:
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 |
|
4 | #define BAUD 9600UL
|
5 | #define UBRR_BAUD ((F_CPU / (16UL * BAUD)) - 1)
|
6 |
|
7 | void initialize_uart(void) {
|
8 | // Baudrate einstellen (Normaler Modus)
|
9 | UBRRH = (uint8_t) (UBRR_BAUD >> 8);
|
10 | UBRRL = (uint8_t) (UBRR_BAUD & 0x0ff);
|
11 |
|
12 | // Aktivieren von receiver und transmitter
|
13 | UCSRB = (1 << TXEN);
|
14 |
|
15 | // Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit
|
16 | UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0);
|
17 | }
|
18 |
|
19 | int main() {
|
20 | initialize_uart();
|
21 | const char OK = 'k';
|
22 | const char NK = 'n';
|
23 | const char TE = 't';
|
24 | DDRA = 0x00;
|
25 | DDRC = 0xFF;
|
26 | while(1) {
|
27 | _delay_ms(50.);
|
28 | PORTC = 0xFF;
|
29 | _delay_ms(50.);
|
30 | PORTC = 0x00;
|
31 | while(!(UCSRA & ( 1 << UDRE))) {}
|
32 | PORTC = 0xff;
|
33 | PORTC = 0x00;
|
34 | if(PINA & 0x1) {
|
35 | UDR = NK;
|
36 | } else if(PINA & (1 << 1)){
|
37 | UDR = TE;
|
38 | } else {
|
39 | UDR = OK;
|
40 | }
|
41 | }
|
42 | }
|
Weiss hier jemand wo das Problem liegt? Wir verzweifeln hier.
Gruß, Daniel