Guten Tag zusammen,
ich habe einen Atmega32 (1MHz interner Oszillator) über die Spare-RS232
des STK500 an meinen PC angeschlossen und lasse vom Controller eine Zahl
(z.B. 1) an den PC senden. Die RS232 am Computer steuere ich mit HTERM.
Im Anhang dazu zwei Bilder:
FREQ.PNG zeigt die in AVR Studio ausgewählte Prozessorfrequenz
HTERM.PNG zeigt die Einstellung in HTERM.
Zu Beginn lege ich zwei Konstanten fest, um später den Teiler für die
Baudrate zu ermitteln. Die Funktion putch sendet das Zeichen.
Konfiguriert wird asynchrone Betriebsart, keine Parität, 1 Stoppbit, 8
Datenbits
1 | #define TAKT 1000000ul
|
2 | #define BAUD 9600ul
|
3 |
|
4 | void putch(unsigned char x);
|
5 |
|
6 | void putch(unsigned char x)
|
7 | {
|
8 | while(!(UCSRA & (1 << UDRE)));
|
9 | UDR = x;
|
10 | }
|
11 |
|
12 | int main (void)
|
13 | {
|
14 | UBRRL = (TAKT / (16ul * BAUD)) - 1ul;// Baudrate mit TAKT und BAUD
|
15 | UCSRB |= (1 << TXEN) | (1 << RXEN);// Sender und Empfänger ein
|
16 | UCSRC |= (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0); // UART, keine Parität, 1 Stoppbit, 8 Datenbits
|
17 |
|
18 | x = UDR; // Empfänger leeren
|
19 | putch(1); //Zeichen senden
|
20 |
|
21 | while(1)
|
22 | {
|
23 |
|
24 | }
|
25 |
|
26 | }
|
Es wird also beim Neustart des Controllers eine 1 an COM4 gesendet.
Problem:
HTERM empfängt Schrott. Siehe Bild HTERM02.PNG (Einmal wurde die 1
gesendet, das zweite Mal eine Zwei).
Der empfangene Wert ist immer um 128 zu hoch, das MSB steht immer auf 1.
Ich habe drei verschiedene Controller ausprobiert. Das Verhalten ist
stets exakt gleich. Damit kann ich einen Defekt ausschließen.
Hat hier jemand eine Idee, wo hier der Hund begraben liegt?
Viele Grüße
Dennis