Forum: Mikrocontroller und Digitale Elektronik 100nF Kondesator zwischen GND und VCC verursacht Störung auf UART


von Heleon (Gast)


Lesenswert?

Ich sende per UART an einen Tiny25 einige Bytes und lasse diese 
zurücksenden. Ich habe einen 100nF Kondensator (Farnell 1414664) 
zwischen GND und VCC geschaltet. Mit diesem kommen manche Bytes mit 
falschem Wert zurück, wenn ich den Kondensator entferne funktioniert es 
wunderbar. K

Kennt jemand dieses Problem?

von holger (Gast)


Lesenswert?

>Kennt jemand dieses Problem?

Ja, schliess den Kondensator an den richtigen Pins an;)

von Heleon (Gast)


Lesenswert?

Ist an PIN4 (VCC) und PIN8 (GND) angeschlossen. Es ist ein Tiny25 mit 
SOIC Gehäuse, wäre doch richtig?

von Peter D. (peda)


Lesenswert?

Dem ATtiny25 mal nen Quarz spendieren, dann klappts auch mit der 
Baudrate.


Peter

von Ina (Gast)


Lesenswert?

>habe einen 100nF Kondensator (Farnell 1414664) zwischen GND und VCC >geschaltet. 
Mit diesem kommen manche Bytes mit falschem Wert zurück, >wenn ich den Kondensator 
entferne funktioniert es wunderbar.

Also, an der Betriebspannungsentkopplung liegt es garantiert nicht! 
Sitzt der Cap mit kürzesten Anschlüssen zwischen den VCC- und GND-Pins 
des µC?

von Bond (Gast)


Lesenswert?

Ich stimme dem Peter zu, Quarz verwenden.
Im Datenblatt sieht man die Abhängigkeit der Frequenz des internen
Oszillators von der Betriebsspannung (und der Temperatur).

Man kann, z.B. indem man bei einer "3"(x30) oder einem Blank (0x20)
die Highzeiten mißt eine Art "Autobaud-Funktion" erzeugen, und sich
der "Sendeseite" anpassen. Hilft oft, aber ein Quarz ist halt die
sauberere Lösung. Autobaurate funktioniert gut, die Grundidee
stammt aus einer Intel-App-Note zu Intels Basic-Chip 8052-Basic.

von Heleon (Gast)


Lesenswert?

Die PINS für einen externen Takt habe ich nicht zur Verfügung. Ich habe 
im Datenblatt gelesen, dass die genauikeit bis auf 3% gebracht werden 
kann. Die Spannung halte ich konstant auf 5V. Bei der Temperatur gehe 
ich von Zimmertemperatur aus, werde ich noch austesten was so 10Grad 
unterschied ausmacht.

Ich habe die Controller gestern gelötet und getestet. Mit meinem 
Hobbylötverfahren (Kochtop) wurden die Tinys etwas warm. Heute hat die 
Kommunikation ziemlich gut funktioniert.

Kallibrieren des Taktes werde ich machen und die automatische Variante 
scheint recht interesant zu sein.

Zudem habe ich auch die Möglichkeit zu prüfen ob ein Telegramm 
angekommen ist.
Mein Projekt: Ich schalte RGB Module mit einem Tiny in Serie (UART), ein 
Steuergerät schickt ein Befehl(Telegram) auf den ersten und gibt die 
Farbe für das RGB vor, dieses Telegram wird weitergeschickt bis es 
wieder beim Steuergerät ankommmt. So weis das Steuergerät welche Befehle 
korrekt angekommen sind, und kann allenfalls das Telegram wiederholen. 
Also so bei 80-90% korrekten Telegrammen bin ich schon zufrieden :-)

von Floh (Gast)


Lesenswert?

Heleon schrieb:
> Mein Projekt

Klingt irgendwie komisch, dafür eine Punkt-zu-Punkt-Verbindung zu 
mißbrauchen. Wäre I2C für sowas nicht besser?
Bräuchte erstens keinen genauen Takt, zweitens ist es ein Bus.
:-)

von Karl H. (kbuchegg)


Lesenswert?

Heleon schrieb:

> Also so bei 80-90% korrekten Telegrammen bin ich schon zufrieden :-)

Falsche Einstellung.
Wenn es sich um Störungen handelt, die ich nicht beeinflussen kann, dann 
kann ich nichts machen und muss sehen, wie ich damit zu recht komme. 
Wenn ich es allerdings selbst in der Hand habe eine 100% sichere 
Kommunikation aufzubauen, dann ist alles unter 100% nicht akzeptabel.

Es ist immer einfacher, Fehler gar nicht erst enstehen zu lassen als 
Fehler hinterher aufwändig auszubügeln. Und es ist nicht nur einfacher, 
es ist auch zuverlässiger.

von Andreas H. (andreas_h16)


Lesenswert?

Hmm, zu Deinem C Problem kann ich nichts sagen (Außer, daß meine ATmegas 
ohne Quarz und 9600 Baud recht gut + temperaturstabil laufen (Glück?)).

Allerdings halte ich die Tote Ring Simulation überdenkenswert. Warum 
nicht parallel und mit Dioden und Pull-Up entkoppeln.

So kann man Broadcasten, Gruppen und einzeln adressieren. Ein Ausfall 
eines Teenies hat da auch weniger Konsequenzen und die Fehlersuche ist 
da evtl. leichter.

Wenn es einen Master gibt, dann ist das Protokoll auch relativ einfach 
zu bauen.

MfG,
Andreas

von Heleon (Gast)


Lesenswert?

Ja da hast du recht, ich möchte die Übertragung natürlich möglichst 
zuverlässig haben. Darum werde ich jetzt mal die Idee mit der 
automatischen kallibrierung prüfen.

Ich habe auch eine I2C Version programmiert, nachteil ist die maximale 
Leitungslänge.

von Dietmar (Gast)


Lesenswert?

Schon mal über ein Master/Slave System über RS485 nachgedacht?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Heleon schrieb:
> Ich habe auch eine I2C Version programmiert,
> nachteil ist die maximale Leitungslänge.
Hast du da mal Zahlen?
Wenn du "nur" TTL-Pegel verwendest: was soll an der I²C Leitungslänge 
anders sein als an der RS232 Leitungslänge?

Und wie üblich: lies einfach mal deine Fragestellung so durch, wie wenn 
du von deinem Problem nichts wüsstest (so gehts nämlich allen anderen). 
Wenn dann alles Nötige gesagt, beschrieben und damit klar ist: Absenden.

von Michael (Gast)


Lesenswert?

Bond schrieb:
> Im Datenblatt sieht man die Abhängigkeit der Frequenz des internen
> Oszillators von der Betriebsspannung (und der Temperatur).
Mit welcher Taktfrequenz kommen denn bei dir die Bits aus der Leitung 
des Tiny. Hast du die mal nachgemessen, wo du da in den zulässigen 
Toleranzen zu deiner Datenquelle liegst, bevor du die Abhängigkeit von 
Betriebsspannung und Temperatur als Fehler höherer Ordnung analysierst.

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.