-         

Ergebnis 1 bis 5 von 5

Thema: ATMega32 USART Problem

  1. #1

    ATMega32 USART Problem

    Anzeige

    Hallo,

    Ich bekomme die Datenübertragung zwischen meinem Mega32 und dem PC einfach nicht auf die Kette.

    1. Problem: Mein Mainboard hat keinen COM-Port. Auf dem Mainboard ist aber ein Wannenstecker für die Verbindung einer Erweiterungskarte vorhanden. Diesen Wannenstecker habe ich nun einfach auf meinen MAX232 Adapter gelegt. Ich kann mir aber nicht sicher sein ob RxD und TxD so beschaltet sind, wie ich es hoffe, da ASUS sich in seinem Mainboard Handbuch zur Belegung aussschweigt und im Internet 2 verschiedene Arten der Beschaltung finden. Dort sind jeweils RX & TX gedreht.

    2. Problem: Ich bin neu beim Thema uC. Mein Testprogramm für die Datenübertragung ist aus Tutorials zusammen gesucht. Auch da bin ich mir leider nicht sicher ob da alles richtig eingestellt ist. Vor allem bezüglich der BAUD Rate.

    Nun wäre es schön wenn jemand ein funktionierendes kleines C Testprogramm hat, das mit einem MEGA32 und externem 16MHz Quarz getestet wurde und funktioniert. Somit kann ich wenigstens eine Störquelle ausschalten und mich der Mainboard Verdrahtung widmen.

    Ich habe es schon mit der Peter Fleury UART Lib probiert. Aber das Ding ist so überladen, das ich damit als Anfänger überhaupt nicht zurecht komme. Dazu ist es noch in C geschrieben und ich beherrsche eigentlich nur C++ halbwegs vernünftig.

    Ich hoffe das ist für euch keine große Sache mir eben ein passendes Testprogramm zu schreiben. Ihr würdet mir damit einige graue Haare ersparen

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Wenn du am MAX232 richtung µC RX und TX verbindest, dann kannst du am Terminal die Verbindung probieren. Es sollte ein Echo zurückkommen.
    Ein Beispielprogramm habe ich nicht, aber stelle mal deines herein, zur Kontrolle.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    Code:
    #define F_CPU 16000000UL
    #include <avr/io.h>
    #include <util/delay.h>
    
    #define BAUD 38400UL          // 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 main()
    {
        UCSRB = (1<<TXEN);                // UART TX einschalten
        UCSRC = (1<<URSEL)|(3<<UCSZ0);    // Asynchron 8N1 
     
        UBRRH = UBRR_VAL >> 8;
        UBRRL = UBRR_VAL & 0xFF;
    
    
    	while (!(UCSRA & (1<<UDRE)))
     	{
        	
     	}
    	UDR = 'X';
    }
    wie gesagt, das Programm ist zusammen geklaut. Verbinde ich RX TX Richtung uC kommt glaube ich kein Echo. Ich schreibe im Hyperterminal und nach Betätigen der Enter Taste springt der Cursor wieder zurück zum Start und das geschriebene bleibt einfach stehen.

    Ich werde jetzt mal RX TX Richtung PC drehen und anschliessend nochmal den Echo Test machen

    //EDIT bei gedrehtem RX TX Richtung PC ändert sich nix. Ich kann im Hyperterminal schreiben und bei Enter springt der Cursor einfach zurück.

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Du musst auf der µC des MAX232 die RX/TX die Verbindung machen, wenn dann kein Echo kommt, hat es ein Problem mit der Verbindung zum PC.
    Code:
    #define F_CPU 16000000UL
    #include <avr/io.h>
    #include <util/delay.h>
    
    #define BAUD 38400UL          // 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 USART_transmit(unsigned int data){
        while (!(UCSRA & (1<<UDRE)))
        {
         UDR = data;
        }
    	}
    int main(void)
    {
        UCSRB = (1<<TXEN);                // UART TX einschalten
        UCSRC = (1<<URSEL)|(3<<UCSZ0);    // Asynchron 8N1
     
        UBRRH = UBRR_VAL >> 8;
        UBRRL = UBRR_VAL & 0xFF;
        
        unsigned int data = 'X';
     for(;;){
    
        USART_transmit(data);
    
     }
    }
    So sollte es dauernd ein X am PC ausgeben, es ist sicherer falls etwas verschluckt wird.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164
    könntest die brücke auch gleich am wannenstecker am pc machen, dann kannst da schonmal fehler feststellen. vielleicht hast ja port falsch oder die pins ...

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •