Hallo Forum, erstmal muß ich an dieser Stelle anbringen, dass ich dieses Forum super finde. Ihr habt mir schon soo häufig bei diesen genialen Hobby helfen können. Also, danke ans Forum und an die Leute die Ihr Wissen und ihre Erfahrung bereitwillig anderen zur Verfügung stellen. Zu meinen Problem. Ich verwende den Mega16 im STK500 nun habe ich mal den den SPARE mit den Rx und Tx von meinen Mega16 verbunden und wollte mit folgenden Code ein Echo am Hyperterm erzielen. #include <avr/io.h> #include <stdint.h> #ifndef F_CPU #define F_CPU 3686400 #endif #define UART_BAUD_RATE 9600 #define UART_BAUD_CALC(UART_BAUD_RATE,F_OSC) ((F_CPU)/((UART_BAUD_RATE)*16L)-1) unsigned char get; int uart_putc(unsigned char c) { while (!(UCSRA & (1<<UDRE))); UDR = c; return 0; } int main(void) { UCSRB |= (1<<TXEN); //Transmitter Enabled UCSRC |= (1<<URSEL) | (3<<UCSZ0); //Asynchron 8N1 UCSRB |= (1<<RXEN); //Emfpang enabl UBRRH=(uint8_t) (UART_BAUD_CALC(UART_BAUD_RATE,F_CPU)>>8); UBRRL=(uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_CPU); DDRB = 0xFF; PORTB = 0xFF; while(1) { while(!(UCSRA & (1<<RXC))) { PORTB = ~get; } get = UDR; uart_putc(get); } } Denke da sollte alles richtig eingestellt sein. Im Hyperterm kommen aber nur so Sachen wie "8888888888>888" an. Hat da jemand nen Plan was ich falsch mache?? Da passt doch was mit dem Takt ned, oder?? Wie kann ich daran was rumstellen. Und vor allem welchen soll ich einstellen? Ist bei mir evtl der interne Oszillator (der ungenaue) aktiv? Wie schalte ich den ab? Danke schon im voraus. Timo
>Wie schalte ich den ab?
Guck dir im Programmier-Werkzeug des AVRStudios die Fuses an und dann
guckst du dir das Datenblatt in Bezug auf die Fuses an.
Dake für den Hinweis Rahul!! Hab nun die Fusebits so eingestellt, dass der ext. Oszillator verwendet wird und schon geht die Sache. Also hier nun der Hinweis für alle die auf den STK500 einen UART mit dem Mega16 aufbauen möchten. - Fuses beim Mega16 stehen bei Auslieferzustand auf internen Oszillator. Mit diesen Oszillator ist ein UART kaum möglich weil der Takt zu ungenau ist. Man sollte deshalb den Oszillator von intern auf extern mit Hilfe der Fusebits (siehe Datenblatt bzw. Checkboxen beim AVRStudio im Programmodus)stellen und hat somit den sehr genauen Takt von 3686400Hz bei Verwendung des STK500. - Der Code oben funktioniert dann so und gibt das was man im Hyperterm eingibt als Echo zurück. Besser ist allerdings die Bib von Fleury. http://homepage.hispeed.ch/peterfleury/. Timo
Schön, dass mal jemand nicht nur schreibt "Es funktioniert! Danke!".
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.