- Labornetzteil AliExpress         
Ergebnis 1 bis 5 von 5

Thema: Problem mit dem USART...

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    29.08.2009
    Ort
    Hamm (NRW)
    Alter
    42
    Beiträge
    52

    Problem mit dem USART...

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hi...

    Bin gerade dabei mithilfe des RNControl1.4 das empfangene DCF-Signal einer FUM-DCF von HKW Elektronik aus einem LCD auszugeben. Die Ansteuerung des LCD´s funktioniert einwandfrei. Wenn ich aber versuche über den USART das Zeitsignal einzulesen sind auf dem LCD nur zwei schwarze Baken zu sehn.
    Das Display ist ein 16x4, wie gesagt mit nem anderen Programm funzt die Anzeige perfekt.

    Die USART Einstellungen sollten wie folgt sein:
    300 Baud
    7 Datenbits
    gerade Parität
    2 Stoppbits

    Hier mal der Teil des Codes wo ich versuche das Signal einzulesen:

    Code:
    #include <avr/io.h>
    #include <inttypes.h>
    #include "lcd.h"
    
    // Sollte schon im Makefile definiert sein.
    // In dem Fall hier einfach löschen.
    //#define F_CPU       16000000UL
    
    #define BAUD        300UL
    #define UBRR_BAUD   ((F_CPU/(16UL*BAUD))-1)
    
    // USART initialisieren
    void uart_init(void)
    {
        // Baudrate einstellen (Normaler Modus)
        UBRRH = (uint8_t) (UBRR_BAUD>>8);
        UBRRL = (uint8_t) (UBRR_BAUD & 0x0ff);
    
        // Aktivieren von receiver 
        UCSRB = (1<<RXEN);
    
        // Einstellen des Datenformats: 
        UCSRC = (1<<URSEL)|(1<<UPM1)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0);
    }
    
    int main(void)
    {
        uint16_t buffer;
    
        // USART initialisieren
        uart_init();
    
        while (1)
        {
            // Warten bis Daten empfangen wurden
            while ( !(UCSRA & (1<<RXC)) )
            // Empfangsregister auslesen
            buffer = UDR;
    
    
    	while(1)
    	{
    		//lcd initialisieren
    		lcd_init();
    
    		//Buffer auf dem lcd ausfegeb
    		sprintf( buffer,"Time: %02d,UDR");
    
    		set_cursor(1,1);
     
    		lcd_string(UDR);
    
    	}
    
           
        }
    }
    Wird wohl an dem String liegen den das Modul rausgibt...

    Würde mich über Tipps und Hinweise freuen

    Gruss Mnemonic

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Wenn das Display zwei schwarze Balken zeigt, dann wird es nicht initialisiert.
    Du bleibst wahrscheinlich schon in der Empfangsroutine stecken.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    Tip nebenbei: ein LCD initialisiert man normalerweise nur 1x. Bei jedem Schleifendurchlauf isses unnötig.
    #ifndef MfG
    #define MfG

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    29.08.2009
    Ort
    Hamm (NRW)
    Alter
    42
    Beiträge
    52
    Erstmal danke für die Hinweise.

    Abgesehen davon das da klammern fehlen bei den While-schleifen, kann es sein das man die Empfangsroutine nicht in einer endlosschlefe machen sollte, weil das Programm sonst gar nicht bis zur lcd-routine kommt?

    Gruss Mnemonic

  5. #5
    Erfahrener Benutzer Roboter-Spezialist Avatar von robo_tom_24
    Registriert seit
    04.02.2012
    Ort
    Burgenland, Österreich
    Beiträge
    485
    Hallo
    Ja das ist richtig, sonst empängst du nur ein mal Daten vom USART und dann tust du "endlos" LCD initialisieren, somit löschen, Daten ausgeben, aber gliech danach wieder löschen
    Und wie Jaecko bereits gesagt hat, man braucht das LCD nur ein mal initialisieren. Ich mach das alles immer gleich am Programmanfang damit mans nicht vergisst

Berechtigungen

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

12V Akku bauen