-
        

Ergebnis 1 bis 9 von 9

Thema: Problem mit USART

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    12.09.2005
    Beiträge
    35

    Problem mit USART

    Anzeige

    Hallo Zusammen,
    ich bin jetzt auf eure Rate angewiesen, seit 3 Tagen versuche ich, eine Zechenkette in Hyperterminal zu zeigen, es hat nicht geklappt.
    ich weiss nicht, was ich falsch mache.
    Ich programmiere Atmega128, hier ist mein Code
    Code:
    #include <avr/io.h>
    #include <inttypes.h>
    #include <avr/interrupt.h>
    #include <avr/signal.h>
    
    #define F_CPU       16000000UL
    
    #define BAUD        9600UL
    #define UBRR_BAUD   ((F_CPU/(16UL*BAUD))-1)
    volatile uint8_t zeichen;
    volatile uint8_t buffer;
    
    
    // USART initialisieren
    void uart_init0(void)
    {
        // Baudrate einstellen (Normaler Modus)
        UBRR0H = (uint8_t) (UBRR_BAUD>>8);
        UBRR0L = (uint8_t) (UBRR_BAUD & 0x0F);
    	UCSR0B=0;
        // Aktivieren von receiver und transmitter
        UCSR0B = (1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0);
    
        // Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit
    	UCSR0C=0;
        UCSR0C = (1<<UMSEL0)|(1<<UCSZ01)|(1<<UCSZ00);
    }
    
    										
    SIGNAL(SIG_UART0_RECV){		     
    	zeichen= UDR0;	
    	}
    
    									
    void UART_SendByte(uint8_t buffer){
    	while ( !( UCSR0A & (1<<UDRE0)));
    	UDR0=buffer;
    	}
    
    void putstring(char *s){
    	
    	while (*s!=0){
    	UART_SendByte(*s);
    
    		*s++;
    		}
    }
    int main(void)
    {
    	
    	DDRE=0xFF;
    	PORTE=0xFF;
        uart_init0();
    	sei();
        while (1){
    
    	if(zeichen==0x0D){ 
    	putstring("Hallo Welt\n");
    	
    	}
    	}
    }

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    IMHO ist das & 0x0f beim Setzen der Baudrate nicht korrekt, weil da die Bits 4-7 flöten gehen.
    Disclaimer: none. Sue me.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    12.09.2005
    Beiträge
    35
    danke für die schnelle Antwort, ich habe ohne &0x0F probiert, hat es nicht geklappt, prblem ist ich bekomme nichts zurück.
    danke

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    In putstring muss es s++ heissen, nicht *s++ ... obwohl, das sollte egal sein...

    Es wäre ganz hilfreich, wenn du rausfinden würdest, ob der receive-Teil oder der Transmit-Teil nicht geht. Das macht die Fehlersuche dann einfacher.

    Du kannst zB das "Hallo Welt immer ausgeben (anstatt als Reaktion) und dann ein while(1); Nach dem Reset sollte der µC dann einen String zum PC schicken.
    Disclaimer: none. Sue me.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    12.09.2005
    Beiträge
    35
    Hi,
    Sender und emfänger sind Fehlerfrei, ich kann schon ein Zeichen senden und emfangen. Problem liegt nur bei Zeichenkette.

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    Wenn du möchtest, daß man dir hier hilft, ist es hilfreich möglichst genau zu beschreiben, was nicht funktioniert.

    "Problem bei Zeichenkette" ist nicht wirklich hilfreich...
    Disclaimer: none. Sue me.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    12.09.2005
    Beiträge
    35
    ich möchte, wenn ich "Hallo Welt" als Zeichenkette an Atmega128 sende, sollte es an Hyperterminal gezeigt werden.
    es gibt nicht viel zu erklären.
    danke

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    12.09.2005
    Beiträge
    35
    Hallo Zusammen,
    ich bin selber auf die Lösung gekommen, einfach UMSEL=0 setzen.
    es wird synchrone Verbindung erstellt, d.h keine Kopfschmerzen mit dem Baudrategenauigkeit.
    vielen Dank für Alle, die sich bemüht besonderes SprinterSB
    Güss majid

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    33
    Beiträge
    685
    Hallo chouifi,

    kannst du mal deinen neuen Code posten oder noch besser, deinen ganzen Ordner als .rar oder .zip rausgeben.
    Wäre echt nett, da ich langsam mit C und uc anfangen will. Es ist äußerst günstig, wenn man eine Basis hätte (makefile, Quelltext, usw.), sodass man darauf aufbauen kann. Ich will das Ganze mit einem Atmega32 testen
    Es verwirrt mich schon ein bisschen, dass man mehrer Header und Quelltext Dateien nutzen kann und zudem noch ein makefile benötigt. Bei Bascom schreibt man alles in eine Datei/Programm.

    Gruß
    Stefan

Berechtigungen

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