-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: UART: PC->µC

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2004
    Ort
    Bielefeld / Paderborn
    Beiträge
    1.253

    UART: PC->µC

    Anzeige

    Hallo!

    Ich versuche mich gerad ein wenig an C und möchte gern Bytes vom PC empfangen und am PortC durch eine LED-Leiste anzeigen lassen. Hier mein Code (Aus verschiedensten Tutorials zusammenkopiert):

    Code:
    #include <inttypes.h>
    #include <avr/io.h>
    #define F_CPU 7372800L
    #define BAUD 9600L
    #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
    #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
    #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) // Fehler in Promille
    
    int main(void)
    {
        UCSRB |= (1<<RXEN);                // UART RX einschalten
        UCSRC |= (1<<URSEL)|(3<<UCSZ0);    // Asynchron 8N1
    
        UBRRH = UBRR_VAL >> 8;
        UBRRL = UBRR_VAL & 0xFF;
        DDRC = 0xFF;
        PORTC = 255;
    
    
            while (!(UCSRA & (1<<RXC)))  // warten bis Zeichen verfuegbar
    		;
    	    {
    			PORTC = UDR;
    	    };
    }
    Was passiert ist dass die LED-Leiste GANZ kurz leuchtet (programmstart) und dann aus ist. Ich habe schon geschaut, ob es vllt mit 1200 Baud (im Terminal-Prog eingestellt) läuft, wegen des /8-Fuses, aber ist nicht. Hab den Ausgang (TXD) der USB-Uart-Bridge an RXD am Mega8 angeschlossen.
    Kann mir wer sagen, was ich falsch mache? Hab schon hier im Forum viel rumgelesen, aber dabei keine neuen Erkenntnisse gewonnen.

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.01.2007
    Beiträge
    134
    Da is wohl ein ; zuviel nach dem while

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2004
    Ort
    Bielefeld / Paderborn
    Beiträge
    1.253
    Nun guuut, aber das Entfernen desselben hat keine sichtbaren Resultate herbeigeführt.

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Das ; war schon in Ordnung.
    Da fehlt noch eine Endlos while Schleife. Sonst wird dein Programm nur einmal durchlaufen.
    Code:
      while(1)
      {
            while (!(UCSRA & (1<<RXC)))  // warten bis Zeichen verfuegbar
          ;
           {
             PORTC = UDR;
           } 
      }

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2004
    Ort
    Bielefeld / Paderborn
    Beiträge
    1.253
    geht nicht auch ne do/loop-schleife?

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.08.2004
    Ort
    Großbardorf
    Alter
    30
    Beiträge
    674
    Das ist doch vollkommen egal, ob do loop oder while oder for, hauptsache endlos. Machen tun die doch in dem Fall eh alle dasselbe.

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    34
    Beiträge
    1.780
    Aber das Semikolon vor der geschweiften Klammer muss trotzdem weg, sonst gehört sie nicht mehr zum while und der Block wird immer ausgeführt.
    So viele Treppen und so wenig Zeit!

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2004
    Ort
    Bielefeld / Paderborn
    Beiträge
    1.253
    Hm ich hab das jetzt mal ausprobiert. Wenn ich den USB/RS232-Adapter nur mit der Datenleitung mit dem µc verbinde und nicht mit GND, ist auf PortC Disco. Allerdings leuchtet gar nichts, wenn ich GND verbinde und Daten sende... Ich vermute langsam dass es nen Hardware-Problem ist. Ich werd diesen ominösen Adapter mal per Oszi unter die Lupe nehmen....

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied Avatar von drew
    Registriert seit
    06.04.2005
    Beiträge
    150
    Hallo,
    das mit der Seriellen Schnittstelle am PC musst du erst mal in den Griff bekommen.
    Verbinde mal RX und TX von der RS232. Wenn du dann was vom PC absendest solltest du es auch gleich wieder empfangen.

    Ich hab nicht ganz verstanden, wie du den Atmega an den PC angeschlossen hast. Hast du einen Pegel-Wandler drin, ala MA232 oder setzt du das Signal direkt auf USB um ala FTDI?

    Drewle

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.05.2004
    Ort
    Bielefeld / Paderborn
    Beiträge
    1.253
    Nen... Wie ich IIRC einige Male schrob, benutze ich den MySmartUsb von "MyAvr.de". Das ist eine RS232/SPI/TWI/Programmer- Eierlegende-Wollmilchsau für den USB-Port. Es steht als normaler Com-Port am Rechner zur Verfügung. Ich hab es jetzt auch mal mit dem Oszi durchgemessen und festgestellt: Das Teil schmeisst nur GND raus ^^ Hab mich schon mit dem Hersteller in Verbindung gesetzt.. Hoffe ich krieg Ersatz.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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