Forum: Mikrocontroller und Digitale Elektronik FT232RL überträgt sporadisch ACSII Zeichen falsch


von Daniel W. (ext23)


Angehängte Dateien:

Lesenswert?

Hallo,

ich komme irgendwie mit dem FT232RL nicht zurecht. Ich habe eine kleine 
Schaltung mit der ich Funksteckdosen schalten möchte entworfen. Dazu 
sende ich an die Schaltung ASCII Befehle mit Putty an den VCP. Senden 
scheint auch immer zu funktionieren, sogar das Flashen über einen 
Bootloader funktioniert ohne Probleme. Mit dem Empfangen vom µC habe ich 
aber Probleme. Es kommt hier teilweise nur optischer Matsch im Terminal 
an. Manchmal geht es manchmal nicht. Die ersten Buchstaben stimmen meißt 
noch, aber dann folgt nur wirres Zeug. Ich habe schon den Gehäuseschirm 
der USB Buchse mit GND verbunden (am Endgerät) wie hier im Forum 
vorgeschlagen wurde (Mein Hub macht das nicht ...) Jedoch war das auch 
nur kurz vom Erfolg gekrönt. Normalerweise wird ein Schirm auch nur 
einseitig aufgelegt, aber mein Hub scheint das nicht zu machen (Ich habs 
mal durchgemessen) Ab und an habe ich auch Probleme das Windows das 
Gerät an einigen Ports nicht erkennt aber das würde ich jetzt erstmal 
auf ein schlechtes Kabel schieben, obwohl ich das nicht glaube.

Kann mir hier noch jemand ein Tip geben? Ich habe Schaltplan und Board 
angehangen. Der µC läuft mit 8 MHz und 9600 Baud und ich habe es so 
gemacht wie im GCC Tut beschrieben, also:
1
#ifndef F_CPU
2
#define F_CPU 8000000UL     // Oszillator-Frequenz in Hz
3
#endif
4
#define BAUD 9600UL        // Baudrate
5
6
// Berechnungen für UART
7
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
8
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
9
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD)     // Fehler in Promille, 1000 = kein Fehler.
10
 
11
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
12
  #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! 
13
#endif 
14
15
// Initialisierung der UART
16
void uart_init(void)
17
{
18
    UCSRB |= (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);  // UART RX, TX und RX Interrupt einschalten
19
    UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);  // Asynchron 8N1 
20
    UBRRH = UBRR_VAL >> 8;            // Baudrate
21
    UBRRL = UBRR_VAL & 0xFF;          // Baudrate
22
}

Das sollte doch so passen oder? Wenn ich wenigstens wüsste ob das an der 
Baudrate liegt oder an irgend welchen EMV Probleme des FT controllers.

von Karl H. (kbuchegg)


Lesenswert?

Daniel Wilhelm schrieb:

> Bootloader funktioniert ohne Probleme. Mit dem Empfangen vom µC habe ich
> aber Probleme. Es kommt hier teilweise nur optischer Matsch im Terminal
> an. Manchmal geht es manchmal nicht. Die ersten Buchstaben stimmen meißt
> noch, aber dann folgt nur wirres Zeug.

Könnte ein Hinweis darauf sein, dass die Baudrate nicht 100% stimmt.

> #ifndef F_CPU
> #define F_CPU 8000000UL     // Oszillator-Frequenz in Hz
> #endif

Wenn das der interne Oszillator ist, dann hast du hier bereits einen 
Fehler-Kandidaten. Der interne Oszi läuft dir mit steigender 
Chip-Temperatur davon und schon stimmt die Baudrate nicht mehr gut 
genug.

von Daniel W. (ext23)


Lesenswert?

Mhh ok, das heißt ich sollte zum test mal ein Quarz rannhängen und 
schauen wie es sich verhält richtig?

Ich hab hier noch ein 14,7456 MHz Quarz, damit sollte man ja alle Baud 
eventualitäten ausschließen können, den werd ich mal versuchen in meiner 
Schaltung provisorisch einzulöten. Danke ersmal für diesen Tip!


Noch was vergessen, die Spule ist übrigens eine BLM21A601SPT von Segor. 
Die wurde mir zumindest dort empfohlen weil andere Bastler die auch 
verwenden und keine Probleme damit hatten. So ganz weiß ja irgendwie 
sonst niemend was man da für eine Spule benutzen soll, viele nutzen ja 
garkeine...

von Matthias (Gast)


Lesenswert?

Daniel Wilhelm schrieb:
> Mhh ok, das heißt ich sollte zum test mal ein Quarz rannhängen und
> schauen wie es sich verhält richtig?

Warum schaltest du nicht den Takt vom FT232RL auf einen der CBUS-Pins 
und verwendest den für den µC?

von Daniel W. (ext23)


Lesenswert?

Mhh kann man das so ohne weiteres an die XTAL eingänge des Atmega8 
klemmen? Das wäre natürlich auch ne Idee, der hat 12 MHz wenn ich mich 
nicht irre oder, bei USB war das doch immer so?

Danke erstmal für die ganzen Tips, da kann ich ja noch ein bissel 
rumspielen wie ich feststelle ...

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.