Hallo,
habe hier ein USB-to-UART-Modul mit CP2102 von Silabs.
Es funktioniert ziemlich unzuverlässig.
Mir ist aufgefallen, dass auf dem Modul gar kein Quarz verbaut ist.
Woher bezieht der CP2102 dann seinen Takt?
Kann man allgemein sagen, dass ein solches Modul mit einem CP2102 ohne
12MHz-Quarz sehr viel unzuverlässiger arbeitet als ein Modul mit einem
CH340G und einem 12MHz-Quarz?
Steff schrieb:> Woher bezieht der CP2102 dann seinen Takt?
Aus dem USB selbst. Mit den SOF Tokens, die jede ms ankommen, wird eine
PLL synchronisiert. Das ist für USB genau genug.
Die CP2102 hier waren eigentlich ganz zuverlässig, mit welchen
Parametern arbeitest Du?
Mit dem Stein hatte ich 2014 schon Probleme:
Beitrag "RS232 Daten in Datei Aufnehmen bei 921600 Baud."
Mittlerweile verwende ich überall FT232R (mit PySerial) und bin
zufrieden. Da laufen Übertragungen mehrere Monate durchgehend bei 921600
Baud fehlerfrei.
Jim M. schrieb:> Die CP2102 hier waren eigentlich ganz zuverlässig, mit welchen> Parametern arbeitest Du?
8N1, 9600
dummschwaetzer schrieb:> Was ist unzuverlässig?
Mal ging es, mal nicht (aktuelle geht es gar nicht)
> Schaltplan?
Rx an Tx, Tx an Rx, GND an GND, Atmega hat seine eigenen 5V.
> Welche Kabel in welcher länge?
Kabel zum Modul ca. 10cm, USB-Kabel ca. 150cm
> HUBs dazwischen?
nein
Modul wird von Win als COM3 erkannt.
dummschwaetzer schrieb:> wenn ich mich recht erinnere hat der CPxxxx 3,3V Logik.
Sieht wohl so aus:
https://www.mikrocontroller.net/attachment/478966/cp2102.png
(rechte Spalte unter Supply Voltage)
Kann ich den Atmega einfach auf 3,3V runterfahren und dann passt es?
(bei der Versorgungsspannung ist das Projekt flexibel, habe 3,3V und 5V
zur verfügung)
>Kann ich den Atmega einfach auf 3,3V runterfahren und dann passt es
ja.
du könntest den ATMega auch vom PIN 6 des CPxxxx(VDD) speisen.
Falls nicht, aus eigener Erfahrung: Mach Serienwiderstände in die TX und
RX Leitung. Ich hatte mal mit einem MSP430 einige Probleme(LatchUp?)
wenn die USB-Spannung bereits da war, der MSP aber noch keine Spannung
hatte.
dummschwaetzer schrieb:> du könntest den ATMega auch vom PIN 6 des CPxxxx(VDD) speisen.> Falls nicht, aus eigener Erfahrung: Mach Serienwiderstände in die TX und> RX Leitung.
Beides gut zu wissen. Der Atmega wird nun mit externen 3,3V betrieben
und die Datenübertragung funktioniert weiterhin :)
Noch etwas, weil ich mit itoa den Inhalt einer Variablen (uint16_t)
ausgeben möchte, habe ich mich hieran orientiert:
1
#include<stdlib.h>
2
charBuffer[20];
3
inti=25;
4
5
itoa(i,Buffer,10);
6
uart_puts(Buffer);
Das funktioniert auch so weit, zwei Dinge sind aber noch unklar.
1. char Buffer[20]; - Bedeutet die 20, dass maximal 20 Ziffern möglich
sind?
2. itoa( i, Buffer, 10 ); - Was bedeutet hier die 10?
Danke A. Fanboy!
Steff schrieb:> 2. itoa( i, Buffer, 10 ); - Was bedeutet hier die 10?
10 = Variable i wird in Dezimal-String umgewandelt
------------------------------------------------------------------------
-
16 an der Stelle wäre: Variable i wird in Hexadezimal-String umgewandelt
2 an der Stelle wäre: Variable i wird in Binär-String umgewandelt
8 an der Stelle wäre: Variable i wird in Oktal-String umgewandelt