Forum: Mikrocontroller und Digitale Elektronik Mini USB zu UART Konverter + ATMega88 funktioniert nicht


von Timo B. (shortcircuit)


Lesenswert?

Hallo Leute,

nach langer - leider erfolgloser - Suche (auch hier im Forum) habe ich 
mich entschlossen mein Problem mal zu posten.

Vorab die Daten:
Controller: ATMega88A
Quarz: extern, 20MHz
Konverter: Mini USB zu UART Converter (der von Conrad)
Übertragungseinstellungen: sämtliche probiert...
Terminal: hterm

Also ich habe beim Konverter den RxD pin an den RxD Pin und den TxD Pin 
an den TxD Pin des Controllers gehängt. Zusatzlich habe die Pins am 
Koverter kurgeschlossen, um den 5V TTL Pegel zu aktivieren. Das habe ich 
bereits mehrfach geprüft.
Der Konverter ansich funktioniert auch, den habe ich mit hterm schon 
mehrfach getestet.
Der Controller taktet auch mit 20MHz (hab ich überprüft). Auch das 
Austauschen des Controllers habe ich schon versucht.

Ich weis nicht genau, ob der Controller Zeichen empfängt... aber mir 
geht es erst mal um das Senden von Daten.
Wenn ich in der Schleife nun die ganze Zeit ein 'X' sende, messe ich am 
TxD Pin des Controllers zwar permanent TTL-Signale (mithilfe eines 
Oszis), aber am PC kommt so wie es aussieht nichts an.
Mein hterm bekommt es auf jeden Fall nicht mit.

Ich habe schon sämtliche Baudraten von 2400 bis 115200 versucht mit 1 
und 2 Stoppbits, aber nie etwas empfangen...

Weis jemand woran das noch liegen kann?

Ich habe auch schon 1:1 Quellcode aus dem Datenblatt probiert. 
Erfolglos.

Hier der Aktuelle Quellcode:
1
#include <avr/io.h> 
2
3
#ifndef MCU
4
  #define MCU ATmega88
5
#endif
6
7
#ifndef F_CPU
8
  #define F_CPU 20000000 
9
#endif
10
11
#define BAUD 9600
12
13
#include <util/setbaud.h>
14
#include <util/delay.h>
15
 
16
void uart_init(void)   
17
{
18
  UBRR0 = UBRR_VALUE;
19
   
20
   /* evtl. verkuerzt falls Register aufeinanderfolgen (vgl. Datenblatt)
21
      UBRR = UBRR_VALUE;
22
   */
23
#if USE_2X
24
   /* U2X-Modus erforderlich */
25
   UCSR0A |= (1 << U2X0);
26
#else
27
   /* U2X-Modus nicht erforderlich */
28
   UCSR0A &= ~(1 << U2X0);
29
#endif
30
31
  UCSR0B = (1<<RXEN0)|(1<<TXEN0);  // UART RX, TX und RX Interrupt einschalten
32
  UCSR0C = (1<<USBS0)|(1<<UCSZ00);      // Modus auf 8 Datenbit und 2 Stoppbit setzten
33
}
34
35
int uart_putc(unsigned char c)
36
{
37
    while (!(UCSR0A & (1<<UDRE0)))  /* warten bis Senden moeglich */
38
    ;    
39
 
40
    UDR0 = c;                      /* sende Zeichen */
41
    return 0;
42
}
43
44
unsigned char uart_getc(void)
45
{
46
    while (!(UCSR0A & (1<<RXC0)))   // warten bis Zeichen verfuegbar
47
        ;
48
    return UDR0;                   // Zeichen aus UDR an Aufrufer zurueckgeben
49
}
50
51
int main(void)
52
{  
53
  uart_init();
54
    
55
    while(1)
56
    {  
57
        uart_putc('X');
58
  _delay_ms(100);
59
    }
60
}

von Thomas K. (t-kofler)


Lesenswert?

Timo B. schrieb:
> Also ich habe beim Konverter den RxD pin an den RxD Pin und den TxD Pin
> an den TxD Pin des Controllers gehängt.

Vertauschen von Tx und Rx sollte helfen.

von Christian F. (funke4ever)


Lesenswert?

Sollte nicht TxD mit Rxd verbunden werden? Ich kenn das Teil von Conrad 
zwar nicht, aber bei UART-Schnittstellen ist das so üblich.

von Timo B. (shortcircuit)


Lesenswert?

http://www.produktinfo.conrad.com/datenblaetter/175000-199999/197326-an-01-de-MINI_USB_TO_UART_CONVERTER_de_en_fr_nl.pdf
OMG die Pfeile sagens ja...
ich dacht dass hätte der Konverter schon umgedreht.

Danke.

von René B. (reneb)


Lesenswert?

Wo du das Ding schonmal vor dir hast...
Kannst du mal draufschaun was für in IC verwendet wird? Wurde da ein 
Cypress, Silabs oder FTDI-Treiber installiert bzw. kannst du die 
Beschriftung auf dem IC lesen?

von Daniel D. (__daniel__)


Lesenswert?

Es ist einer von Silabs (CP2102).

Ich bin gerade am rumtesten damit und rege mich die ganze Zeit schon 
darüber auf, dass es erst einwandfrei, ohne Datenverlust, an meinem PC 
funktioniert, dann teste ich die UART am Laptop --> Plötzlich wird 0xFF 
gesendet statt des eigentlichen Paketes, dann kommen wieder 6 Pakete 
richtig an, dann wieder 0xFF oder irgendwas anderes. Und jetzt geht es 
auch an meinem PC nicht mehr.

Ganz seltsam. Ich habe schon mal zu diesem Converter etwas über 
EMV-Probleme gelesen und vermute, dass es daran liegt. Wenn ich meine 
Schreibtischlampe an und aus schalte, werden jedenfalls auch ganz wirr 
Zeichen gesendet.
Eine Veränderung der BAUD-Rate ändert nichts an dem Problem. Außerdem 
verwende ich einen Baudratenquarz.

Hat jemand mit sowas schon Erfahrungen gemacht und kann erahnen an was 
das sonst liegen kann? ( bzw. mit dem Converter? )


Viele Grüße,


Daniel

von Daniel D. (__daniel__)


Lesenswert?

JETZT gerade habe ich noch etwas (die (eher unbefriedigende) Lösung 
herausgefunden. Etwas ganz seltsames. BITTE UM HILFE!!


Info: ich benutze das STK500, habe da einen ATmega32 und den Quarz 
drauf. Von dem STK500 gehe ich zu dem UART-Converter und dem Rest meiner 
Schaltung. Soweit so gut.

Also --->
Wenn ich jetzt das Programmierkabel (über das ich die Verbindung zum 
AVR-Studio bekomme) vom STK500 aus der RS232 Schnittstelle ziehe, also 
die Verbindung zwischen PC und STK500 trenne, dann habe ich diese großen 
Übertragungsfehler. Wenn jedoch das Kabel gesteckt ist, dann 
funktioniert alles wunderbar. Dabei ist es egal ob ich es direkt über 
die serielle Schnittstelle (mein Laptop besitzt noch eine solche) oder 
über einen USB-Converter anschließe. Es funktioniert immer zuverlässig. 
Ohne Kabel NICHT.

Kennt jemand dieses Phänomen? Was passiert denn da in bzw mit dem STK500 
wenn über ??

Hoffe auf Hilfe!

von g457 (Gast)


Lesenswert?

> Kennt jemand dieses Phänomen?

Gnd nicht verbunden an der UART?

von Daniel D. (__daniel__)


Lesenswert?

Tatsache! Vielen lieben Dank!

Und ich dachte schon ich stünde vor einem unlösbaren Problem :)

Der UART-USB-Converter hat auch noch einen PIN an dem die USB-Spannung 
herausgeführt wird. Ich nehme an, damit kann man dann bei Bedarf seinen 
Controller versorgen.

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.