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

Thema: UART sendet nur a´s statt x´s

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    01.07.2005
    Beiträge
    64

    UART sendet nur a´s statt x´s

    Anzeige

    Powerstation Test
    Hallo,

    ich versuche grade eine Verbindung über die RS232 Schnittstelle ziwschen meinem ATMEGA8 und PC herzustellen. Also Windows-Empfangssoftware verwende ich HyperTerminal. Mein UART-Code (von mikrocontroller.net) sieht so aus:

    Code:
    #include <avr/io.h>
    
    #define F_CPU 16000000L
    #define BAUD 9600L
    #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)
    #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))
    #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000)
    
    #if((BAUD_ERROR>10) || (BAUD_ERROR<-10))
    	#error FEHLER! BAUD Rate fehlerhaft!!!
    #endif
    
    int main(void)
    {
    
    UCSRB|=(1<<TXEN);
    UCSRC|=(1<<URSEL) | (3<<UCSZ0);
    
    UBRRH=UBRR_VAL >>8;
    UBRRL=UBRR_VAL & 0xFF;
    
    while(1){
    while(!(UCSRA & (1<<UDRE)))
    {
    }
    
    UDR='x';
    }
    return 0;
    }
    Wenn ich das ganze laufen lasse, empfange ich über HyperTerminal lauter a Zeichen, es sollten aber lauter x Zeichen sein. Hab ich irgendwo einen Fehler gemacht?

    Gruß
    cesupa

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    40
    Beiträge
    685
    Hier:
    Code:
    UCSRC|=(1<<URSEL) | (3<<UCSZ0);
    Neu:
    Code:
    UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
    (8-bit, Asynchron, 1xStopp-bit)


    Mit geänderten #define's funktioniert es bei mir:
    Code:
    #include <avr/io.h> 
    
    #define BAUD		115200UL
    #define UBRR_BAUD	((F_CPU/(16L*BAUD))-1)
    
    int main(void) 
    { 
    
    UBRRH = (uint8_t) (UBRR_BAUD>>8);
    UBRRL = (uint8_t) (UBRR_BAUD & 0xFF);
    
    UCSRB =(1<<TXEN); 
    UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
    
    while(1){ 
    while(!(UCSRA & (1<<UDRE))) 
    { 
    } 
    
    UDR='x'; 
    } 
    return 0; 
    }
    (F_CPU steht bei mir im Makefile)

    Gruß
    Stefan

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    01.07.2005
    Beiträge
    64
    Also ich hab jetzt alles umgändert und zunächst kamen wieder nur a's, dann hab ich mal versuchsweise auf RESET gedrückt und aufeinmal kamen wie erwünscht lauter x's. Kann es sein, das der UART auch beim Senden erst eine "Aufwärmungsphase" braucht?

    Gruß
    cesupa

Berechtigungen

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

Labornetzteil AliExpress