Probleme UART-TTL-Konverter

Gast #4989255
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
Gast #4989428
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
Gast #4989468
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.
Gast #4990449
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren