- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 18

Thema: Einsteiger braucht UART Hilfe

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Hi,

    also ich habe jetzt auch zwei Stunden rumprobiert und mich gewundert warum bei mir nur Zeichenmüll rauskam. Ich hatte erst

    UCSRB = (1<<RXEN) | (1<<TXEN);
    UCSRC = (1<<UCSZ1) | (1<<UCSZ0);
    UCSRC = (1<<URSEL)

    da stehen und damit funktioniert es NICHT.
    Ändere ich es auf

    UCSRB = (1<<RXEN) | (1<<TXEN);
    UCSRC = (1<<URSEL)| (1<<UCSZ1) | (1<<UCSZ0);

    um funktioniert es (nur so am Rande).
    Hier hast du ein funktionierendes Programm was du verwenden kannst:

    Code:
    /*
     * Hallo Welt.c
     *
     * Created: 03.05.2012 20:46:19
     *  Author: Daniel
     */ 
    
    #define F_CPU 16000000UL                                                                            // CPU Takt für das delay
    
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <string.h>
    #include <util/delay.h>
    #include <stdlib.h>
    
    char data[50] = "Hallo";                                                                            // Text der ausgegeben werden soll
    int lenght = 0x00;
    
    int main(void)
    {
        UART_Init();
        
        while(1)
        {
            Send_UART_Char(data);
            _delay_ms(500);
        }
    }
    
    void UART_Init()
    {    
        UCSRB = (1<<RXEN) | (1<<TXEN);                                                                    // Rx und Tx aktivieren
        UCSRC = (1<<URSEL)| (1<<UCSZ1) | (1<<UCSZ0);                                                    // 8 Bit Nachrichtenlänge einstellen
        
            
        UBRRH = 0x00;
        UBRRL = 0x33;                                                                                    // Baudrate auf 19200 festlegen
    }
    
    
    void Send_UART_Char(char data[])
    {
        char Counter;
        
        lenght = strlen(data);
        
        while(Counter < lenght)
        {
            while (!(UCSRA & (1<<UDRE)));
            UDR = data[Counter];    
            Counter++;
        }
            
        Counter = 0x00;    
        while (!(UCSRA & (1<<UDRE)));
        UDR = 0x0A;    
        while (!(UCSRA & (1<<UDRE)));
        UDR = 0x0D;    
    }
    Ich hab halt alles vom UART händlich gemacht (finde ich zum ersten lernen bischen besser als die "fertigen" Libs zu verwenden. Da versteht man den Ablauf bischen besser.
    Vergleich das mal mit deinem Programm. Von der void Send_UART_Char brauchst du dann nur die Zeilen nehmen die nur 1 Zeichen senden (der Rest ist eine Schleife womit ein ganzer String gesendet wird). Ein einzelnes Zeichen sendest du so:

    while (!(UCSRA & (1<<UDRE)));
    UDR = 0x0D;

    Ich denke du hast sicher nur eine Kleinigkeit verkehrt gemacht
    Geändert von Kampi (03.05.2012 um 22:27 Uhr)
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Zitat Zitat von Kampi Beitrag anzeigen
    Ich hatte erst

    UCSRB = (1<<RXEN) | (1<<TXEN);
    UCSRC = (1<<UCSZ1) | (1<<UCSZ0);
    UCSRC = (1<<URSEL)

    da stehen und damit funktioniert es NICHT.
    Natürlich nicht. Die mittlere Zeile schreibt was nach UBRRH, und die letzte Zeile setzt die Datengröße auf 5-Bit.


    Zitat Zitat von Yunus64 Beitrag anzeigen
    Terminal: HTerm ist auf 8N1 9600Baud und Flow Control gestellt.
    "Flow Control"? Du hast doch gar kein "Flow Control".
    MfG
    Stefan

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    19.11.2011
    Beiträge
    18
    "Flow Control"? Du hast doch gar kein "Flow Control".
    Ich meinte natürlich, das der Haken bei Flow Control NICHT gesetzt ist.

    Kampi ich habe deinen Code mittlerweile auch probiert der will auch nicht. Ich werde nachher mal testen ob der AVR überhaupt noch lebt... ich weiss echt nicht woran es noch liegen könnte :/

    LG
    Yunus

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Prüf mal ob die Verbindung in Ordnung ist. Verbinde direkt vor dem AVR Rx und Tx und check dann mal ob der Loopback funktioniert. Wenn er funktioniert ist die Leitung in Ordnung und das Problem ist der AVR.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  5. #5
    RN-Premium User Stammmitglied
    Registriert seit
    14.02.2011
    Ort
    südl. von Wien
    Alter
    49
    Beiträge
    69
    Auch auf die Gefahr hin dass es anscheinend nur eine Lapalie ist aber hast du bei Hterm den richtigen Com-Port eingestellt?

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    19.11.2011
    Beiträge
    18
    Zitat Zitat von Kampi Beitrag anzeigen
    Prüf mal ob die Verbindung in Ordnung ist. Verbinde direkt vor dem AVR Rx und Tx und check dann mal ob der Loopback funktioniert. Wenn er funktioniert ist die Leitung in Ordnung und das Problem ist der AVR.
    Wurde bereits gecheckt und funktioniert.

    Zitat Zitat von Inventor76 Beitrag anzeigen
    Auch auf die Gefahr hin dass es anscheinend nur eine Lapalie ist aber hast du bei Hterm den richtigen Com-Port eingestellt?
    COM ist auf 3 gestellt, da der Loopback auch funktioniert hat denke ich da sollte alles passen.

    Bin leider noch nicht dazu gekommen den AVR auf Funktion zu testen, wollte mich aber schonmal für die rege Anteilnahme bedanken. Für mich kommen als Fehlerquelle nur noch AVR MAX232 oder RN-Board in frage

    LG
    Yunus

  7. #7
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Um einen Fehler des MAX232 auszuschließen, hatte ich vorgeschlagen das du den Controller aus der Schaltung rausnimmst und direkt dort wo Rx und Tx des Controllers war, eine Brücke reinsetzt. Anschließend machst du den Loopbacktest nochmal. So testest du das Kabel vom PC bis zum MAX232 rein und vom MAX232 raus die Strecke zum Controller und wieder zurück. Und wenn das dann Funktioniert, weißt du ganz sicher das der Fehler am Controller ist. Welches RN-Board verwendest du? Mein Code wurde direkt auf dem RN-Control getestet.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

Ähnliche Themen

  1. Einsteiger braucht Hilfe bei Motorenwahl
    Von patteb im Forum Motoren
    Antworten: 2
    Letzter Beitrag: 21.04.2010, 15:50
  2. Einsteiger braucht einen Rat!
    Von PanicGamer im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 2
    Letzter Beitrag: 16.12.2008, 18:22
  3. Antworten: 74
    Letzter Beitrag: 29.12.2006, 13:32
  4. Einsteiger braucht Expertenunterstützung
    Von Phil Connors im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 10.10.2006, 08:29
  5. Einsteiger braucht Hlfe
    Von bomberman_z im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 13
    Letzter Beitrag: 30.09.2006, 10:37

Berechtigungen

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

12V Akku bauen