Hallo, ich habe folgendes Problem. Ich empfange über die interne UART Schnittstelle an einem atmega328PB vier Byte. Laut Datenblatt versorge ich den Controller mit 5V. Bei dieser Spannung werden die Daten falsch eingelesen, nur durch Zufall werden mal die Richtigen empfangen. Senke ich die Versorgungsspannung auf unter 5V (z.B. 4V) funktioniert alles einwandfrei. Habe schon zig verschiedene PBs getestet, immer gleich. Kann sich jemand so ein Verhalten erklären?
Die Quelle arbeitet mit welcher Signalspannung? Sind die GND von Quelle und 328 vernünftig verbunden? mfg mf
Ja sind sie. Die Quelle versorgt den PB über ein dreiadriges Kabel mit den 5V.(GND/5V/SIG)
Hallo, passt denn die unbekannte Baudrate zum internen oder externen Takt, und ist das serielle Datenformat, z.B. 8-n-1, korrekt eingestellt. Wenn die Veränderung der Versorgungsspannung den internen Taktoszillator verstellt und es dann passen sollte, dann stimmen vielleicht auch einige Fuse-Bits nicht.
Also er die Baudrate ist 9600 und beide laufen mit 8MHz interner Oszillator (atmega8A Sender, atmega328PB Empfänger)
Noch was, ein 8A als Empfänger funktioniert mit allen Spannungen fehlerfrei, nur der PB nicht
Teste mal mit 8N2 senden, mit 8N1 empfangen - was passiert dann? Was passiert, wenn Du die Bitrate deutlich runter setzt, z.B. auf 9600 bps?
Wie geschrieben intern 8 MHz. Eine Änderung der Baudrate etc. verändert leider nichts..
Bernd schrieb: > Also er die Baudrate ist 9600 und beide laufen mit 8MHz interner > Oszillator (atmega8A Sender, atmega328PB Empfänger) Na schön, da kannst du mit der Versorgungsspannung schön einstellen ob und wenn das eventuell mal für einen kurzen Zeitraum funktionieren soll. Die Spannung »trimmt« den internen Oszillator so das per glücklichem Zufall gelegentlich die Baudraten stimmen. Kurz zusammengefasst: Ganz schlechte Idee.
Also unter 5V geht es immer (hundertmal schon probiert). Auch egal ob 3V oder 4,5V, immer fehlerfrei. Ab 5V geht es nicht mehr (ist die Ausgangsspannung des vorgeschalteten LDO). Das Signal (Oszi) am RXD Pin ist bis auf den Pegel auch identisch bei allen Eingangsspannungen so wie es sein soll.
Noch eine neue Erkenntnis. Ein PB als Sender und Empfänger geht auch immer mit allen Spannungen. Nur die Kombi 8A Sender und PB Empfänger läuft nur unter 5V.
Bernd schrieb: > Noch eine neue Erkenntnis. Ein PB als Sender und Empfänger geht auch > immer mit allen Spannungen. Nur die Kombi 8A Sender und PB Empfänger > läuft nur unter 5V. Nimm einen Föhn und erwärme mal einen der Controller in der "funktionierenden" Schaltung. Funktioniert sie dann immer noch? Verwende einfach für beide (Baudraten-)Quarze, und du hast keine Spannungsabhängigkeit der Oszillatoren mehr,
Externe Quarze geht leider nicht mehr. Habe sehr viele bestückte Platinen in dieser Variante.... Bei der Erwärmung passiert nichts.
Bernd schrieb: > Habe sehr viele bestückte > Platinen in dieser Variante. Na dann ›Viel Glück‹ ›Diese Wolke nehme ich noch mit‹ dachte der Fallschirmspringer als er in den Bodennebel eintauchte.
Wenn Sender und Empfänger beide mit 5V versorgt werden und TxD direkt mit RxD verbunden ist, also ohne Spannungsteiler oder ähnlichem, kann ich mir nur den RC-Oszillator des Empfängers als Ursache vorstellen. Kannst Du nicht versuchsweise mal von beiden MCUs ein aus dem internen Takt abgeleitetes Signal ausgeben und mit einem Zähler sauber ausmessen? Ansonsten gäbe es noch die Möglichkeit des Trial-&-Error-Vorgehens, indem Du das OSCCAL-Register des Empfängers schrittweise erhöhst oder verminderst, siehe Datenblat: 9.12.1 OSCCAL – Oscillator Calibration Register The Oscillator Calibration Register is used to trim the Calibrated Internal RC Oscillator to remove process variations from the oscillator frequency. A pre-programmed calibration value is automatically written to this register during chip reset, giving the Factory calibrated frequency as specified in Table 29-9 on page 304... Grüßle, Volker
:
Bearbeitet durch User
Wenn der interne Oszillator korrekt getrimmt ist, sind die 0.2% Bauratenfehler sicher kein Problem (Table 24-8. Examples of UBRRn Settings for Commonly Used Oscillator Frequencies) Aber je nach Betriebsspannungsbereich und Temperatur muss der interen Oszillator selber getrimmt werden um auf kleiner 3% zu kommen (Calibrated Internal RC Oscillator Accuracy Table 33-4. Calibration Accuracy of Internal RC Oscillator) https://ww1.microchip.com/downloads/en/DeviceDoc/40001906C.pdf trotzdem sicherheitshalber die Frage - was sagt das Oszi? sicher dass die Signalpegel und Flankensteilheit passen? und bei der Gelegenheit einfach gleich die Bitdauer messen... funktionieren zwei ATmega328PB miteinander?
Alles klar werde ich versuchen, danke! Ja zwei ATMEGA328PB funktionieren bei allen Spannungen einwandfrei.
Ein ATMEGA328PB als Sender und ein ATMEGA8A als Empfänger geht auch immer, nur 8A Sender und PB Empfänger klappt nicht.
Schauen Sie sich einmal in den beiden Datenblättern das Diagramm 'Calibrated 8 MHz RC Oscillator Frequency vs. VCC' an.
So ad hoc würde ich vorschlagen, erstmal den ATmega8A per OSCCAL auf 8.0 MHz bei 5.0 V zu trimmen; bei diesem ist laut Datenblatt die Abweichung am größten.
Super Tipp, danke! Hätte ich nicht damit gerechnet, dass es da so eine Abweichung gibt. Das ist hier wohl mein Problem :)
Bernd schrieb: > Habe sehr viele bestückte Platinen in dieser Variante Einer der beiden μC muss dann der Master werden und regelmäßig eine Uart-Takt-Rekalibrierungssequenz ausspucken. Wie beim LIN-Bus. Die Slaves vermessen diese Sequenz und stellen ihren UART-Vorteiler entsprechend ein. mfg mf
:
Bearbeitet durch User
Man bekommt so eine leichte Verschiebung recht gut diagnostiziert, wenn man das 9. Datenbit hinzunimmt und immer als 0 sendet. Beim Empfänger kommt dann entweder das offizielle FrameError-Flag, wenn der Sender zu langsam sendet (9. Datenbit landet im Stop-Bit) oder Das 9. Bit wird als 1 empfangen, wenn der Sender zu schnell sendet (Stopbit landet im 9. Datenbit) Entsprechend kann man dann das Baudratenregister entweder tunen oder anhand von Synchronisationsbytes (typ. 0xAA) die Bits einzeln ausmessen und die korrigierte Baudrate neu berechnen. Das geht dann auch über den gesamten Temperatur- und Spannungsbereich.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.