-
        
+ Antworten
Ergebnis 1 bis 7 von 7

Thema: UART -> Empfangen funktioniert nicht

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.06.2004
    Alter
    28
    Beiträge
    234

    UART -> Empfangen funktioniert nicht

    Hallo Leute,

    bei meinem UART klappt das Senden zum PC ohne Probleme, alles wird richtig übertagen.

    Wenn ich allerdings irgendetwas vom PC sende hängt sich der Controller (AtMega16) auf und führt keine Befehle mehr aus...

    Mein kompletter UART-Code:
    Code:
    void uart_init()
    {
    	outp( (CPU_Frequency / (UART_BAUD_RATE*16L))-1 , UBRRL );
    	outp( 0, UBRRH );
    	outp( (1 << URSEL) | (3 << UCSZ0), UCSRC);
    	outp( (1 << RXCIE) | (1 << TXEN) | (1 << RXEN), UCSRB);
    	
    	sei();
    } 
    
    
    void uart_nachricht(char* senden) {
    
    for (; *senden != '\0'; senden++) {
        loop_until_bit_is_set(UCSRA, UDRE);
    	UDR=*senden;
    	} 
    	loop_until_bit_is_set(UCSRA, UDRE);
    	UDR = 13;
    }
    
    Signal (USART_Receive_Complete)  {
    	uart_nachricht("Hab was emfangen!");
    	}

  2. #2
    Gast
    Womit programmierst du?

    Bei avrgcc:

    #include <avr/signal.h>
    #include <avr/interrupt.h>

    SIGNAL (SIG_UART_RECV) {
    //do something
    }

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.11.2003
    Beiträge
    991
    Hi,

    du muss in der Interruptroutine UDR auch auslesen. Ansonsten wird das Flag nicht gelöscht und die Routine ständig wieder ausgeführt. Und das zurücksenden solltest du nicht in der Interruptoutine machen, setz da lieber eine Variable und frag die im Hauptprogramm ab.

    Ansonsten gilt das was der Gast schon geschrieben hat. Deine Syntax ist da einfach falsch...

    MfG Kjion

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.06.2004
    Alter
    28
    Beiträge
    234
    danke für den Code jetzt gehts...

    Meinen Code hatte ich aus einem alten AVR-GCC Tutorial, welches aber das einzigste ist was ich in der Richtung kenne.

    Gibt es halbwegs neue, die auch AD-Wandler etc behandeln?

  5. #5
    Gast
    www.mc-project.de

    Da werden sie geholfen

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.06.2004
    Alter
    28
    Beiträge
    234
    die Site gefällt mir ganz gut, danke

    Ich hoffe die Beispiele dort lassen sich problemlos auf einen 16er übertragen

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Ort
    Untersöchering(Bayern,Alpenvorland)
    Alter
    29
    Beiträge
    215
    Wenn du mit 16er den ATmega16 meinst dann gehts ganz sicher. Musst nur schauen ob es irgendwo Mhz abhängige Funktionsbeispiele gibt, die du dann halt auf dein Quarz umschreiben musst.
    Gruß Muraad

+ Antworten

Berechtigungen

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