Forum: Gesperrte Threads PCB: Atmega 328P-Au und DS3231 SN


von VELOSO (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

Ich arbeite grade an einem Projekt für meine Masterthesis, in der 4 
Reifeneinheiten mit einer Zentraleinheit über einen 433 MHz Band 
kommunizieren.

Hierbei spielt die Echtzeit-Fähgikeiten unseres Systems eine bedeutende 
Rolle, welches bis jetzt durch einen nicht auf die Platine gelöteten RTC 
DS3231 Shield (Modul) (mit AT24C32 EEPROM und Batterie etc.) 
gewährleistet wurde. Diesen Shield sollte ich jetzt im Schaltplan 
integrieren, sodass nur die RTC berücksichtigt wird.

Ich habe den Schaltplan soweit fertiggestellt und den AT24C32 und die 
Batterie des Shields nicht berücksichtigt.

Nachdem ich alle Bauteile auf die Platine gelötet und den Code auf den 
uC hochgeladen habe, hat das System nicht funktioniert. Die alten 
Reifeneinheiten mit dem RTC-Shield funktionieren ohne Probleme. Daher 
gehe ich davon aus, dass ich entweder beim Löten oder im Schaltplan bei 
dem RTC etwas falsch gemacht habe.

Eine weitere Veränderungen war, dass ich den Atmega 328P-Pu mit der 
kleineren Version Atmega 328P-Au ausgetauscht habe. Ich danke, dass es 
aber nicht daran liegen könnte.

Den aktuellen Schaltplan habe ich unter dem Namen "Atmega 328P-AU und 
DS231SN PCB" angehängt.

Ich habe alle meine Bauteile auf Kurzschluss etc überprüft und nicht 
Auffälliges bemerkt.

Daher wäre es Super, wenn Ihr mein Schaltplan überprüft und mir einen 
Feedback geben könntet, ob alles SO in Ordnung ist.

Falls Ihr die Funktionsweise unseres Systems benötigt, hier eine kurze 
Erklärung für die Funktion der RTC.


Nach dem Einschalten der Stromversorgung geht das System zunächst in den 
Schlafmodus. Sobald ein Interrupt-Signal empfangen wird, wird geprüft, 
ob der Interrupt durch Alarm 1 oder durch Alarm 2 ausgelöst wurde. Alarm 
1 entspricht dem Weckvorgang am Morgen, der Alarm 2 aktiviert, wenn er 
ausgelöst wird. Alarm zwei entspricht einem einminütigen Aufwachen, 
wobei der Zähler jede Minute bis zu 30 Minuten hochgezählt wird und dann 
für ein paar Sekunden geprüft wird, ob ein Befehl von der Zentraleinheit 
empfangen wird, um die Messungen zu starten oder nicht. Wenn kein Befehl 
von der Zentraleinheit empfangen wird, wird der Zähler auf Null 
zurückgesetzt und der Prozess beginnt erneut. Wenn jedoch ein Befehl 
ankommt, wird der Alarm ausgeschaltet und das Rechtecksignal (SQW) wird 
aktiviert. Die Zentraleinheit sendet mit ihrem Befehl zum Starten der 
Messung eine Abbruchzeit, die nun ständig mit der aktuellen Uhrzeit 
verglichen wird. Solange die entsprechende Zeit nicht erreicht wird, 
wird das Rechtecksignal jede Sekunde ausgelöst. Wenn die Zeit erreicht 
ist, wird das Rechtecksignal abgeschaltet, Alarm 1 wird aktiviert, der 
Zähler wird zurückgesetzt und das System geht in den Tiefschlaf, bis es 
am nächsten Morgen durch Alarm wieder aufgeweckt wird.


Danke im Voraus.

Veloso

: Verschoben durch Admin
von Wolfgang (Gast)


Lesenswert?

VELOSO schrieb:
> Hierbei spielt die Echtzeit-Fähgikeiten unseres Systems eine bedeutende
> Rolle, welches bis jetzt durch einen nicht auf die Platine gelöteten RTC
> DS3231 Shield (Modul) (mit AT24C32 EEPROM und Batterie etc.)

Was hat eine RTC mit Echtzeit-Fähigkeit zu tun?

Eine Real-Time-Clock stellt dir eine Uhrzeit zur Verfügung, 
Echtzeit-Fähigkeit garantiert dir auf einem Prozessor das Einhalten 
einer maximalen Reaktionszeit auf äußere Signale.

Da solltest du dir die Begriffe noch mal genauer ansehen.

C1 und C2 in deiner Schaltung sind etwa um einen Faktor 5000 zu groß.

von Hmmm (Gast)


Lesenswert?

Sind die I2C-Pullups ausserhalb des gezeigten Ausschnitts, oder fehlen 
die?

von VELOSO (Gast)


Lesenswert?

Hallo,

da ich die RTC nicht programmieren muss, bin ich mit dem RTC nicht so 
sehr vertraut.

C1 und C2 habe ich durch einen 22 pF Kondensator ersetzt gehabt. Das 
habe ich vergessen zu erwähnen.

von Wolfgang (Gast)


Lesenswert?

VELOSO schrieb:
> da ich die RTC nicht programmieren muss, bin ich mit dem RTC nicht so
> sehr vertraut.

Wenn eine gewisse Echzeit-Fähigkeit gefordert ist, betrifft das die 
gesamte Programmstruktur. Mit der RTC speziell hat das nichts zu tun.

von VELOSO (Gast)


Lesenswert?

Im Anhang nochmal der ganze Schaltplan von mir.

Muss ich den Pull-Up-Widerstand zwischen SQW/INT vom DS3231 und PD3 vom 
Atmega einführen?

Muss ich beim Pin Vbat irgendetwas beachten? Den z.B. an den VCC der 
Schaltung anschließen?

Ich habe noch Online eine Beispielschaltung gefunden. Kann ich mich 
daran orientieren?

Danke

von Joachim B. (jar)


Lesenswert?

VELOSO schrieb:
> Im Anhang nochmal der ganze Schaltplan von mir.

die widersprechen sich, mal XTAL beschaltet mal nicht, XTAL 
Kondensatoren immer noch falsch und an den VCC und AVCC fehlen sie ganz 
und AREF darf(sollte) nicht mit VCC gebrückt werden, da setzt man intern 
die Bits/Register dafür.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

VELOSO schrieb:
> Muss ich den Pull-Up-Widerstand zwischen SQW/INT vom DS3231 und PD3 vom
> Atmega einführen?

Wieso "zwischen"? Der gehört von der Leitung nach VCC.
Ob ein externer Pull-Up Widerstand erforderlich ist, hängt davon ab, ob 
du den internen in der Software aktivierst oder nicht.

> Muss ich beim Pin Vbat irgendetwas beachten? Den z.B. an den VCC der
> Schaltung anschließen?
Wie die Pin-Bezeichnung schon anzudeuten versucht, gehört der an den 
"+"-Pol der Backup-Batterie.

Laut Datenblatt benötigt die RTC eine V_Batt zwischen 2,3 und 5,5V. Das 
ist doch eindeutig.

von VELOSO (Gast)


Lesenswert?

Ja die internen sind in der Software aktiviert.

Die Vorschläge habe ich ergänzt.

Mit dem XTAL habe ich mehrere Schaltpläne in diversen Foren verglichen 
und die Verschaltung sah immer wie bei mir aus. Die Schaltung an sich 
hat ja auch mit dem RTC Shield und dem Atmega 328P-Pu funktioniert. 
Daher denke ich, dass der XTAL richtig angeordnet ist.

Danke

von Joachim B. (jar)


Lesenswert?

VELOSO schrieb:
> Die Vorschläge habe ich ergänzt.

willst du die Leute veräppeln?

jetzt trennst du VCC mit einem Kondensator?

von F. F. (foldi)


Lesenswert?

Wolfgang schrieb:
> C1 und C2 in deiner Schaltung sind etwa um einen Faktor 5000 zu groß.

Hatte ich auch einmal versehentlich. Da lief dann auch nichts.
Quarz getauscht, nix. Alles getauscht, wieder nix (natürlich, blöd wie 
ich war, wieder 100nF genommen). Irgendwann fällt auch dem Blindesten 
auf, was er falsch gemacht hat.
Das könnte der Fehler gewesen sein. Aber der TO hat sie schon getauscht 
(und hoffentlich ausprobiert) und daher muss sicher noch mehr faul sein.

von Maxim B. (max182)


Angehängte Dateien:

Lesenswert?

VELOSO schrieb:
> Die Vorschläge habe ich ergänzt.

Schaltbild sieht irgendwie komisch aus.
Ist das vielleicht einfach Arduino?
Wenn das einfach fertige Modul so wie Arduino ist, wozu alles auf dem 
Schaltplan? Einfach Box mit ein paar Pins und es reicht. So etwa wie auf 
meinem Bild. Diese Arduino-Bezeichnungen wie D1-D13 und A0-A5 irritieren 
nur bei Programmieren.

Hier als Beispiel Arduino Pro Mini, so wie ich das benutze.
Quarz braucht man nicht extra, das ist in Modul schon eingelötet.
DTR kann man zu GND einschließen, somit bekommt man gratis Kondensator 
für RESET.
Es gibt je 2 Pins für PD0 und PD1, auch für RESET, das kann man auch 
benutzen, wie es für die Platte bequemer ist.

Genauso mit Modul DS3231. alles, auch Batterie, gibt es schon drin. Wir 
brauchen nur zu zeichnen, was draußen bleibt.

: Bearbeitet durch User
von HändeÜberDemKopfZusammenschlag (Gast)


Lesenswert?

VELOSO schrieb:
> für meine Masterthesis

Joachim B. schrieb:
> willst du die Leute veräppeln?
>
> jetzt trennst du VCC mit einem Kondensator?

Oje! Mit dem Master das würde ich mir nochmal überlegen. Noch kannst du 
dich umentscheiden. Finanzdienstleistungen sind gerade groß im Kommen.


VELOSO schrieb:
> die Echtzeit-Fähgikeiten unseres Systems eine bedeutende
> Rolle, welches bis jetzt durch einen nicht auf die Platine gelöteten RTC
> DS3231 Shield (Modul) (mit AT24C32 EEPROM und Batterie etc.)
> gewährleistet wurde.

Sortiere erstmal die Begriffe. Das mit der Uhr hat nichts mit 
Echtzeitfähigkeit zu tun. Echtzeitfähigkeit heisst, dass das System 
innerhalb einer bestimmten Zeit garantiert reagiert hat.

Wie gesagt, noch kannst du dich für ein anderes Fach entscheiden. Die 
Masterthesis ist ja noch nicht fertig.

von F. F. (foldi)


Lesenswert?

Lässt du den auf 16Mhz laufen?
Habe das gerade nicht genau im Kopf, aber  kannst du den dann nicht nur 
mit max. 4Mhz takten?

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

HändeÜberDemKopfZusammenschlag schrieb:
> Oje! Mit dem Master das würde ich mir nochmal überlegen.

der will uns doch veräppeln,

mal kein Quarz, mal 16 MHz aber dafür auch mal 3,3V VCC

das geht doch alles nicht zusammen!

von F. F. (foldi)


Lesenswert?

Ich denke der TO braucht ein Tag Pause.

von Wolfgang (Gast)


Lesenswert?

F. F. schrieb:
> Lässt du den auf 16Mhz laufen?

Vielleicht läuft der µC gar nicht mit 16MHz, sondern mit 2MHz, weil das 
CKDIV8 Fuse Bit falsch steht.

von F. F. (foldi)


Lesenswert?

Alles möglich.
Vorhin konnte ich das nicht mehr ändern (Handy), aber ihr habt ja auch 
so verstanden, dass ich die 3,3V Vcc meinte.

von F. F. (foldi)


Lesenswert?

Wenn der To erstmal an der frischen Luft war, geschlafen hat, wird er 
seine Fehler sicher finden. Es hat ja vorher gelaufen.

von Rene K. (xdraconix)


Lesenswert?

Und wenn er dann an der frischen Luft war und ausgeschlafen hat... Und 
er dann eventuell nochmal, für seine Masterthesis, ins Datenblatt schaut 
- wird ihm sicherlich auffallen das der 328p garnicht mit 16Mhz unter 
3V3 läuft. ?

von Egal (Gast)


Lesenswert?

Und wegen solcher Studenten kommt bald der echte Fachkräftemangel!

von bingo (Gast)


Lesenswert?

Die Pullup-Widerstände für I2C  sind mit 10k viel zu gross, für 5 Volt 
ist etwa 1.5k - 2k angemessen, bei 3.3 Volt 1.0k bis 1.2k. Lies Dir mal 
das Datenblatt http://www.ti.com/litv/pdf/slva689 durch, dann weisst Du 
warum.

von Maxim B. (max182)


Lesenswert?

bingo schrieb:
> für 5 Volt
> ist etwa 1.5k - 2k angemessen

Auf dem Modul mit DS3231 stehen Pullup 4k7. Ich habe auf der 
Hauptplatine (alles 5 Volt) noch 10k, zusammen also 3k2. Das arbeitet 
mit Geschwindigkeit ~ 550 kHz.

von Wolfgang (Gast)


Lesenswert?

bingo schrieb:
> Die Pullup-Widerstände für I2C  sind mit 10k viel zu gross, für 5 Volt
> ist etwa 1.5k - 2k angemessen, bei 3.3 Volt 1.0k bis 1.2k. Lies Dir mal
> das Datenblatt http://www.ti.com/litv/pdf/slva689 durch, dann weisst Du
> warum.

Ich halte da mal mit Application Informationen des Erfinders des I2C-Bus 
gegen: Die geben gnadenlos 10kΩ an und haben deiner Meinung nach keine 
Ahnung davon?
z.B. Fig.22 aus S.37 https://www.nxp.com/docs/en/data-sheet/PCAL6524.pdf

Es gibt ganz klare Bedingungen, wann beim I2C der Pegel stehen muss. Da 
kann man sich viel Grübelei über die Buseigenschaften, Rechnerei und 
Philosophiererei über Anschlussszenarien sparen, wenn man sich einfach 
mit dem Oszi die Bussignale anguckt.

von Joachim B. (jar)


Lesenswert?

Wolfgang schrieb:
> Die geben gnadenlos 10kΩ an und haben deiner Meinung nach keine
> Ahnung davon?

ja die sagen auch nur IHRE Meining ohne alle I2C Chips sowie den Aufbau 
beim konkreten User zu kennen.

Steckbrett und Kabel und Module sind was anderes als der I2C Bus je sein 
wollte nämlich I²C, für englisch Inter-Integrated Circuit

nun ist ein Modul kein IC und an Breadboard und an längere 
Kabel(kapzitäten) hatten die Erfinder nie gedacht, aber vielleicht doch 
sonst könnten die IC nicht pullup down treiben bis 5mA was bei 10k nicht 
nötig wäre.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Joachim B. schrieb:
> nun ist ein Modul kein IC und an Breadboard und an längere
> Kabel(kapzitäten) hatten die Erfinder nie gedacht

Die Erfinder des I2C haben sogar an einen 100m langen I2C-Bus gedacht.
https://www.nxp.com/docs/en/application-note/AN11084.pdf

Bei einem einfachen, bis zu 15m langen Bus schlägt NXP als Pull-Up 300Ω 
auf jeder Seite vor (Fig. 2). Die Wahrheit für den TO wird wohl zwischen 
dem oben genannten Wert von 10kΩ bei 1.8V Bus und diesen 2x300Ω liegen. 
Oszi hilft - wie gesagt.

von bingo (Gast)


Lesenswert?

> z.B. Fig.22 aus S.37 https://www.nxp.com/docs/en/data-sheet/PCAL6524.pdf

Das in Fig22 dürfte ein Druckfehler sein, es müsste 1k sei, so wie in 
Fig.39, das passt dann auch zur I2C-Definition. Es geht Beim I2C-Bus 
bekanntermassen nicht nur um Spannungen, sondern auch um Ströme und die 
sind mit 10k nicht zu erreichen. Häng mal ein Oszi dran und schau Dir 
Pegel und Flanken an.

von Wolfgang (Gast)


Lesenswert?

bingo schrieb:
> Es geht Beim I2C-Bus bekanntermassen nicht nur um Spannungen, sondern
> auch um Ströme ...
Klar geht es um Ströme. Irgendwie muss die Kabelkapazität schließlich 
umgeladen werden. Die 50pF in Fig. 39 entsprechen etwa 1m 
Flachbandkabel.

von VELOSO V. (Firma: ss) (veloso)


Lesenswert?

Ich merke selber, dass ich aktuell fehl am Platz bin. Ich beschäftige 
mich auch grad mal seit einer Woche mit dem Thema.

Also falls Ihr helfen wollt gerne!! Ich bedanke mich auch sehr für die 
Vorschläge.  Doch die negativen Kommentare bauen mich weder auf, noch 
bringen Sie mich weiter.

Die Verschaltung für den Microcontroller bezieht sich auf den folgenden 
Link.
Hier habe ich einen Arduino Nano nachgabaut.
http://www.electronoobs.com/eng_arduino_tut6_sch2.php

Das habe ich gemacht, um den Bootloader und den Code auf den uC 
draufzuladen. Das hat auch soweit geklappt. Also an dem uC scheint 
nichts falsch zu sein.

Ich habe nochmal die Datenblätter gelesen und versucht die Schaltung 
soweit zu vervollständigen.

Da das System vor mir einen RTC Shield mit einer eigenen Batterie hatte 
und somit die Uhrzeit auch beim Ausschalten des Systems weiter lief, 
habe ich in meinem Fall die RTC direkt an die Batterie angeschlossen. 
Damit dies weiterhin gewährleistet wird.

Es wäre zwar besser, dass ich für die RTC eine eigene Batterie verwende, 
leider kann ich es aus Platzmangel nicht tun.

SQW/INT habe ich mit einem 4,7 kOhm Widerstand verschaltet.

von F. F. (foldi)


Lesenswert?

Erstmal solltest du nicht ähnliche Schaltpläne und Layouts Posten, 
sondern nur deine eigenen und auch nur deine Korrekturen.
Lass uns doch noch einmal von vorne anfangen!

von F. F. (foldi)


Lesenswert?

Bilder sagen auch mehr als 1000 Worte.
Also auch gute Bilder von beiden Seiten der komplett aufgebauten 
Platine.
Dann mach erst mal "Blink debug". Einfach um zu sehen, ob der uC 
überhaupt läuft.

von Joachim B. (jar)


Lesenswert?

VELOSO V. schrieb:
> Ich merke selber, dass ich aktuell fehl am Platz bin. Ich beschäftige
> mich auch grad mal seit einer Woche mit dem Thema.

was hast du an 100nF an jedem (A)VCC nicht verstanden?

von Wolfgang (Gast)


Lesenswert?

VELOSO V. schrieb:
> Neuer_Schaltplan_.PNG

Solange die 4.7Ω Widerstände (R4 und R5) in der Schaltung sitzen, 
solltest du tunlichst vermeiden, die Stromversorgung der Schaltung 
einzuschalten.

von Pete K. (pete77)


Lesenswert?

VELOSO schrieb:
> Ja die internen sind in der Software aktiviert.
>
> Die Vorschläge habe ich ergänzt.
>
> Mit dem XTAL habe ich mehrere Schaltpläne in diversen Foren verglichen
> und die Verschaltung sah immer wie bei mir aus. Die Schaltung an sich
> hat ja auch mit dem RTC Shield und dem Atmega 328P-Pu funktioniert.
> Daher denke ich, dass der XTAL richtig angeordnet ist.
>
> Danke

Eine Verschaltung sollte immer nach Datenblatt erfolgen, nicht nach 
irgendwelchen Blogs im Internet. Die können richtig sein, oder eben auch 
nicht (so wie Dein Schaltplan hier).

Du vermischt auch SPI und I2C im linken Bereich. Nicht gut.

Und lerne erst einmal, einen richtigen Schaltplan zu zeichnen. Bauteile 
bekommen immer Namen und Werte (z.B. X5 mit 100nF oder X11 = ISP).
Dabei werden keine Kommata gesetzt, sondern etwa so 4,7kOhm = 4R7 und 
3,3V = 3V3.

Und Texte werden nicht gespiegelt, sie sollten lesbar bleiben 
(GND-Symbole).

: Bearbeitet durch User
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.