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.Zitat von BMS
Gruß Richard
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).Zitat von BMS
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
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.Zitat von BMS
Gruß Richard
Ja ich weiß, dass nur ein Sub-D stecker für USART bestimmt ist und ich stöpsle immer um...
Hier der Code:
Kann PORTB die Taktquelle stören?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; } } } }
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".Zitat von Wiederstand
Gruß Richard
Jetzt bin ich fündig gewordenDeine Codewortlänge stimmt nicht. Du sendest 6 Bit anstatt 8 Bit! (Datenblatt Atmega Seite 157 Table 58 )
Auf den ersten Blick fällt einem da ja nichts auf.Code:UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ0);
aber es muss heißen
Du hast einfach das UCSZ0-Bit doppelt eingegeben.Code:UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);![]()
Grüße,
Bernhard
YEAHHHHHHHH es funktioniert!!!!!!!!!!!!!!
Tausend Dank!!!!!!!
Lesezeichen