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
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ß.
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.
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.
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
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.
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.
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
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.
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.
VELOSO schrieb:> für meine MasterthesisJoachim 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.
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!
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. ?
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.
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.
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.
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.
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.
> 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.
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.
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.
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!
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.
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?
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.
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).