PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Uart-Sendeproblem



eXe
06.12.2004, 20:59
Hallo,

habe einen µC (AVR AT90S8535) und möchte damit Daten an meinen PC über die Serielle senden.
Habe mir also erstmal ein ganz einfaches Programm geschrieben, in dem ich ein Byte andauernd sende. Allerdings kommt am PC nicht das an, was ich eigentlich sende.

Hier der Code:

.INCLUDE "D:\Programme\AVR Studio\Appnotes\8535def.inc"
.DEF temp = R16
.DEF data = R17

.EQU clock = 8000000
.EQU baud = 2400
.EQU ubrrval = clock/(baud*16)-1

reset:
;Stackpointer initialisieren
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp

;LED konfiguration
ldi temp, 0x04
out DDRA, temp
ldi temp, 0x00
out PORTA, temp

;Baudrate einstellen
ldi temp, ubrrval
out UBRR, temp

;Uart RX und RXInt aktivieren
sbi UCR, TXEN
ldi data, 0x1C

loop:
sbis USR, UDRE ;überspringe wenn bereit
rjmp loop

out UDR, data
rjmp loop

Und ein paar meiner Ergebnisse, wobei oft zwei verschiedene Bytes in unterschiedlichen Reihenfolgen empfangen werden:

Register im Programm -> Empfangen am PC
0F -> C8 oder D8
0E -> 88 oder 98
0D -> 48 oder 58
0C -> 08 oder 18

1F -> E4 oder F4
1E -> 44
1D -> A4 oder B4
1C -> 84

Kann auch noch weitere Ergebnisse ermitteln, wenn es helfen würde.

Hat vielleicht jemand eine Idee? Könnte das an der Hardware, Software oder an der Konfiguration liegen?

Danke im Voraus,
eXe

Pascal
06.12.2004, 21:33
ich geh jetzt mal davon aus, dass du die Schaltung richtig aufgebaut hast, mit MAX232 oder ähnlich
welchen Quartz oder Quartzoszillator verwendest du am µC und hast du diesen per Fusebits aktiviert?
hast du am PC dieselbe Baudrate angegeben?

eXe
07.12.2004, 20:29
Die Baudrate ist richtig eingestellt.
Soweit ich weiß, ist ein 8MHz Quartz drauf, genaueres kann ich noch nicht sagen, da ich das Ding nicht selbst zusammengebaut habe. Kannst du mir denn mal sagen, wie ich das mit den Fusebits aktiviere bzw. welches ich ein-/ausstellen muss. Habe im Datenblatt irgendwie nichts gefunden.

Gruß,
eXe

Pascal
07.12.2004, 22:14
da benutzt du am besten die Forensuche, da findest du sicher was, in einem der letzten Threads darüber hat Frank das ganze sehr schön erklärt(und mit Bildern verdeutlicht)

eXe
08.12.2004, 19:43
Erstmal danke für die Antworten. Habe es jetzt hinbekommen.
Es lag an dem Quartz (war ein guter Tipp), das war nämlich ein 7,3728MHz und kein 8MHz. Nachdem ich den Konstrukteur gefragt hatte wusste ich dann, wo dieser zu finden war und habe es dann gesehen.

eXe
08.12.2004, 19:48
Habe noch etwas zu ergänzen:

Der AVR AT90S8535 läuft immer mit der Frequenz, die per Quartz reingeht. Da lässt sich also nichts mit Fusebits rumstellen.

Gruß,
eXe