www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik RS232 tut nicht - Hilfe bei Diagnose


Autor: Marten P. (alias5000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
ich versuche derzeit an einer ATmega32-Platine mit einem max232 
(Verdrahtung nach 
http://www.rn-wissen.de/index.php/AVR-Einstieg_lei...) 
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-Tu...), 
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:
/*
  UART-Init:
Berechnung des Wertes für das Baudratenregister
aus Taktrate und gewünschter Baudrate
*/

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

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

#define BAUD 4800UL      // Baudrate

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

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

void initializeUART();

int main (void)
{
  char currentMode = 1;
  char lastMode = 0;

  //erstmal alles initialisieren
  initializePorts();
  initializeUART();


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

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

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

  }

}

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

    UBRRH = UBRR_VAL >> 8;
    UBRRL = UBRR_VAL & 0xFF;


}

Autor: PeterL (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
einer der häufigsten Fehler: TX RX vertauscht, einfach mal umdrehen, 
geht schneller, als den Aufbau genau zu kontrollieren.

Autor: Marten P. (alias5000)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.