Forum: Mikrocontroller und Digitale Elektronik Probleme UART-TTL-Konverter


von Holger (Gast)


Lesenswert?

Hallo, ich habe mehrere dieser kleinen Konvertern (z.B. 
[[http://www.ebay.de/itm/FT232RL-FTDI-USB-zu-TTL-Serien-Converter-Adapter-Modul-5V-3-3V-Fur-Arduino-/322450824431?hash=item4b13911cef:g:nzkAAOSwCU1YxmEs]]).

Nun habe ich ein kleines Programm für den ATMEGA32 in Assembler 
geschrieben, welches einfach nur ein @ ausgibt. PD1 ist mit RX der 
Konverter-Platine verbunden. Und GND.

Aber: sobald ich PD0 mit dem TX der Konverter-Platine verbinde, 
funktioniert die Ausgabe nicht mehr. Das ist mit allen Konvertern die 
ich habe so ... Ziehe ich PD0 ab, geht es wieder. Auch streikt der 
AVR-ISP, wenn PD0 mit der Platine verbunden ist.

Unten mein Code. Ich habe kein RX programmiert.

Seltsam ...


Holger




1
.include "m32def.inc"
2
3
.DEF temp0      = r16
4
.DEF temp1      = r17
5
6
.equ F_CPU = 8000000
7
8
.equ BAUD  = 9600                               ;Baudrate
9
 
10
; Berechnungen
11
.equ UBRR_VAL   = ((F_CPU+BAUD*8)/(BAUD*16)-1)  ;clever runden
12
.equ BAUD_REAL  = (F_CPU/(16*(UBRR_VAL+1)))     ;Reale Baudrate
13
.equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000)  ;Fehler in Promille
14
 
15
.if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))       ;max. +/-10 Promille Fehler
16
.error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!"
17
.endif
18
19
.cseg
20
 
21
.org 0x0000
22
     rjmp    start
23
24
   
25
start:
26
    ;Stackpointer initialisieren 
27
    ldi     temp0, HIGH(RAMEND)
28
    out     SPH, temp0
29
    ldi     temp0, LOW(RAMEND)
30
    out     SPL, temp0
31
32
33
   
34
    ;Baudrate einstellen
35
    ldi     temp0, HIGH(UBRR_VAL)
36
    out     UBRRH, temp0
37
    ldi     temp0, LOW(UBRR_VAL)
38
    out     UBRRL, temp0
39
 
40
    ;Frame-Format: 8 Bit
41
    ldi     temp0, (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)
42
    out     UCSRC, temp0
43
 
44
    ;TX
45
    ldi     temp0, (1<<TXEN)
46
    out     UCSRB, temp0
47
48
  ldi    temp0, '@'
49
  rcall  serout_raw
50
51
52
start0:
53
  rjmp  start0
54
55
  
56
serout_raw:
57
  
58
serout_raw0:
59
  sbis  UCSRA, UDRE
60
  rjmp    serout_raw0
61
  out    UDR, temp0
62
  
63
          ret                      ;zurück zum Hauptprogramm

von Michael_O (Gast)


Lesenswert?

Miss doch mal mit dem DVM ob da 3,3V oder 5V aus dem TX kommen. Außerdem 
kannst Du auf der Controllerseite testen ob ein Verbindung zu VSS oder 
VDD das gleiche bewirkt, um dann den Fehler im Programm einzugrenzen.

mfg
Michael

von Walter S. (avatar)


Lesenswert?

Holger schrieb:
> PD1 ist mit RX der
> Konverter-Platine verbunden.

ist PD1 wirklich der UART?

von Holger (Gast)


Lesenswert?

Moin, beim ATMEGA32 ist PD0 RX und PD1 TX. Und am TX der Platine liegen 
5V bzw. 3 V an.


Holget

von Wolfgang (Gast)


Lesenswert?

Holger schrieb:
> Aber: sobald ich PD0 mit dem TX der Konverter-Platine verbinde,
> funktioniert die Ausgabe nicht mehr.

Setze einen Widerstand 1kΩ dazwischen. Dann kannst du unterscheiden, ob 
es ein HW- oder ein SW-Problem ist. Je nach dem, ob RX und TX auf der 
Konvertrerplatine aus Sicht des PC oder aus Sicht des angeschlossenen 
Gerätes beschriftet sind, liegt bei dir evtl. Ausgang auf Ausgang. Messe 
mit einem Multimeter zum FT232RL durch und gucke ins Datenblatt.

von Christian M. (Gast)


Lesenswert?

Wolfgang schrieb:
> aus Sicht des PC oder aus Sicht des angeschlossenen Gerätes beschriftet
> sind

Die sind richtig beschriftet, habe auch etliche von Denen. Der TO hat 
sie falsch angeschlossen, das findet er mit dem Tipp mit dem Widerstand 
schnell heraus!

Gruss Chregu

von Holger (Gast)


Lesenswert?

Moin, warum falsch angeschlossen? Das @ wird doch in HTERM dargestellt.


Holger

von Holger (Gast)


Lesenswert?

Wolfgang schrieb:
> Setze einen Widerstand 1kΩ dazwischen. Dann kannst du unterscheiden, ob
> es ein HW- oder ein SW-Problem ist.

So, 1KOhm dazwischen gesetzt. Ich erhalte nun beim Programmstart zwei 
mal 0. Ohne die Verbindung mein @.

Sprachlos ...


Holger

von Christian M. (Gast)


Lesenswert?

Holger schrieb:
> Das @ wird doch in HTERM dargestellt.

Na also, wo ist denn das Problem???

Gruss Chregu

von Holger (Gast)


Lesenswert?

Das Problem ist, dass sobald vom Konverter TX mit Pin PD0 verbunden 
wird, kein @ mehr ausgegeben wird.

Holger

von Christian M. (Gast)


Lesenswert?

Holger schrieb:
> Ich habe kein RX programmiert.

Ja eben!

Gruss Chregu

von Stefan F. (Gast)


Lesenswert?

Was soll "ja eben" heissen?

Das Programm aktiviert nur die Tx Funktion auf PD1 und keine Interrupts. 
PD0 ist auch nicht als Ausgang konfiguriert, als kein Kurzschluss.

Also sollte es völlig egal sein, was mit PD0 los ist.

> Und am TX der Platine liegen 5V bzw. 3 V an.

Welche Platine? Entweder 5V oder 3V, beides zusammen kann nicht sein. 
Also, welche Spannung liefert der UART an den Mikrocontroller. Mach das 
mit dem Widerstand dazwischen und messe auf beiden Seiten. Also von GND 
zum AVR Ende des Widerstandes und dann nochmal messen von GND zum UART 
Ende des Widerstandes.

Wenn dein AVR mit weniger als 5V versorgt wird und dein UART Adapter 5V 
auf einen I/O Pin gibt, dann kann schon alles Möglich passieren. Die 
Spannung darf an allen Pins nicht viel höher als VCC sein.

Die GND Leitungen aller Komponenten sind aber verbunden oder? Sorry für 
die blöde Frage, aber das ist wirklich ein häufiger 
Flüchtigkeits-Fehler.

von Holger (Gast)


Lesenswert?

Moin,

es läuft. Wo ist der Fehler? Ich habe Boards wie dieses 
[[https://www.ebay.de/p/?iid=172445284274&&&chn=ps]] und mit dem einen 
stimmt irgendetwas nicht. Ich habe den ATMEGA32 in ein anderes gesteckt, 
alles verkabelt und siehe da ... es läuft.

@Chregu
Du warst wirklich nicht hilfreich!


@Stefan Us
Tnx!


Holger

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.