Hallo zusammen,
beschäftige mich gerade mit der UART und komme einfach nicht weiter:
1. Habe ein STK500 Board mit einem 8515. Finde in den Datasheets leider
keinen Hinweis darauf, hinter welchen Pins sich beim 8515 Txd und Rxd
verstecken. Habe aus dem User Guide entnommen, dass es sich um die Pins
0 und 1 des Ports D handeln soll. Ist das korrekt?
2. Habe gelesen, dass man die Pins 0 und 1 des Ports D mit den Stiften
Rxd und Txd verbinden soll, um die Uart CTRL nutzen zu können. Muß noch
irgendetwas anderes gemacht werden?
3. Habe darauf geachtet, dass Pin 0 mit Txd und Pin 1 mit Rxd verbunden
wurden.
4. Habe mir mittlerweile 3 Beispiele aus dem Netz geholt, aber beim
obigen Aufbau bekomme ich keine Verbindung mit dem Rechner. Glaube aber
nicht, dass es an der Rechnerseite liegt, da beim ´gleichen Aufbau mit
z.B. der CControl das ganze problemlos läuft.
P.s. Habe am Rechner 8,N,1 mit 9600 Baud eingestellt.
Hat jemand ne Idee?
Olli
Hallo Olli,
ich habe auch das STK500 und hatte auch erst Probleme:
1. Ich hatte auf der PC-Seite das falsche Protokoll ausgesucht.
2. Ich habe nach dem ISP-Programmieren kein RESET des AVRs durchgeführt,
dieser sendet dadurch nur Müll
Hast du mal an TxD gemessen?
Hi Matthias,
habe das Problem mittlerweile gelöst.
Einerseits lag es daran, dass ich immer davon ausgegangen bin, dass das
STK 500 einen 4MHZ Quarz besitz, wodurch ich den Bauteiler auf 25
eingestellt hatte. Es wurden so zwar alle Bytes an den Computer gesandt,
allerdings waren sie fehlerhaft. So sollte z.B. &H30 gesendet werden und
am Rechner kam &H60 raus usw.
Mit einem Baudteiler von nunmehr 24 funktioniert die Übertragung sehr
gut.
Interessanter Weise mußte ich aber auch die Schnittstelle am Rechner
wechseln. Programmiere ich den AVR z.B. mit dem AVR Studio über COM1,
dann kann ich - trotz reseten und neustarten des Controllers - nur über
die COM2 kommunizieren. Versuche ich eine Kommunikation über die COM1,
solange wie das AVR Studio läuft, kommt nichts an. Das Programm scheint
die ganze Zeit die COM1 zu belegen.
Gruß
Olli
Das Problem mit den offenen Anschlüssen liegt an der Windows-Version.
Für welche Baudrate verwendest du den Baudteiler 24? Für 9600 Baud bei
3,69MHz must du den Baudteiler 23 verwenden.
Gruß Matthias
Hi Matthias,
verwende 24 bei 9600 baud. Rechnerisch ergibt sich daraus ne
Taktfrequenz von 3,8.. Mhz. Der AVr auf dem Board funktioniert damit
schon ein paar Tage ohne Fehler.
Frage mich aber bitte nicht, welche Taktfrequenz auf dem Board
eingestellt ist. Bin leider Newbie und hab noch nicht geschnallt, wie
ich das rausfinde.
Den Baudteiler habe ich durchs experimentieren rausgefunden. Damit war
die Fehlerhäufigkeit gleich null. Mit anderen Teilern hat es bei der
jetzigen Einstellung nicht funktioniert. Fast jedes Byte war fehlerhaft.
Olli
Hallo Olli,
falls du das AVR-Studio verwendest (davon gehe ich aus), kannst du, wenn
du auf das AVR-Symbol klickst, öffnet sich das STK500 Frontend.
Dort kannst du auf der Seite "Board" in dem Auswahlfenster "Oszillator"
die Taktfrequenz des STK500 einstellen. Die Werte, die du dort
einstellen kannst sind auf 2 Nachkommastellen gerundet. D.h. du suchst
dort 3.69MHz aus, und es wird 3,6864MHz eingestellt. Die
Baudraten-Teiler und die genauen Frequenzen kannst du dem Datenblatt
entnehmen. Ich habe sie aus dem Datenblatt des AT90S8515 aus dem Kapitel
des UART entnommen (Seite 58).
Hast du sonst noch irgendwelche Probleme mit den AVR's?
Gruß Matthias
Hallo,
ich habe auch eine Frage zum UART.
Ich habe das SENDEN schon hinbekommen (so wie im Tutorial beschrieben)
Aber wie empfange ich daten ?
Ist das auch so einfach?
jo
Axel
Hi Matthias,
richtige Probleme habe ich derzeit - glücklicherweise - nicht. Bin
darüber sehr überrascht. Hatte mir den Umstieg von der CControll auf den
AVR (und Assembler) viel schwieriger vorgestellt. Muß aber auch sagen,
dass der Support hier übers Forum echt gut ist.
Versuche mich als nächstes mal am DCF Empfänger. Befürchte, dass dann
wieder die problemlose Zeit vorbei ist....
Olli
OK. Bitte erklärt mir, wie man empfängt!
Senden ist ja wirklich einfach:
sbi UCSRB,TXEN ;TX aktivieren
ldi temp,4000000/(1200*16)-1 ;Baudrate 1200 einstellen
out UBRR,temp
; Ein "A" senden
ldi temp, 'A'
wait:
sbis UCSRA,UDRE ;Warten, bis UDR bereit ist
rjmp wait
out UDR, temp
jo
Axel
Hallo Axel,
im Anhang befindet sich ein von mir erstelltes Assemblerprogramm zum
senden und empfangen über den UART. Es empfängt ASCII-Zeichen("1..8")
und schalten die auf Leds, und sendet den Status der Taster.
Gruß Matthias