-
        

+ Antworten
Ergebnis 1 bis 4 von 4

Thema: UART ermöglicht Senden, aber kann nicht Empfangen

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.05.2004
    Beiträge
    275

    UART ermöglicht Senden, aber kann nicht Empfangen

    Anzeige

    Hi!
    Habe an meinem Atmega8 ein "UART-Modul" angebaut.
    Senden kann der µC ohne Probleme und ohne Störungen.
    Allerdings reagiert er auf ein Senden vom PC aus überhaupt nicht.

    Das Proggy soll nur die empfangenen Daten wieder zum PC zurücksenden.

    Nutze folgenden Code:

    void init_uart()
    {
    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();
    }

    SIGNAL(SIG_UART_RECV)
    {
    uart_send( inp(UDR) );
    }

    void uart_send(char character)
    {
    loop_until_bit_is_set(UCSRA, UDRE);
    outp(character, UDR);
    }

    int main()
    {
    outp( 15 , DDRD ); /* PIN 5-8 as Input*/

    init_uart();
    delay(3);
    uart_send('H');
    uart_send('a');
    uart_send('l');
    uart_send('l');
    uart_send('o');
    uart_send(10);
    uart_send(13);
    while(1);

    return 0;
    }

    ************************************************** **********************************

    Müsste die Interrupt-Routine nicht auch bei Datenschrott reagieren?
    Kann es an einer Fehlkofiguration der Schnittstelle liegen? (Obwohl die vom µC gesendeten Daten korrekt vom PC empfangen werden?)
    Oder das wahrscheinlichste, hab ich einen hab ich einen Fehler gemacht? Zwinkern

    Würde mich auch über programmiertechnische Tipps sehr freuen.

    MfG

    Batti

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.03.2004
    Ort
    Paderborn
    Alter
    32
    Beiträge
    614
    Im Code kann ich keine Fehler erkennen. Hast du schon nach Fehlern in der Schaltung gesucht?
    Was die Befehle outp und inp angeht: In der Dokumentation steht, dass die nicht mehr aktuell sind und in neueren Versionen 'rausfliegen könnten.
    Du kannst in der aktuellen jedenfalls I/O-Registern wie ganz normalen Variablen Werte zuweisen.
    statt
    outp( 0, UBRRH );
    also einfach
    UBRRH=0;
    it works best if you plug it (aus leidvoller Erfahrung)

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    09.06.2004
    Beiträge
    7
    eigentlich müsste zumindest datenschrott ankommen.

    Aber schau dir nicht nur die ankommenden Ascii zeichen an. vielleicht empfängst du ja wenigstens Hex zeichen die nicht als ascii interpretiert werden.
    wenn das der fall ist schreibe dir ein kleines Programm womit du UBRRL hochzählst bis die richtigen daten ankommen.
    oftmals ist eine verschiebung drinnen und UBRRL zum senden != empfangen.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.05.2004
    Beiträge
    275
    Habe das Problem jetzt gelöst, lag daran das der interne Taktgeber wieder (er war definitiv deaktiviert) aktiviert war, aus welchen mir unerklärlichen Gründen auch immer...

    Trotzdem herzlichen Dank Gottfreak & Tire0011 für die Hilfe...

+ Antworten

Berechtigungen

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