-         

Ergebnis 1 bis 5 von 5

Thema: uart übertragung 1. bit immer 1

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    13.06.2006
    Beiträge
    45

    uart übertragung 1. bit immer 1

    Anzeige

    Hi,
    wenn ich über meinen UART Daten übertrage ist das 1. Bit immer 1 ich schicke eine 0 hin 00000000 und bekomme 10000000 zurück und das bei allen zahlen.

    Ich benutze einen AtMega16 mit internem 1MHZ die übetragung läuft über einen max232 Chip

    Eigenschaften:
    Baud 9600 kein parity 8 bit 1 stop

    Programm:

    Code:
    #define F_CPU       1000000UL
    
    #define BAUD        9600UL
    #define UBRR_BAUD   ((F_CPU/(16UL*BAUD))-1)
    
    void uart_init(void)
    {
        // Baudrate einstellen (Normaler Modus)
        UBRRH = (unsigned char) (UBRR_BAUD>>8);
        UBRRL = (unsigned char) (UBRR_BAUD & 0x0ff);
    
        // Aktivieren des Empfängers, des Senders und des "Daten empfangen"-Interrupts
        UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
    
        // Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit
        UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
    }
    
    SIGNAL(SIG_UART_RECV)
    {
        unsigned char buffer;
    
        // Daten aus dem Puffer lesen ...
        buffer = UDR;
    
        // ... warten bis der Sendepuffer leer ist ...
        while ( !( UCSRA & (1<<UDRE)) )
            ;
        // ... und gleich wieder zurück schicken
        UDR = buffer;
    }
    Vielen Dank
    Martin

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    Da ich in der Parametrierung des UART oder im Programm keinen Fehler entdecken kann, tippe ich mal auf ein Problem mit den internen 1MHz und der Bauddrate. Wenn das nicht genau passt, wirkt es sich beim letzen Bit (Bit7) zuerst aus, es würde dann das Stopbit als Datenbit interpretiert. Testweise kannst du mal die Baudrate senken, auf 1200 vielleicht.[Edit]Das ist Unsinn, der Fehler wäre prozentual bei allen Baudraten gleich[/Edit] Oder mal Parity einschalten, dann müßte ein Unterschied zwischen geraden und ungeraden Zeichen sein.

    Wenn das die Ursache wäre, könnte man vielleicht durch eine "krumme" Baudrate den Taktfehler korrigieren. Soweit ich weiß kann man den internen Takt auch kalibrieren, aber beides habe ich noch nicht versucht/gemacht.

    Gruß

    mic

    Bitabfolge laut Datenblatt, nach dem MSB kommt direkt das Stopbit:
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken bitfolge_uart.jpg  

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Bei 9600 und 1MHz Takt hast du 7% Fehlerabweichung, mehr als 2% sollte es auf keinen Fall sein.
    Versuche es einmal mit 4800, da sollte der Fehler nur 0,2% sein. Das steht im Datenblatt unter USART Example of Baudrate Settings
    Der interne Takt ist relativ ungenau, er schwankt abhängig von Betriebsspannung und Temperatur. Für eine vernünftige Datenübertragung ist ein Baudratenquarz unumgänglich, alles andere ist Glücksspiel.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Das steht im Datenblatt unter USART Example of Baudrate Settings
    Die Tabelle hab' ich ja noch gar nicht gesehen. Danke.

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    13.06.2006
    Beiträge
    45
    Vielen Dank mit einer geringeren Baut läuft es ... ich werde mir dann wohl noch ein Quarz hohlen...
    Gruß
    Martin

Berechtigungen

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