RS232 tut nicht - Hilfe bei Diagnose

OP #1843203
Lesenswert?

Hallo zusammen,
ich versuche derzeit an einer ATmega32-Platine mit einem max232 
(Verdrahtung nach 
http://www.rn-wissen.de/index.php/AVR-Einstieg_leicht_gemacht#Daten_und_Texte_zum_PC_.C3.BCbertragen) 
eine grundlegende µC<->PC-Kommunikation zum Laufen zu bringen.
Der µC wird von einem 16MHz Quarzoszillator auf Trab gehalten und 
scheint zuverlässig zu funktionieren.
Nun habe ich den Quellcode aus dem Wiki genommen (siehe hier: 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Der_UART#UART_initialisieren), 
um den UART zu initialisieren und periodisch alle 500ms ein 'x' zu 
senden.
Da ich leider kein Oszilloskop besitze, kann ich mir die generierte 
Signalform nicht ansehen, allerdings habe ich mittels einer LED erkennen 
können, dass auf der TxD-Leitung des µC alle 500ms etwas passiert.
Durch diverse Tests kann ich sicher sagen, dass das Beschreiben des 
Registers "UDR" alle 500ms periodisch durchgeführt wird; d.h. dass es in 
der Hinsicht keine Fehler im Quellcode gibt.

Das Problem ist allerdings, dass auf meinem PC-Terminal (GTKTerm unter 
Ubuntu) nichts passiert.

Um zu testen, ob es am PC liegen könnte, habe ich RxD und TxD der 
PC-Leitung überbrückt und vom PC aus etwas gesendet. Dies wurde im 
Terminal korrekt zurückgesendet. Am PC an sich liegt es wohl nicht.

Wie und wo würdet ihr weiter nach Problemen suchen? Ich stehe ein wenig 
auf dem Schlauch...

Vielen Dank!
alias5000

=======================================================================

Auszüge aus dem Quellcode:
1
/*
2
  UART-Init:
3
Berechnung des Wertes für das Baudratenregister
4
aus Taktrate und gewünschter Baudrate
5
*/
6

7
#ifndef F_CPU
8
/* In neueren Version der WinAVR/Mfile Makefile-Vorlage kann
9
   F_CPU im Makefile definiert werden, eine nochmalige Definition
10
   hier wuerde zu einer Compilerwarnung fuehren. Daher "Schutz" durch
11
   #ifndef/#endif
12

13
   Dieser "Schutz" kann zu Debugsessions führen, wenn AVRStudio
14
   verwendet wird und dort eine andere, nicht zur Hardware passende
15
   Taktrate eingestellt ist: Dann wird die folgende Definition
16
   nicht verwendet, sondern stattdessen der Defaultwert (8 MHz?)
17
   von AVRStudio - daher Ausgabe einer Warnung falls F_CPU
18
   noch nicht definiert: */
19
#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000"
20
#define F_CPU 16000000UL  // Systemtakt in Hz - Definition als unsigned long beachten
21
                         // Ohne ergeben sich unten Fehler in der Berechnung
22
#endif
23

24
#define BAUD 4800UL      // Baudrate
25

26
// Berechnungen
27
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
28
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
29
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
30

31
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
32
  #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
33
#endif
34

35
void initializeUART();
36

37
int main (void)
38
{
39
  char currentMode = 1;
40
  char lastMode = 0;
41

42
  //erstmal alles initialisieren
43
  initializePorts();
44
  initializeUART();
45

46

47
  while(1) {
48
            //hier wird sonstiges Getan, bei dem offensichtlich (durch LED-Anzeigen) sichergestellt ist, dass der Code hier nicht hängen bleibt
49

50
        while (!(UCSRA & (1<<UDRE)))  /* warten bis Senden moeglich                   */
51
        {
52
        }
53

54
        UDR = 'x';                    /* schreibt das Zeichen x auf die Schnittstelle */
55
        //_delay_ms(500);
56

57
  }
58

59
}
60

61
void initializeUART() {
62
    UCSRB |= (1<<TXEN)|(1<<RXEN);  // UART TX/RX einschalten
63
    UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);  // Asynchron 8N1
64

65
    UBRRH = UBRR_VAL >> 8;
66
    UBRRL = UBRR_VAL & 0xFF;
67

68

69
}
OP #1843223
Lesenswert?

Oh Mensch, das wars :-)

Ich habe extra einen Wannenstecker und keine Steckerleiste verwendet, 
damit die beiden nicht falsch kommen können. Und das Überprüfen der 
Pläne war offensichtlich auch nicht besser, denn sonst wäre mir 
aufgefallen, dass die vertauscht sind.

...vielen Dank für diesen Anschubser!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren