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.
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; } } } }
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
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.
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
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...
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.
Ich hatte den flaschen (Pin1) vom RS232 gemessen ,
es besteht doch ein Durchgang von Masse zu Pin5 vom RS232!
* 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)
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.
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.
Lesezeichen