Hallo,
ich versuche gerade mit dem Atmega8 über uart auf meinen COM-Port zu
senden. hab auch schon eine Beispiel programm gefunden. jedoch
funktioniert dieses bei mir nicht. hab im Hyperterminal auch schon alles
richtig eingestellt(9600,8,n,1). aber es kommt nichts an.
sehe ich das richtig das dieses programm mir normalerweise ein X
schicken müsste?
ich sende mit dem myavr-board. dieses ist auch fehlerfrei da ich mit dem
Testprogramm keine Fehler habe.
danke
1
2
#ifndef F_CPU
3
#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000"
4
#define F_CPU 4000000L // Systemtakt in Hz, das L am Ende ist wichtig, NICHT UL verwenden!
5
#endif
6
7
#define BAUD 9600L // Baudrate, das L am Ende ist wichtig, NICHT UL verwenden!
bekommst Du die
"F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000"
Meldung? Ist die Frequenz auch wirklich richtig eingestellt?
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
ist das das wirklich das gleiche wie
# define MY_BAUD FOSC/16/BAUD-1
ist ja auch nicht so wichtig, wie kompliziert der Ausdruck ist, wird ja
vom COMPILER ausgewertet.
Da bin ich mir nicht ganz sicher...
hoffentlich werden die // Kommentare vor dem Preprocessor weggeräumt
(lieber davor hinschreiben)
Versuch doch erstmal das 'x' in einer Schleife zu sende, also endlos in
der while Schleife. So kannst du erstmal schauen ob es allgemein geht
und bist nicht nur auf ein Senden angewiesen.
Gruß
Micha
hab jetzt was herausgenommen.
und zwar while (!(UCSRA & (1<<UDRE))). Kann es sein das ich dafür CTS
RTS aktivieren muss.anstatt diesem hab ich eine While-schleife
eingefügt,die ständig sendet mit 500ms pausen.
jedoch bekomm ich im hyperterminal nur seltsame zeichen. hab auch den
externen quarz aktiviert. kann mir jemand sagen woran das liegt. bei
4800,9600 und 11.... kommen seltsame zeichen. drunter und drüber geht
nichts.
danke
1
#include<avr/io.h>
2
#include<stdint.h>
3
#include<util/delay.h>
4
5
6
#ifndef F_CPU
7
/* In neueren Version der WinAVR/Mfile Makefile-Vorlage kann
8
F_CPU im Makefile definiert werden, eine nochmalige Definition
9
hier wuerde zu einer Compilerwarnung fuehren. Daher "Schutz" durch
10
#ifndef/#endif
11
12
Dieser "Schutz" kann zu Debugsessions führen, wenn AVRStudio
13
verwendet wird und dort eine andere, nicht zur Hardware passende
14
Taktrate eingestellt ist: Dann wird die folgende Definition
15
nicht verwendet, sondern stattdessen der Defaultwert (8 MHz?)
16
von AVRStudio - daher Ausgabe einer Warnung falls F_CPU
17
noch nicht definiert: */
18
#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000"
19
#define F_CPU 4000000L // Systemtakt in Hz, das L am Ende ist wichtig, NICHT UL verwenden!
20
#endif
21
22
#define BAUD 9600L // Baudrate, das L am Ende ist wichtig, NICHT UL verwenden!
Antworte doch mal auf diese Fragen von Gabriel Wegscheider:
> bekommst Du die> "F_CPU war noch nicht definiert, wird nun nachgeholt mit 4000000"> Meldung? Ist die Frequenz auch wirklich richtig eingestellt?
Das myAVR Board arbeitet nicht mit 4 MHz. Es ist eine Taktquelle mit
anderer Frequenz drauf! Wenn obige Meldung kommt, heisst das das ein 4
MHz Wert benutzt wird, um die UART Einstellungen für die Baudrate 9600
zu berechnen, Und dann käme auf der Gegenseite wenn überhaupt nur Müll
an.
Und wie war dein Fehlerbild ?-)
> jedoch bekomm ich im hyperterminal nur seltsame zeichen. hab auch den> externen quarz aktiviert. kann mir jemand sagen woran das liegt. bei> 4800,9600 und 11.... kommen seltsame zeichen. drunter und drüber geht> nichts.
Klar. Wenn die UART des AVR wie hier die Baudrate nur mit einem Fehler
grösser 1% einstellen kann, dann ist es kein Wunder, dass auf der
Gegenseite nur Müll oder garnix ankommt.
Du kannst versuchen statt 9600 Baud eine andere Baudrate zu finden, bei
der es einen kleineren Fehler gibt. Hilfreich ist bei der Suche die
Taktrate des Boards ;-) und die Tabelle im UART-Teil des Datenblattes
des verwendeten AVRs.