Mini USB zu UART Konverter + ATMega88 funktioniert nicht

#2948954
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
}
#2952777
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
#2952790
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!

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