Hallo zusammen,
Ich bin gerade dabei das Assembler AVR tutorial zu machen und komme
eigentlich ziemlich gut durch bis auf die Sache mit dem UART
--> http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART
Ich benutze den Atmega8 in Verbindung mit dem Pollin evalBoard 2.0.1
Programme:
Atmel Studio 6
PonyProg2000
Putty
Den Code habe ich soweit direkt aus dem Tutorial übernommen,
beim öffnen des Terminals mit Putty erscheint jedoch nur systematisch
wiederholt die selbe kryptische Zeichenkette.
Einstellungen des seriellen Terminals in Putty wie im Tutorial angegeben
richtiger COM Port, 9600 baud, 8 Data bits, 1 stop bit, parity none
(es gibt noch eine Option flow control wahlweise (none, xon/xoff,
rts/cts, dsr/dtr) bin mir nicht sicher welches die richtige ist, aber
funktioniert mit keiner der 4 Möglichkeiten.
Ich benutze ein normales Modemkabel was als Fehlerquelle auch
ausscheidet.
Da es sich um einen neuen Atmega8 handelt und ist dieser ja von Werke
aus auf den internen 1MHz Takt eingestellt, weswegen ich in dem
TutorialCode
die F_CPU dementsprechend auf 1 000 000 geändert habe --> selber
Fehler.
Da aber der Uart nicht unbedingt mit dem internen Takt betrieben werden
sollte habe ich das im evalBoard verbaute 16 MHz Quarz in Betrieb
genommen, in dem ich per PonyProg die Fusebits CKSEL0 - CKSEL3 gesetzt
habe, wie im Datenblatt angegeben. Und natürlich den Code auf F_CPU 16
000 000 geändert, immernoch das selbe Problem, nur die Zeichen haben
sich etwas geändert.
Hat jemand einen Tipp woran das liegen könnte bzw einen Tipp der mich in
die richtige Richtung führt?
Vielen Dank schonmal =)
jep immer noch falscher Takt beim Atmega bzw falsche Baud.
Wenn der Takt und die Baud richtig sind dann wirst du auch den deinen
String sehen aber zeig doch mal deinen Quellcode denn nur dein Code ist
dein Code auch wenn er von hier kopiert wurde.
Wie viele Zeichen werden dir denn in kryptischer form angezeigt?
5?
Ponyprog hat glaube ich inverse Bitlogik bei den Fuses, bin aber nicht
ganz sicher denn schon lange nicht mehr beuntzt.
Hmh ok vllt helfen die Clock Fusebits ( aus Ponyprog ) weiter:
CKOPT = 0
SUT1 = 1
SUT0 = 0
CKSEL0-3 = 1
(dass bei Ponyprog gesetzer Haken = 0 ist hab ich beachtet)
Laut der Tabelle auf dem atmega8 Datenblatt (S 27
Table 4. Crystal Oscilaator Operating Modes
Ckopt 0 // CKSEL3...1 111 // Frequency Range 1.0 <=
so muss das ja eigentlich passen.
Das habe ich dort
Beitrag "Externer 16Mhz Quart am ATmega8 ?"
gefunden - soll mit 16 MHz (mit Ponyprog) funktionieren:
o: nicht angekreuzt = 1 = unprogrammed
x: angekreuzt = 0 = programmed
BootLock / Lock: alle o
RSTDISBL: o
WDTON: o
SPIEN: x (kann nicht geändert werden)
CKOPT: x (Default war o)
EESAVE: o
BOOTSZ1: x
BOOTSZ0: x
BOOTRST: o
BODLEVEL: o
BODEN: o
SUT1: o
SUT0: o (Default war x)
CKSEL3: o (Default war x)
CKSEL2: o (Default war x)
CKSEL1: o (Default war x)
CKSEL0: o
Hast du denn mal nur ein Zeichen gesendet z.B. "A" ?
ersetze mal bitte
adiw zl:zh,1 ; Zeiger erhöhen
durch (laut InstructionSet)
adiw zh:zl,1 ; Zeiger erhöhen
Board hat nen Pegelwandler
http://www.pollin.de/shop/downloads/D810038B.PDF
Ok, ich hatte noch nen 2ten atmega8 rumliegen, habs mit dem probiert und
es hat auf Anhieb geklappt...
Oh mann... ärgerlich aber vielen Dank für die schnelle Hilfe!
woran es genau lag kann ich nicht sagen aber den MC hab ich mal
zertrümmert, damit der mir nicht nochmal son Stress macht =)
Spaßeshalber hab ich mal den adiw Befehl wie oben beschrieben geändert,
scheint keine Auswirkungen zu haben