- Labornetzteil AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Anfänger Problem mit der UART (RS232) zwischen PC und ATMega8

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    10.11.2010
    Beiträge
    23

    Anfänger Problem mit der UART (RS232) zwischen PC und ATMega8

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    ich hab ein Problem mit der UART-Schnittstelle.
    Wenn ich mit HTERM auf die Schnittstelle schau kommen nur "0x00" an das dafür in rauhen mengen.
    Die Baudrate ist auf 38400 eingestellt.
    Ich selbst seh leider keinen fehler in diesen Quellcode.
    Code:
    #include <avr/io.h>
    #include <stdio.h>
    #define F_CPU 36864
    #define Baud 38400
    
    
    void uart_init(void)
    {
        UCSRB = (1 << TXEN);
        UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0);
         UBRRL=0x05;     // Baudrate festlegen
         UBRRH=0X0b;     // Baudrate festlegen
    }
    
    int uart_send(unsigned char c)
    {
        while (!(UCSRA & (1<<UDRE)))
        {
            // mach nichts
        }
        //senden
        UDR=c;
        return 0;
    }
    
    
    void uart_write(char *s)
    {
        while(*s)
        {
         uart_send(*s);
         s++;
        }
    }
    
    int main(void)
    {
        uart_init();
        while(1==1)
        {
            uart_write("test\0");    
    
        }
    }
    Ich möchte die Schnittstelle für Debugzwecke verwenden. Aber dazu muss ich erst einmal etwas ausgeben können

    Besten Dank schon einmal für euere Zeit

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Sollte es nicht eher #define F_CPU 3686400UL lauten?

    Ein 3,6864MHz-Quarz hat bei nahezu allen Baudraten keinen Abweichungsfehler.

    Wie kommst du denn darauf?

    UBRRL=0x05; // Baudrate festlegen
    UBRRH=0X0b; // Baudrate festlegen
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    10.11.2010
    Beiträge
    23
    Diese Werte hab ich von hier: http://www.gjlay.de/helferlein/avr-uart-rechner.html
    Die Sache mit der Frequenz hab ich angepasst:
    #include <avr/io.h>
    #include <stdio.h>
    #define F_CPU 3686400UL
    #define Baud 38400


    void uart_init(void)
    {
    UCSRB = (1 << TXEN);
    UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0);
    UBRRL=0x05; // Baudrate festlegen
    UBRRH=0xb; // Baudrate festlegen
    }

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    10.11.2010
    Beiträge
    23
    Was ich vielleich vergessen habe zu sagen, ist dass es sich durch die veränderung nichts an dem Ergebniss geändert hat.

  5. #5
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    Welche Taktquelle ist denn bei den Fuses festgelegt ? Läuft das Ding eventuell mit dem internen RC-Oszillator?

    Probier mal :

    Code:
    void uart_init(void)
    {
    UCSRB = (1 << TXEN);
    UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0);
    UBRRL=0x05; // Baudrate festlegen
    UBRRH=0x00; // Baudrate festlegen
    }
    Die zweite Spalte ist nur für U2X also double Speed.

  6. #6
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Ich habe mir gerade mal das Datenblatt angeschaut:

    http://pdf1.alldatasheet.com/datashe...L/ATMEGA8.html

    Wenn du auf Seite 157 schaust hast du ja eine Tabelle wie du das UBRR Register beschreiben musst, wenn du eine bestimmte Baudrate haben willst.
    Bei deinem Quarztakt und deiner Baudrate musst du das Register mit 5 beschreiben (wenn du das U2X Bit auf 0 lässt).
    Das heißt du musst nur schreiben:

    UBRRL=0x05;
    UBRRH=0x00;

    und nicht:

    UBRRL=0x05; // Baudrate festlegen
    UBRRH=0xb; // Baudrate festlegen

    Edit: Da war jemand ein paar Sekunden schneller
    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

  7. #7
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    Jap, wie ich eben schon schrieb.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    10.11.2010
    Beiträge
    23
    Besten Dank jetzt funktioniert es aber dafür hab ich jetzt die nächste Frage:
    Wieso empfang in nach dem Strings immer 4 mal 0xff, bevor das Linefeed kommt?

  9. #9
    Erfahrener Benutzer Roboter Experte Avatar von ePyx
    Registriert seit
    14.05.2008
    Ort
    Falkensee
    Beiträge
    700
    Hört sich nach konstantem String ( also char buffer[20] ) an, wo der nicht voll ist bzw.

    Code:
    void uart_write(char *s){    
       while(*s)    
       {     
          uart_send(*s);     
          s++;    
        }
    }
    Endet bei \0 und wenn er den nicht findet geht er bis zum Schluss durch.

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    10.11.2010
    Beiträge
    23
    Besten Dank nun funktioniert auch das richtig.
    Jetzt hätte ich aber noch 2 Fragen komm mir schon langsam unverschämt vor euch so zu löchern.
    1: Was bedeutet genau [20] und muss ich das auch ändern?
    2: Wenn ich ein LF stetzen will kann ich doch mit HTerm auf die \0 triggern, so dass hterm einen neuen Zeile beginnt. Doch leider funktioniert das bei mir nicht mein Favorit war ja bei HTerm auf "New line at Null " stelle doch irgendwie geht das bei keiner opiton richtig.

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. [ERLEDIGT] Problem bei UART Kommunikation zwischen ATmega und VB.net
    Von masasibe im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 15
    Letzter Beitrag: 10.09.2011, 18:41
  2. ATmega8 RS232 Problem
    Von EngineMan im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 60
    Letzter Beitrag: 26.02.2010, 11:26
  3. Problem mit Bascom Software UART und ATmega8
    Von Buzii12 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 23.10.2008, 13:20
  4. UART zwischen Atmega32 und ATmega8
    Von Lunarman im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 07.06.2007, 17:22
  5. Uart-Kommunikation zwischen µCs
    Von ProgDom im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 20.04.2006, 01:37

Stichworte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress