-         

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

Thema: STK500 USART Funktioniert nicht

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    06.08.2010
    Beiträge
    17

    STK500 USART Funktioniert nicht

    Anzeige

    Hallo,
    Ich versucher derzeit mit einem ATMEGA8 (12Mhz von einem externen Quarz) auf einem STK500 Daten an meinen Rechner (Hyperterminal) zu senden.
    Am rechner kommt aber nichts an. Das zweiadrige Kabel für RS232 Spare habe ich an RXD und TXD angeschlossen (also Pin eins und zwei von Portd D).

    Der XTAL1 Jumper auf dem STK500 steckt und OSCSEL Jumper steckt links (aslo von Pin zwei nach Pin drei - laut Handbuch "On-board crystal signal conected").
    Um zu überprüfen, ob die Baudrate richtig eingestellt ist habe ich in mein Programm ien paar Zeilen eingefügt, die dafür sorgen, dass die Leds blinken, wenn 1000mal eine Naricht versendet wurde. In ca. 41Sekunden gehen die Leds 50 mal an bzw aus (also erfolgen in dieser zeit 50.000 Sendungen).

    Ich habe bemerkt, das der Cursor(ich meine den blinkenden Strich) im Terminal sofort erscheint, auch wenn er gerade erst verschwunden ist, wenn ich das STK500 einschalte. Das heißt es wird wahrscheinlich schon ein Kommunikationspartner gefunden.

    Hier der Code:
    Code:
    #include <avr/io.h>
    
    #define F_CPU 12000000UL
    #define BAUDRATE 9600UL 
    #define UBBR F_CPU/16/BAUDRATE-1
    
    uint16_t zaehler = 0;
    uint8_t Zustd = 0;
    
    void usart_init(void){
    	UBRRH = UBBR >> 8;   //Baudrate einstellen
    	UBRRL = UBBR & 0xff; //Baudrate einstellen
    
    	UCSRB = (1<<TXEN); //Transmitter (Daten schicken) aktivieren
    	UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ0); //8Bit länge und 1 Stoppbit; Asynchron
    }
    void usart_send(uint8_t Sendung){
    	while (!(UCSRA & (1<<5)));  //warten bis Senden moeglich (UDRE)
        UDR = Sendung;
    }
    
    
    int main(void){
    	DDRB = 0xff;
    	PORTB = 0x00;
    
    	usart_init();
    
    	while(1){
    		usart_send(1);
    
    		zaehler++;
    	    if (zaehler >= 1000)
    	    {
    			zaehler = 0;
    			if(Zustd == 0){   
    		  		PORTB = 0xFF;
    				Zustd = 1;
    			}
    			else{  
    		  		PORTB = 0x00;
    				Zustd = 0;
    			}
    	    }	
    	}
    }

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Sind zwsichen STK500 und PC tatsächlich nur Rx und Tx oder gibts da auch noch ne gemeinsame Masseleitung? Falls letztere fehlt, kann nichts kommen.
    #ifndef MfG
    #define MfG

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    06.08.2010
    Beiträge
    17
    Ich glaube die Masse fügt das STK500 selber hinzu. Für RXD und TXD gibts bloß nen kabel weil die ja nicht immer mit PORTD verbunden sein können.

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Nur "Glauben" oder ist da sicher Masse vom STK mit Pin 5 des COM-Ports bzw. PC-Gehäuse verbunden? Einach mal nachprüfen/-messen.
    #ifndef MfG
    #define MfG

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    06.08.2010
    Beiträge
    17
    Naja, ich kann das schlecht messen, weil da der pegelwandler dazwischen hängt...
    wenn ich vom normalen µC Masse mit dem Durchgangsmesser messe geht das nicht.
    Aber es ist eigentlich sehr unwahrscheinlich, dass das STK500 die Masse nicht bietet. In der Anleitung steht auch nur, dass ich RXD und TXD connecten muss und in anderen Threads habe ich glaub ich gelesen, dass man keine Masse oder so extra connecten muss...

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    26
    Beiträge
    1.192
    Masse (GND) ist aber unbedingt notwendig, sonst fehlt das Bezugspotenzial. Dass die Datenübertragung dann nicht klappt ist ja kein Wunder.

    Der Pegelwandler kümmert sich "nur" um Rx und Tx, die Masse wird durchverbunden.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    06.08.2010
    Beiträge
    17
    Ich hatte den flaschen (Pin1) vom RS232 gemessen ,
    es besteht doch ein Durchgang von Masse zu Pin5 vom RS232!

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    26
    Beiträge
    1.192
    * Was für ein Kabel hast du denn verwendet?
    * Ich sehe in deinem Programm keine Einstellung für DDRD, PORTD. Der Tx-Pin muss als Ausgang geschaltet werden
    * Welches Terminal verwendest du? Ist das auch auf die selbe Baudrate und das selbe Datenformat eingestellt? (Anzahl Bits, Parity, Stopbits)

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    06.08.2010
    Beiträge
    17
    Cool ich hab jetzt PORTD als Ausgang gestezt und wenn ich das Board ausschalte kommt manchmal was an (nach vielleicht 10 mal an/ausschalten hatte ich dann xx~x~x im Terminal stehen - ich habe den zu senenden Wert auf 'x' gestellt)
    Jetzt blinken die Leds an PORTB alledings nicht mehr, das heißt eigentlich das Programm läuft nicht...

    Ich benutze Hyperterminal und ich glaube, dass ich alles richtig eigestellt hab (1 stoppbit; 8 Datenbits, kein Parity)

    Als Kabel verwende ich das Kabel, mit dem ich den µC auch bespiele - das müsste also funktionieren.

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    26
    Beiträge
    1.192
    PORTD darf nicht komplett auf Ausgang eingestellt sein. Der Rx-Pin muss logischerweise ein Eingang sein. Zeig bitte nochmal dein aktuelles Programm, oder hast du nur diese eine Zeile geändert? Dann sehen wir weiter.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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