- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 14

Thema: UART Programmieren

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.03.2011
    Beiträge
    28

    UART Programmieren

    Moin,
    kennt sich einer mit der UART programmierung von µC aus?
    Ich habe folgenden Programmcode aus Beispielen kopiert, soweit ohne Fehler, nur leider weiß ich nicht ob er funktioniert oder nicht. Mein PC gibt mir beim RS232 Anschluss keine Signale raus. Ich habe aber leider keine Ahnung zu dem Thema, nur benötige bald ein Programm womit ich Signale über Funk (RS232) verschicken kann. Als µC habe ich den Atmega 8515-PU genutzt. Falls mir noch so einer Tipps geben kann wäre ich sehr dankbar.
    Mein Programm:
    Code:
    #include "uart.h"
    
    #define BAUDRATE 38400UL//Definition als unsigned long, sonst gibt es Fehler in der Berechnung
    #define F_CPU 8000000
    void uart_init (void)
    {
        uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/(16*BAUDRATE) - 1);
    	UBRRL = ubrr;      //Baudrate 38400
    	UCSRA|=2;      //Doppelte Baudrate
    	UCSRB=0x18;      //RX und TX erlaubt
    
    
        // Flush Receive-Buffer (entfernen evtl. vorhandener ungültiger Werte) 
        do
        {
            UDR;
        }
        while (UCSRA & (1 << RXC));
    }
     
    int main(void)
    {
    	 uart_init ();
    	while(1)
    	{
    		int a;
    		uart_putc(1001);	
    	}
    	
    }

    Die dazu benötigte UART.h:
    Code:
    #ifndef UART_H
    #define UART_H
    
    #include <avr/io.h>
    
    extern void uart_init (void);
    
    static inline int
    uart_putc (const uint8_t c)
    {
        // Warten, bis UDR bereit ist für einen neuen Wert 
        while (!(UCSRA & (1 << UDRE)))
            ;
    
        // UDR Schreiben startet die Übertragung 
        UDR = c;
    
        return 1;
    }
    
    static inline uint8_t
    uart_getc_wait (void)
    {
        // Warten, bis etwas empfangen wird 
        while (!(UCSRA & (1 << RXC)))
            ;
    
        // Das empfangene Zeichen zurückliefern 
        return UDR;
    }
    
    static inline int
    uart_getc_nowait (void)
    {
        // Liefer das empfangene Zeichen, falls etwas empfangen wurde; -1 sonst 
        return (UCSRA & (1 << RXC)) ? (int) UDR : -1;
    }
    
    #endif /* UART_H  */

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.091
    Was verwendest du am PC?

    MfG Hannes

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    29.03.2011
    Beiträge
    28
    Als PC verwende ich mein laptop mit Win 7 32 Bit (COm funktionert)
    Als Programm verwende ich den 232 Analyzer mit der schnittstelle: http://www.shop.robotikhardware.de/s...roducts_id=250
    Wollte erst einmal so testen ob daten irgendwohin gesendet werden, befor ich mich dann mit Empfang bei einem µC beschäftige

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.091
    Ich habe den gleichen USB RS232 Wandler allerdings von ELV. Da ich Probleme mit Labview gehabt habe habe ich auch ein Terminalprogramm gesucht. Ich habe das Programm "Terminal by Br@y++" verwendet. Habe alles gleich eingestellt wie mit dem µC und es hat funktioniert. Hast du schon versucht RX und TX zu verbinden und und zu prüfen ob du so etwas empfängst? Du kannst, wenn du ein Oszi hast, schauen ob Daten über die Schnittstelle gesendet werden. Du kannst auch eine Led anschließen und die Übertragungsrate herunterstellen (z.B. 600Baud oder 1200Baud).

    MfG Hannes

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    29.03.2011
    Beiträge
    28
    sorry irgendwas will bei mir nicht funktionieren.
    Mein Analyseprogramm empfängt imemr daten, auch wenn ich rx/tx getrennt habe und deines keine daten^^

    Kannst du mal den Programmcode bei dir testen, ob du damit empfang hast?

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.091
    Testen kann ich es leider nicht da ich keinen Atmega8515 habe. Ich habe Atmega 88, 1280, einen Atmega8 bzw Attiny 44, 45 und 2313.

    Bei deiner UART.h sind Berechnungen eingebaut. Normalerweise macht man das nicht. In die UART.h würde man nur Definitionen einbauen (schau einmal die Headerdateien an die bei AVR Studio dabei sind). Programmcode kommt in eine C-Datei. Das hat aber nichts mit der Funktion zu tun. Man macht es nur nicht.

    Habe den Code durchgeschaut. Beim Hauptprogramm steht in "void uart_init (void)" in der ersten Zeile " uint16_t ubrr = (uint16_t) ((uint32_t) F_CPU/(16*BAUDRATE) - 1);". Was soll das bedeuten? Das wird zu keinem Ergebnis führen. Besser ist es wenn man die Berechnung per Hand ausrechnet und diese als Variable hinschreibt.

    Damit man den Code besser lesen kann sollte man nicht z.B. "UCSRA |= 2;" schreiben sondern "UCSRA |= (1<<U2X);". So sieht man auf einen Blick was man gesetzt und was man nicht gesetzt hat.
    UCSRC passt?

    Probier einmal die von mir gepostete Zeile zu ändern. Ansonsten müsste ich weiter schauen.

    MfG Hannes

Ähnliche Themen

  1. Über UART Programmieren??
    Von bnitram im Forum AVR Hardwarethemen
    Antworten: 18
    Letzter Beitrag: 05.08.2011, 22:38
  2. SRF02 über UART programmieren
    Von tranh85bo im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 26.04.2010, 09:51
  3. BASCOM 2te UART oder software UART
    Von Snecx im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 18.02.2009, 23:25
  4. Daten von Software UART nach Hardware UART weiterleiten
    Von kusli im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 06.10.2008, 21:24
  5. Hardware UART + Software UART gleichzeitig möglich?
    Von eevox im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 22.04.2007, 18:54

Berechtigungen

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

12V Akku bauen