- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: STK500 USART Funktioniert nicht

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Zitat Zitat von BMS
    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.
    Das STK500 hat Zwei 9 poolige Sub-D Buchsen an denen ein Handelsübliches RS232 Kabel angeschlossen wird. Man braucht beide Buchsen wenn man einen Chip an RS232 betreiben will.Also auch 2 cm Schnittstellen am PC (wenn man nicht dauernd umstöpseln will).

    Wenn man das STK so hält das die Sub-D Buchsen oben liegen, ist die linke für's SDK zum Proggen, die rechte um eine Verbindung mit den Chip selber herzustellen.

    Die 2 adrige Brücke stellt dann nur die Verbindung von den Chip Pins und den Pegelwandler her. Es ist also richtig das die Masse vom STK selber hardwaremäßig hergestellt wird.

    Viele (auch ich) lernen es nie was RX TX ist und müssen immer mal wieder das Verbindungskabel "umdrehen" damit die Verbindung klappt.

    Gruß Richard

  2. #12
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Zitat Zitat von BMS
    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.
    Wenn man $Baud=xxxxxxx Eingetragen hat, werden die Pins für die UART automatisch richtig gesetzt, da muss nichts mehr "von Hand" gesetzt werden! Das gleiche gilt auch für Software UADT.

    Gruß Richard

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    05.08.2010
    Beiträge
    17
    Ja ich weiß, dass nur ein Sub-D stecker für USART bestimmt ist und ich stöpsle immer um...
    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(void){
    	while (!(UCSRA & (1<<5)));  //warten bis Senden moeglich (UDRE)
        UDR = 'x';
    }
    
    
    int main(void){
    	DDRB = 0xff;
    	DDRD = 0xff;
    	PORTB = 0x00;
    
    
    	usart_init();
    
    	while(1){
    		usart_send();
    
    		zaehler++;
    	    if (zaehler >= 1000)
    	    {
    			zaehler = 0;
    			if(Zustd == 0){   
    		  		PORTB = 0xFF;
    				Zustd = 1;
    			}
    			else{  
    		  		PORTB = 0x00;
    				Zustd = 0;
    			}
    	    }
    	}
    }
    Kann PORTB die Taktquelle stören?

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Zitat Zitat von Wiederstand
    Ja ich weiß, dass nur ein Sub-D stecker für USART bestimmt ist und ich stöpsle immer um...
    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(void){
    	while (!(UCSRA & (1<<5)));  //warten bis Senden moeglich (UDRE)
        UDR = 'x';
    }
    
    
    int main(void){
    	DDRB = 0xff;
    	DDRD = 0xff;
    	PORTB = 0x00;
    
    
    	usart_init();
    
    	while(1){
    		usart_send();
    
    		zaehler++;
    	    if (zaehler >= 1000)
    	    {
    			zaehler = 0;
    			if(Zustd == 0){   
    		  		PORTB = 0xFF;
    				Zustd = 1;
    			}
    			else{  
    		  		PORTB = 0x00;
    				Zustd = 0;
    			}
    	    }
    	}
    }
    Kann PORTB die Taktquelle stören?
    Solange Du nicht an den IO Pords für die Serielle fummels sollte nichts stören. Beim Programm kann ich nicht helfen, C ist nicht so mein "Ding".

    Gruß Richard

  5. #15
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    34
    Beiträge
    1.192
    Jetzt bin ich fündig geworden Deine Codewortlänge stimmt nicht. Du sendest 6 Bit anstatt 8 Bit! (Datenblatt Atmega Seite 157 Table 58 )
    Code:
    UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ0);
    Auf den ersten Blick fällt einem da ja nichts auf.
    aber es muss heißen
    Code:
    UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
    Du hast einfach das UCSZ0-Bit doppelt eingegeben.

    Grüße,
    Bernhard

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    05.08.2010
    Beiträge
    17
    YEAHHHHHHHH es funktioniert!!!!!!!!!!!!!!
    Tausend Dank!!!!!!!

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

12V Akku bauen