-         

Ergebnis 1 bis 6 von 6

Thema: Zeichen Empfangen Rs232

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.07.2005
    Beiträge
    5

    Zeichen Empfangen Rs232

    Anzeige

    Hallo, beschäftige mich seit kurzem mit dem UART. Hab´s auch schon geschaft Sensordaten (einfache Aufzählung) auf dem Hterm auszugeben.
    Frage/Problem: ich krieg´s nicht hin etwas vom Hterm in meinem µC zu senden.
    Würde gerne sowas wie einen Stellweg eingeben können, und dieser wird anschließend vom Motor ausgeführt. In dem Tutorial von mikrocontroller.net stehen nur zwei Sätze dazu. Mir zu wenig um´s zu verstehen. Hab im Internet recherchiert und ein paar Beispiele ausprobiert, die haben alle nicht geklappt.
    Kann mir jemand bitte ein Codeschnipsel zeigen der auf eine Eingabe vom Hterm wartet, und danach etwas ausführt. Bei mir wird entweder gleich ausgeführt, oder gar nicht. Wie gesagt, das mit der Eingabe klappt nie.
    Danke.

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.09.2004
    Ort
    In der Nähe von Esslingen am Neckar
    Beiträge
    706
    Hi,
    hier mal ein Testprogramm. Ich hab zwei Leds an den Ports Portc2 und Portc3. Du kannst au ne andere Auswertung machen anstelle des An- und Ausschaltens der Leds. Bei mir läuft's mit HTerm, AVRTem usw...
    Einstellungen: Baudrate: 9600, Databits: 8, Stopbits: 1, Parity: None

    Code:
    /*
    Testprogramm:
    Wartet auf Daten, wertet sie aus und gibt anschließend das
    Ergebnis mittels zwei LEDs an Portc 2 und 3 aus.
    Autor: Michael
    Datum: 18.08.06
    */
    
    //Header einbinden
    #include <avr/io.h> 
    #include <avr/interrupt.h> 
    #include <avr/signal.h>
    
    //Takt einstellen
    #define F_CPU 16000000
    //Baudrate angeben
    #define USART_BAUD_RATE 	9600 
    //Buadrate ausrechnen
    #define USART_BAUD_SELECT 	(F_CPU/(USART_BAUD_RATE*16l)-1) 
    
    //Variable für den Empfang anlegen
    volatile char zeichen;
    
    //Methode zum initialisieren
    void init(){
    	//Empfangsbit setzen
    	UCSRB |= (1<<RXEN);
    	//Empfangsinterrupt setzen
    	UCSRB |= (1<<RXCIE);
    	//Ausgerechneter Baudratewert ins Register schreiben
    	UBRRL = (unsigned char) USART_BAUD_SELECT;
    	DDRC  = 0xFF;
    }
    
    SIGNAL(SIG_UART_RECV){
    	//Empfangsbuffer auslesen
    	zeichen = UDR;
    	//Irgendwas mit dem empfangenen Zeichen anstellen
    	//Hier ein Vergleich:
    	if(zeichen == 'a'){
    		PORTC = (1<<PC2);
    	}
    	else{
    		PORTC = (1<<PC3);
    	}
    }
    
    int main(void){
    	//Global Interrupts aktivieren
    	sei();
    	//Initialisierungmethode aufrufen
    	init();
    	//Endlosschleife
    	while(1){
    	}
    }
    Gruß Michi

    [Edit] Da das Programm in einer Endlosschleife ist, wertet es kontinuierlich die Daten aus und zeigt das Ergebnis an [/Edit]

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2005
    Alter
    64
    Beiträge
    157
    Hallo 2mal3,

    versuch es einmal mit folgendem Programm. Das sendet das empfangene Zeichen wieder zurück.

    Code:
    unsigned char ReadByte(void)
    { while ((UCSRA & 0x80) == 0); // Warten bis Zeichen vorhanden 
      return UDR;
    }
    
    void WriteByte(unsigned char data)
    { while ((UCSRA & 0x20) == 0); // wait for empty transmit buffer
      UDR = data
    }
    
    voind init(void)
    {   // prepare RS232 
    	UCSRA = 0x00;
    	UCSRB = 0x00;	
    	UCSRC = 0x86; // No Parity | 1 Stop Bit | 8 Data Bit
    	UBRRL = 0xCF; // 2400bps @ 8.00MHz
    
    	UCSRB |= (1 << TXEN); //enable transmit
    	UCSRB |= (1 << RXEN); //enable receive
    }
    
    int main(void)
    { Init();
    
      while (1)
         WriteByte(ReadByte());
    }
    Gruß RedBabron

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    26.07.2005
    Beiträge
    5
    Danke für eure Hilfe.
    Leider läufts trotzdem nicht.

    Da die Codes von euch kommen, liegt es wohl an mir.
    Bei dem Programm von michaelb sind alle LED´s an, keine geht aus!
    Das Programm von RedBaron funktioniert auch nicht bei mir (fehlender Semikolon schon verbessert) Hab den RN-Control mit Atmega 32.
    Ich vermute, dass ich falsch sende!
    Wie gesagt ich hab den Hterm 0.6.5. Empfangen klappt super. Senden nie.
    Ich sende indem ich bei Input -> Type -> eine a eingebe und enter drücke, oder wahlweise mit "Asend". Daraufhin erscheint unter der eingabezeile mein eingegebenes Zeichen nochmal. Hab ich jetzt gesendet oder nicht?
    Es gibt da noch die Möglichkeit bei "Send on Enter" etwas einzustellen, hab alle Varianten probiert, keine Reaktion von meinem µC.
    Habt Ihr noch eine Idee an was es liegen könnte, außer am Code?
    Für eure Hilfe wäre ich echt dankbar.

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.09.2004
    Ort
    In der Nähe von Esslingen am Neckar
    Beiträge
    706
    Hi 3mal3,
    alle LED´s an, keine geht aus!
    wie sind die Led's geschaltet? Bei mir sind beide gegen GND. Du musst den Code schon ändern wenn du die LED's an anderen Ports hast!
    Ich hab die HTerm 0.6.3 beta... macht aber sicherlich nichts aus!
    Natürlich musste bei Hterm erstmal die Settings einstellen
    Dann bei Input Type ASC einstellen und bei Send on Enter none einstellen sonst sendet es noch was mit...
    Dann halt ein a senden damit die LED leuchtet wenn ein anderes Zeichen gesendet wird müsste die andere angehen.

    Gruß Michi

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    26.07.2005
    Beiträge
    5
    Hi Roboter Genie,
    nee stimmt schon, hab PORTC |=(1<<PC2); einfach mal so in die Main getippt und die LED geht halt aus. Es sind alle LED´s an beim anschalten, da gegen 5V geschaltet und Port auf Ground. Bei dir geehn die LED´s eben an wenn du ein 'a' sendest, bei mir müssten sie aus gehen.
    Aber tun sie nicht!
    Senden tu ich wie oben beschrieben, Settings müssten stimmen (Baudrate, Com etc..) ich kann ja Empfangen.
    Sonst noch eine Idee an was es liegen könnte?
    Falls nicht, trotzdem Danke für deine Mühe.

Berechtigungen

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