- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 2 von 2

Thema: UART Problem mit Übertragung

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    05.08.2005
    Beiträge
    61

    UART Problem mit Übertragung

    Hallo,
    ich habe eine RS232 Verbindung zwischen ATMEGA16 und seriellem
    Port des PC aufgebaut. Mein Code sieht dabei folgendermaßen aus:
    Code:
    // external clock speed (12.0 MHz)
    #define CPU_SPEED 12000000
    // Baudrate for USART Interface
    #define UART_BAUDRATE 9600
    // UART UBRR Value
    #define UART_UBRR ((CPU_SPEED/(16l*UART_BAUDRATE))-1)
    
    
    
      // init USART transmit
      UBRRH = (unsigned char)(UART_UBRR>>8);
      UBRRL = (unsigned char) UART_UBRR;
    
      // enable USART transmit
      UCSRB |= (1<<TXEN); // set UART TX
      UCSRC |= (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0); // Asynchronous 8N1
    
        // wait for empty transmit buffer
        while ( !(UCSRA & (1<<UDRE)) ) ;
        // put data into buffer and send
        UDR = 'M';
    Wenn ich dann den Controller über MAX232 an den COM4 stecke, dann
    kommt dort aber nur Müll an (9600Baud eingestellt, 8 Daten, 1 Stop)
    Also habe ich mir den Pin2 mit dem Oszy angesehen:

    Signalpegel von -8V (High), Peaks bei +8V (Low):

    0 1 0 1 1 0 0 1 0 dann immer 1 (Stop+Ruhe)

    das würde also einem Startbit und einem invertierten M (0 1 0 0 1 1 0 1) entsprechen.
    Wo liegt jetzt das Problem, dass ich kein M bekomme?

    Ach so: Die Breite eines Bits beträgt laut Oszy etwas über 100µs, also
    genau 9600 Baud, hier liegt das Problem demnach nicht!

    DANKE für Hilfe
    Gruß
    RICOLA

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Wie kommst du darauf, daß 'M' invertiert übertragen wird?
    RS232 ist little Endian, d.h. Bit 0 wird zuerst gesendet

    Initialisieren würde ich immer mit =, nicht mit |= oder &=
    so daß du immer weißt, was in den SFRs wirklich steht.

    UCSRA=?

    Bei Taktraten, die zu gebrochenem Wert für UBRR führen, wird UBRR abgerundet. Das ist aber nicht unbedingt die Rundung, die zum kleinsten Fehler in der Baudrate hinführt.
    Disclaimer: none. Sue me.

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress