-         
+ Antworten
Ergebnis 1 bis 4 von 4

Thema: UART ermöglicht Senden, Empfang scheint allerdings gestört

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

    UART ermöglicht Senden, Empfang scheint allerdings gestört

    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:

    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?

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

    MfG

    Batti

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.05.2004
    Beiträge
    275
    Ach ja, eins hab ich noch vergessen
    Habe keinen Kondensator zwischen VCC und GND geschalten der eventuelle "Störspannungen" auffängt. Aber wenn dies der fall wär, dann müssten die gesendeten Daten doch auch gestört sein..., oder nicht?

    MfG
    Batti

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

    ich sehe jetzt spontan eigentlich keinen Fehler. Vor allem wenn du Daten mit dem PC korrekt empfangen kannst...

    Was ist denn das für ein Quarz bzw. welche Baudrate verwendest du ??

    Aber noch was allgemeines:
    Man kann statt "outp( 0, UBRRH );" auch einfach "UBRRH = 0;" schreiben. Du die "outp" bzw. "inp" Methode wird von dem Compiler in den nächsten Version irgendwann nicht mehr unterstüzt werden, daher sollte man die andere Schreibweise nutzen ( die nebenbei auch noch viel übersichtlicher ist wie ich finde )...

    MfG Kjion

    ( PS : Ich hab in deinem Beitrag mal einen Codetag gesetzt. Es ist einfach besser zu überblicken so )

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.05.2004
    Beiträge
    275
    Hi!
    Verwende einen 4Mhz Quartz und eine Baud-Rate von 9600.
    Gestern abend lief er auffeinmal, über meinen Windowsrechner.
    Muss da mal weitertesten, denn der Empfang vom Linuxrecher war bis dato völlig ok.
    Doch irgendwie geht bei dem jetzt nichts mehr so wirklich.

    Werde das verfolgen und mich dann wieder melden.

    MfG
    Batti

+ Antworten

Berechtigungen

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