- LiFePO4 Speicher Test         
Ergebnis 1 bis 5 von 5

Thema: Typisches "Aber gestern gings doch noch" (UART)

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.08.2007
    Ort
    Ingolstadt
    Beiträge
    112

    Typisches "Aber gestern gings doch noch" (UART)

    Hallo Zusammen,

    nachdem nun meine Funktionsaufrüfe klappen (Danke an dieser Stelle nochmal) hat alles wunderbar geklappt, sogar das UART.

    Dann hab ich ein paar Funktionen geschrieben usw. Als ich dann den UART inniger Teste wollte musst ich ärgerlicherweise feststellen, das am HTerm nur noch Müll ankommt.
    "Also wieder zum Anfang..." dachte ich mir und habs auf die minimal Funktionen (init, senden) beschränkt womit es schon funktioniert hatte.

    Auch hiermit kam nur Datenmüll an (siehe Anhang) vielleicht könnt Ihr mir hier helfen? Ich hab die Funktionen aus dem Datenblatt genohmen und angepasst.

    Randdaten
    * µC ist eine ATMega128L
    * Als Clock wird der interne 8MHz Gernerator verwendet
    * Die Übertragung läuft über ein FT232R (somit USB)

    Code:
    #include <avr/io.h>
    
    #define F_CPU 8000000UL
    //Defines für Einstellungen
    #define UART0_BAUD        9600
    #define UART0_MYUBRR    F_CPU/16/UART0_BAUD-1
    
    #include <util/delay.h>
    
    /*****************************************************************
     * Funktionsname:    phy_uart0_Init
     *
     * BAUDRATE        = 9600 BAUD
     * Empfänger    = Aktiviert
     * Sender        = Aktiviert
     * Rahmengröße    = 8 Bit
     * StopBit        = 1 StopBit
     * 
     *****************************************************************/
    void phy_uart0_Init(void)
    {
        /* Baudrate festlegen */
        UBRR0H = (unsigned char) (UART0_MYUBRR >> 8);
        UBRR0L = (unsigned char) UART0_MYUBRR;
        
        /* Receiver und Transmitter aktivieren*/
        UCSR0B = (1 << RXEN) | (1 << TXEN);
        
        /* Rahmenformat einstellen: 8 Bit, 1stop bit */
        UCSR0C = (3 << UCSZ0) | (1 << USBS0);
    }
    
    
    /*****************************************************************
     * Funktionsname:    phy_uart0_Transmit
     *****************************************************************/
    void phy_uart0_Transmit(unsigned char data)
    {
        /* Warte auf Leeren Sende Buffer*/
        while ( !( UCSR0A & (1<<UDRE)) )
            ;    
            
        /* Put data into buffer, sends the data */
        UDR0 = data;
    }
    
    /*****************************************************************
     * Funktionsname:    Main
     *****************************************************************/
    int main(void)
    {
        phy_uart0_Init();
        
        while(1)
        {
            phy_uart0_Transmit('H');
    
            _delay_ms(500);
        }
    }
    Grüße

    Furay
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken HTerm.jpg  
    Sehe das leben nicht so ernst - du kommst sowieso nicht lebend davon.

  2. #2
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Der Takt des internen Generators in nicht besonders genau - für die UART ist das grenzwertig und kann vor allem bei hohen oder niedrigen Temperaturen zu Fehlern führen. Etwas könnte man verbessern wenn die Frequenz genauer als ab Werk eingestellt ist, oder alternativ im Programm die tatsächliche Frequenz des Exemplars besser getroffen wird.

    Ein Versuch wäre es mal den Wert bei F_CPU um etwa 3-5 % zu vergrößern / zu verkleinern.

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.686
    Hallo Furay
    Zitat Zitat von Furay Beitrag anzeigen
    ... UART ... am HTerm nur noch Müll ... Mega128L ... interne 8MHz ... 9600 BAUD ...
    Vielleicht ists die Hitze ?

    Ich weiß nicht, ob Dein interner Clock genau genug für die 9k6 Bd ist. Vielleicht probierst Du es erstmal mit 2k4 oder so? Das Problem des Baudratenfehlers wurde mal schön anschaulich von uwegw präsentiert (klick) und ich hatte das für meine Megas nachgerechnet (klick), die fast immer mit 20 MHz laufen und über nen FT232 prächtig mit 256k plappern können (wenn nicht zuviel andere Interrupts dreinreden). Bei Tests bzw. bei Problemen neige ich auch dazu das UBRR zu definieren und nicht durch den Präprozessor ausrechnen zu lassen - dann weiß ich genau, wo ich bin. Und die ganz kleveren/misstrauischen Kollegen lassen sich den vom Präprozessor errechneten Wert sogar beim Kompilieren ausgeben - ich dachte, ich hätte das sogar schon mal mit der Fehlerquote gesehen *ggg*.

    Musste den hübschen Baudratenrechner mit Fehlerangabe/-grenze erst suchen, hier ist der Link dazu. Darin siehste auch, warum manche mit dem total krummen 14.7456 MHz-Quarz arbeiten.
    Geändert von oberallgeier (20.06.2013 um 09:41 Uhr) Grund: Link zu Baudratenrechner
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. ATMega8 "verfused" Kann man den noch retten
    Von Bumbum im Forum AVR Hardwarethemen
    Antworten: 12
    Letzter Beitrag: 19.03.2013, 20:02
  2. ATMega8 "verfused" Kann man den noch retten
    Von Bumbum im Forum Elektronik
    Antworten: 12
    Letzter Beitrag: 19.03.2013, 20:02
  3. Thema verschwunden? Oder doch "nur" Zensur?
    Von Thomas E. im Forum Anregungen/Kritik/Fragen zum Forum und zum Wiki RN-Wissen
    Antworten: 5
    Letzter Beitrag: 30.01.2012, 17:26
  4. UART vs SPI kann UART auch "echt" bidirektional üb
    Von Ceos im Forum AVR Hardwarethemen
    Antworten: 7
    Letzter Beitrag: 03.09.2009, 17:03
  5. Gestern "zukunftsweisende Technik auf Kabel 1"
    Von Andy123 im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 6
    Letzter Beitrag: 17.04.2007, 21:15

Stichworte

Berechtigungen

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

Solar Speicher und Akkus Tests