- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 9 von 9

Thema: USART Initialization ATmega644 8MHz

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Hmm, Du hast im µC 8N2 Data=8, Parity = None Stopbits =2 eingestellt, ist das auch bei Hyperterm genau so eingestellt?

    Üblich ist eher 8N1 und in Hyperterm "Flusskontrolle" auf "Keine" sollte auch eingetragen sein!

    Gruß Richard

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    18.03.2011
    Ort
    Stuttgart
    Alter
    39
    Beiträge
    6
    Danke für die hinweise, ich habe jetzt mein Programm geändert und hab's so eingestellt, wie ihr es empfohlen habt. Hier mein Code

    Code:
    /* 
      UART-Init: 
    Berechnung des Wertes für das Baudratenregister 
    aus Taktrate und gewünschter Baudrate
    */
     
    #ifndef F_CPU
    
    #warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 8000000"
    #define F_CPU 8000000UL  // Systemtakt in Hz - Definition als unsigned long beachten 
                             // Ohne ergeben sich unten Fehler in der Berechnung
    #endif
     
    #define BAUD 9600UL      // Baudrate
     
    // Berechnungen
    #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
    #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
    #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
     
    #if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
      #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! 
    #endif 
    
    #include <avr/io.h> 
    #include <avr/interrupt.h>
    
    
    
    void USART_Init( unsigned int baud )
    {
    /* Set baud rate */
    UBRR0H = (unsigned char)(baud>>8);
    UBRR0L = (unsigned char)baud;
    /* Enable receiver and transmitter */
    UCSR0B = (1<<RXEN0)|(1<<TXEN0);
    /* Set frame format: 8data, 1stop bit */
    UCSR0C = 3<<UCSZ00;
    }
    
    int main (void) {
    
    USART_Init( BAUD_REAL ) ;
    
    
    
        while (!(UCSR0A & (1<<UDRE0)))  /* warten bis Senden moeglich                   */
        {
        }
     
        UDR0 = 'x';                    /* schreibt das Zeichen x auf die Schnittstelle */
    
     }
    Im Endeffekt hat sich nichts geändert als Hardware verwende ich ein stk500 und ein USB to RS232 Adapter.

    Danke für eure Hilfe
    Geändert von AT90S1200 (20.03.2011 um 13:09 Uhr)

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    34
    Beiträge
    1.192
    Hallo,
    sind GND von Board und PC durchverbunden? Ich gehe zwar schon davon aus, aber du könntest nochmal kurz mit einem Durchgangsprüfer nachmessen.
    Hast du den richtigen Stecker genommen? Das STK500 hat zwei davon!
    Und ich vermute, dass hier
    Code:
    USART_Init( BAUD_REAL ) ;
    wohl eher
    Code:
    USART_Init( BAUD_VAL ) ;
    stehen sollte.
    Du kannst auch ein anderes Terminal ausprobieren. Ich verwende dieses hier: http://www.elektronik-labor.de/RS232/2010Terminal.html , das funktioniert auch über einen USB-Seriell-Wandler.

    Grüße, Bernhard

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    18.03.2011
    Ort
    Stuttgart
    Alter
    39
    Beiträge
    6
    Zitat Zitat von BMS Beitrag anzeigen
    wohl eher
    Code:
    USART_Init( BAUD_VAL ) ;
    stehen sollte.
    Das ist es, fielen Dank Ja es geht

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    24.06.2007
    Alter
    45
    Beiträge
    61
    Hallo zusammen,

    ich sitze gerade vor einem ähnlichen Problem und hab mir den hier geposteten Code angesehen. Wo ist hier "BAUD_VAL" definiert? Bei mir hängt, das ganze Prog, wenn ich die Initialisierung aufrufe.

    Grüße

    Rainer
    Wenns brennt, dann brennts....

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    24.06.2007
    Alter
    45
    Beiträge
    61
    So jetzt hab ichs hinbekommen. Es ist die "UBRR_VAL" die übertragen werden muss.
    Wenns brennt, dann brennts....

Berechtigungen

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

Solar Speicher und Akkus Tests