Hallo,
Ich habe mal wieder ein Problem... wahrscheinlich sogar ein sehr
simples, aber ich kann den Fehler einfach nicht finden.
Und zwar will ich über den UART Daten senden. Dazu habe ich folgende
Funktionen aus dem Tutorial übernommen:
1 | void uart_putc(unsigned char c)
|
2 | {
|
3 | while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */
|
4 | {
|
5 | }
|
6 |
|
7 | UDR = c; /* sende Zeichen */
|
8 | }
|
9 |
|
10 |
|
11 | void uart_puts (const char *s)
|
12 | {
|
13 | while(*s)
|
14 | {
|
15 | uart_putc (*s);
|
16 | ++s;
|
17 | }
|
18 | }
|
Der MAX232 ACPE ist richtig angeschlossen (Versorgungsspannung und RX/TX
sind richtig angeschlossen) weil ich an Pin 2 des 9-poligen Kabels sehe,
dass da was gesendet wird (wechselnde +10V und -10V Pegel). Die
while-Schleife der main-Funktion sieht sehr simpel aus:
1 | UBRRH = UBRR_VAL >> 8;
|
2 | UBRRL = UBRR_VAL & 0xFF;
|
3 |
|
4 | UCSRB = (1<<TXEN) | (1<<RXEN) | (1<<RXCIE);
|
5 | UCSRC = (1<<URSEL)| (1<<UCSZ0) | (1<<UCSZ1);
|
6 |
|
7 |
|
8 | do
|
9 | {
|
10 | // UDR auslesen (Wert wird nicht verwendet)
|
11 | UDR;
|
12 | }
|
13 | while (UCSRA & (1 << RXC));
|
14 |
|
15 | // Rücksetzen von Receive und Transmit Complete-Flags
|
16 | UCSRA = (1 << RXC) | (1 << TXC);
|
17 |
|
18 | while(1)
|
19 | {
|
20 | uart_putc('*'); //irgendein Zeichen senden
|
21 | }
|
Die Baudrate ist auf 9600 eingestellt und es wird ein
16MHz-Quarzoszillator verwendet. Die Fuses sind korrekt eingestellt
(hatte zuerst den Oszillator falsch angeschlossen und es lief nix, ich
konnte mit AVRDude keine Verbindung zum µC aufbauen).
Soweit so schlecht. Wenn ich nun am PC HTerm öffne und alle
Einstellungen richtig setze empfange ich nur Null-Zeichen.
Folgendes konnte ich bisher ausschließen:
- falscher Anschluss vom Max232 ACPE
- Fuses falsch gesetzt
- Baudrate falsch eingestellt
Folgendes könnte eventuell den Fehler verursachen:
- Beim Max232 ACPE werden 0.1µF-Elkos empfohlen, ich verwende aber
1µF-Elkos
- Auf der Platine, wo ich die ACPEs her habe, werden gar keine Elkos
verbaut sondern Tantal-Kondensatoren, aber wieso? Hab sie mir nicht
weiter angeschaut, aber hat man die Möglichkeit den ACPE mit einer
externen -10V-Spannung zu versorgen? Oder alternativ mit drei
Spannungen: +5V, +10V, -10V?
Ich bin echt ratlos... bei der Suche bin ich auf einen Thread gestoßen,
wo das selbe Problem bestand, aber da wurde der Max232 falsch
angeschlossen (Versorgungsspannung war nicht richtig angeschlossen),
aber wenn ich -10V an Pin 6 (V-) messe, müsste der doch richtig
angeschlossen sein?
Hat jemand eine Idee, was ich noch versuchen könnte?
Ich wünsch euch noch ein frohes Fest :-)
//codes ein wenig besser formatiert