Hi Leuts, ich habe hier ein STK500, bestückt mit einem Mega16 und versuche einen serielle Kommunikation hinzubekommen. Leider geht mal rein gar nix. Die Pins PD0 und PD1 habe ich mit zwei Kabel auf die Pins RS232 Spare gebrückt, an der Schnittstelle hängt ein Laptop (1:1 Kabel, 2, 3, 5)mit Hyperterminal: 9600,N,8,1. Die Pins 2 und 3 vom Kabel habe ich nicht getauscht, da ja lt. Manual diese Pins gegenüber einer PC Schnittstelle bereits gedreht sind. Da nichts ging, habe ich aber auch schon das Kabel gedreht, ohne Wirkung. Kann mir jemand einen Tip geben ? Auszug aus dem Sourcecode, den ich mit aus einem Tutorial kopiert habe, hängt an. Greets Karlheinz
Hast du in den advanced setting beim proggen gecheckt, ob auch tatsaechlich die in der source angegebene OSC-Frequenz eingestellt ist ? Hast du die fuses entsprechend auf eine externe clock eingestellt ?
Überprüfe mal deine Uartinitialisierung, denn da hast du einiges vergessen. z.B. das Frameformat einstellen und den Transmitter und Reciever zu enablen. Und das was the Daz gesagt hat nochmal überprüfen. Denn daran lag es bei mir am Anfang. Falsche Frequenz und nix ging! Gruß Marian
Hm, also die Initialisierung nehme ich jetzt wie folgt vor: UCSRB |= (1<<TXEN); UCSRC |= (1<<URSEL)|(3<<UCSZ0); /* USART-Init beim ATmegaXX */ UBRRH=(uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_CPU)>>8); UBRRL=(uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_CPU); Die Fuse-Bits scheinenn auch richtig zu sein (externer Takt). Aber nach meinem Verständnis müßte doch die TxD kontinuierlich auf High sein, oder ? PC-seitig ist das auch so, beim STK 500 aber nicht. Und das sollte doch auch unabhängig von der eingestellten Baudrate so sein... Oder denke ich da verkehrt ? Greets Karlheinz
Ich kenne die von dir benutzen Macros UART_BAUD_xxx nicht, aber der ICC application builder hat fuer dein setup folgende UART-Initialisierung ausgerechnet: //UART0 initialize // desired baud rate: 9600 // actual: baud rate:9600 (0,0%) // char size: 8 bit // parity: Disabled void uart0_init(void) { UCSRB = 0x00; //disable while setting baud rate UCSRA = 0x00; UCSRC = BIT(URSEL) | 0x06; UBRRL = 0x17; //set baud rate lo UBRRH = 0x00; //set baud rate hi UCSRB = 0xD8; } Check mal, ob du in deinem Programm auf das gleiche Ergebnis kommst.
Damit ist auch klar, was dein Problem ist: du hast beim setup von UCSRB vergessen, receiver (RXEN) und transmitter (TXEN) zu enablen.
Leider das gleiche Ergebnis. So langsam glaube ich ja fast an eine defekte Hardware..... Lt. Tutorial hier im Forum sollte das mit " UCSRC |= (1<<URSEL)|(3<<UCSZ0);" erledigt sein Jetzt versuch ichs mal mit Bascom, und dann schmeiss ich das STK weg... Trotzdem 1000 Dank für die Mühe die ich gemacht habe :-) Greets Karlheinz
Im Tutorial steht: UCSRB |= (1<<TXEN); //UART TX einschalten UCSRC |= (1<<URSEL)|(3<<UCSZ0); //Asynchron 8N1
Sorry, habs gerade gelesen, dass du TX ja schon enabled hattest. Kannst du mal deine source anhaengen ?
Also das ist meine Uart-Initialisierung: void UART_Init (void) { UBRRL = F_CPU / (16 * 9600UL) - 1; /*Enable reciever and transmitter */ UCSRB = (1<<RXEN) | (1<<TXEN) ; /*Set Frame format :8data, 1stop bit */ UCSRC = (1<<URSEL) | (3<<UCSZ0) ; OSCCAL = 0xAF; } Mit dieser funktioniert es bei mir jedenfalls immer :)...ist für einen Atmega32 und dem STK500. Die F_CPU habe ich im Makefile festgelegt und auch per AVR-Studio mit den Fuses usw. abgestimmt. Den OSCCAL-Wert muss ich festlegen, weil ich den internen Taktgenerator nutze. Kannst es ja erstmal mit dem internen Takt und meiner Initialisierung probieren. Müsste eigentlich klappen. Vielleicht hilft es dir ja weiter :)...ciao
Alos jetzt tippe ich definitiv auf die Hardware: Mit dem Oszi krieg ich an PD1 (TxD) negative Spannungsimpulse, an der Schnittstelle des STK jedoch positive. Da dies meines Erachtens nach verkehrt ist, ist wohl der Max232 (oder was auch immer) hinüber :-(
Auf der RS232-Seite (+-12V) negativ, wenn auf der 5V-Seite positiv? Definitiv richtig. Log. 1 wird bei der RS232 mit einer negativen Spannung dargestellt und log. 0 mit einer positiven. Dann könnte es sonst nur das Kabel zum PC sein... (vielleicht doch Nullmodem-Kabel?)
Sorry, das doppelte Posting war definitiv KEINE Absicht. Bitte 1000mal um Entschuldigung
Also dann kapier ichs auch nicht mehr: Am Controller habe ich an TxD 0V mit negativen Impulsen.... Ich denke das stimmt An der Schnittstelle habe ich 0V mit positioven Impulsen. Ich denke da muessten 12V mit negativen Impulsen auftauchen
HEUREKA er will. Aber woran es hing glaubt mir wohl eh keiner, tue ich ja selbst kaum. Hyperterminal! Mit einem anderen Terminalprogramm klappts wunderbar, irgendwie mag das wohl bei mir nicht. Nochmals 1000Dank für die Tips, war recht hilfreich. Greets Karlheinz
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.