Guten Abend,
ich habe eine Schaltung mit einem Atmega8 uC aufgebaut und will Daten
mit UART an den PC schicken. Da ich keine RS-232 Schnittstelle habe,
habe ich einen FTDI FT232RL Driver angeschlossen. Der Simuliert am USB
eine RS-232 Schnittstelle. Einen MAX232 benötige ich dann ja nicht mehr,
weil der ja schon mit 5V vom USB aus arbeitet. Jedenfalls habe ich
versuchshalber den Quellcode aus euerm Tutorial ausprobiert und auf
hTerm bekomme ich nur kryptische Zeichen. Ein totales durcheinander.
1
.include "m8def.inc"
2
3
.def temp = r16 ; Register für kleinere Arbeiten
4
.def zeichen = r17 ; in diesem Register wird das Zeichen an die
.error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!"
17
.endif
18
19
; Stackpointer initialisieren
20
21
ldi temp, HIGH(RAMEND)
22
out SPH, temp
23
ldi temp, LOW(RAMEND)
24
out SPL, temp
25
26
; Baudrate einstellen
27
28
ldi temp, HIGH(UBRR_VAL)
29
out UBRRH, temp
30
ldi temp, LOW(UBRR_VAL)
31
out UBRRL, temp
32
33
; Frame-Format: 8 Bit
34
35
ldi temp, (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)
36
out UCSRC, temp
37
38
sbi UCSRB,TXEN ; TX aktivieren
39
40
loop:
41
ldi zeichen, 'T'
42
rcall serout ; Unterprogramm aufrufen
43
ldi zeichen, 'e'
44
rcall serout ; Unterprogramm aufrufen
45
ldi zeichen, 's'
46
rcall serout ; ...
47
ldi zeichen, 't'
48
rcall serout
49
ldi zeichen, '!'
50
rcall serout
51
ldi zeichen, 10
52
rcall serout
53
ldi zeichen, 13
54
rcall serout
55
rcall sync
56
rjmp loop
57
58
serout:
59
sbis UCSRA,UDRE ; Warten bis UDR für das nächste
60
; Byte bereit ist
61
rjmp serout
62
out UDR, zeichen
63
ret ; zurück zum Hauptprogramm
64
65
; kleine Pause zum Synchronisieren des Empfängers, falls zwischenzeitlich
66
; das Kabel getrennt wurde
67
68
sync:
69
ldi r16,0
70
sync_1:
71
ldi r17,0
72
sync_loop:
73
dec r17
74
brne sync_loop
75
dec r16
76
brne sync_1
77
ret
Ich verwende einen 16MHz Quarz, entsprechende Fuse-Bits müssten richtig
gesetzt sein. Ist vielleicht der Systemtakt falsch oder muss ich im Code
noch etwas ändern? Ein Oszilloskop besize ich leider (noch) nicht.
Danke im Voraus! Gute Nacht!
Habe schon alle möglichen Einstellungen ausprobiert, aber immer noch
kommt nur Zeichensalat. Was gibts an hTerm außer der Baudrate noch groß
zu konfigurieren?
Kann es sein, dass der FT232RL die Signale irgendwie verändert, z.B.
negiert?
Hast du mal den originalen FTDI-Treiber mal ausprobiert/installiert?
Außer im Zusammenhang mit Elektrostatik habe ich mit den Teilen noch nie
Probleme gehabt.
Ist eventuell die COM-Port-Nummer aus den Ruder gelaufen? Bei jedem
neuen USB-Seriell-Wandler wird der zugeordnete Port erhöht. Wenn mich
nicht alles täuscht bis COM99. Damit haben allerdings manche Programme
Schwierigkeiten, wenn sie nur einstellige Ports vorgesehen haben.
Der richtige Treiber läuft und die Port-Nummer ist COM2.
Eigentlich alles richtig eingestellt und trotzdem kommen nur Vierecke
und anderer Salat im Terminal!???
Kreise den Fehler ein, anstatt herum zu raten. Vorschlag:
Nimm den AVR aus dem Sockel heraus und stecke eine Drahtbrücke von RxD
nach Txd. Sende damm im Terminal Programm ein paar Zeichen und prüfen,
ob sie als Echo zurück kommen.
Wenn DU dann immer noch falsche Zeichen empfängst, dass liegt das
Problem nicht beim AVR.
Daniel schrieb:> Wenn du einen 16MHz Quartz hast, musst du "F_CPU" auch entsprechen>> einstellen (16000000)!!!
den Hinweis schon beachtet? Hier wird dein Problem liegen. Das musst du
im Code ändern
Ich habe alles im Code geändert, mit verschiedenen Einstellungen am
Quarz experimentiert, verschiedene Baud-Raten eingestellt, den internen
RC-Resonator ausprobiert... nichts hilft.
Wenn ich TXD und RXD verbinde empfange ich richtige Symbole. Ich probier
jetzt noch einen anderen Atmega8 aus und wenn das dann immer noch nichts
bringt hab ich halt pech.
Trotzdem Danke für eure Bemühungen!!!
DeepSpace schrieb:> Kann es sein, dass der FT232RL die Signale irgendwie verändert, z.B.> negiert?
Ja, das kann man eistellen !!!
Hole dir die geeignete Software FT_PROG von FTDI und schau nach !
Oh mann,
die Aus- und Eingänge waren negiert und noch einige andere Einstellung
daneben geraten!!! Jetzt kommt das was ich wollte!
Vielen Dank für eure umfangreiche und schnelle Hilfe!!! Hochachtung...!