Hallo,
ich habe mal eine dumme Frage. Wie kann ich zwei Programme in einem
Programm unterbringen? Es geht um einen Arduino.
Ich habe zwei Teile, die funktionieren getrennt für sich auch ganz gut.
Wie kann ich diese Teile jetzt miteinander verbinden?
In frühen Jahren hab ich mal gelernt, daß das Hauptprogramm recht kurz
ist.
Ich habe bis jetzt RTC und Display. Unterbreche ich das Hauptprogramm
nun alle, sagen wir 200ms und übertrage die Datumswerte aus dem RTC in
irgendwelche Register?
Den Timer stelle ich auf 3mal die Sekunde und übertrage die Werte an das
Display?
Da an dieses Teil noch Potentiometer und Tasten sollen, kann es doch
nicht richtig sein, alles nacheinander abzufragen und die Werte zu den
entsprechenden Adressaten schicken.
Gibt es ein Grundlagenbuch, wo das schön beschrieben wird?
Danke Bodo
Bodo M. schrieb:> Den Timer stelle ich auf 3mal die Sekunde und übertrage die Werte an das> Display?
ich würde ja 4x vorschlagen
zählen bis 25 im 10ms Timer für Tastenentprellung P.Dannegger oder
zählen bis 159 für IRMP 15kHz dann Flag setzen im Haupt loop RTC lesen
und aufs Display ausgeben und Tasten oder IR codes bedienen
4x pro Sekunde das Display aktualisieren dann läuft die Uhr
"geschmeidiger" weil ja im loop nicht jede Verabreitung zeitgleich
erfolgt, je nach dem was sonst so anliegt, Tastenauswertung oder IR
Impulse bedienen
Flag wieder löschen, in der ISR läuft der Zähler ja weiter und wird das
nächste Mal wieder das Flag setzen, dazwischen sind ja 250ms Zeit.
Nur für IR Impulse muss eine Sonderbehandlung eingebaut werden, falls
man im IRQ noch mehr macht.
Optimal schreibt deine Routine in ein Schattenram Spalten Zeilen egal
wann und kopiert wird dann 4x pro Sekunde unabhängig ins Display, dann
braucht man sich nicht drum zu kümmern, schneller lesen kann eh keiner!
Die Datumswerte alle 200ms uebertragen ... uii, aendern sich diese so
dramatisch, oft, unerwartet ?
Wie oft werden die denn benoetigt ? 5 mal die Sekunde ? Ich wuerde eine
eigene RTC in software auf dem controller laufen lassen und nur bei
power up synchronisieren.
Pandur S. schrieb:> Die Datumswerte alle 200ms uebertragen ... uii, aendern sich diese so> dramatisch, oft, unerwartet ?
nicht Datum, Uhrzeit damit die Sekundenanzeige "geschmeidiger" läuft und
zwischendurch andere Verabeitungszeiten die Anzeige nicht holperig
machen
1x pro Sekunde eher holperig 4x pro Sekunde relativ flüssig, bei ADC
kann man auch mal bis zu 10x pro Sekunde hochgehen um 1/10 Sekunde zu
ahnen.
Das ist ja leicht probierbar was einem gefällt oder was man denkt zu
brauchen.
Pandur S. schrieb:> Die Datumswerte alle 200ms uebertragen ... uii, aendern sich diese so> dramatisch, oft, unerwartet ?
wer will denn das alte Datum sehen bei Wechsel auf 00:00 Uhr, wer mag
kann auch noch eine Abfrage vorschalten ob ein neues Datum nötig ist.
Auch if Abfragen kosten Speicherplatz, manchmal braucht man jedes Byte.
Deine Kritik ist verständlich aber du kennst nicht alle Umstände, mein
nano328p ist ratzevoll, ich bin nicht der genialste Programmierer und
gehe auch Kompromisse ein.
Nyquist hat das schon recht schön formuliert. Die optimale
Polling-Frequenz hier ist somit 2Hz, nach Adam Riese also alle 500ms.
Optimal dahingehend, dass man:
1. alle Änderungen mitbekommt
2. die CPU entlastet, denn 4x pro Sekunde pollen kostet natürlich
CPU-Zeit, die man sich sparen kann, da ja 3x das gleiche zurückkommt.
Reneg schrieb:> denn 4x pro Sekunde pollen kostet natürlich> CPU-Zeit, die man sich sparen kann, da ja 3x das gleiche zurückkommt.
das ist bei einer CPU Ausgabe aber manchmal nebensächlich ausser die CPU
ist am Limit, mit weniger pollen spart man CPU Zeit aber die LCD Ausgabe
kann holperig aussehen wenn eine Sekundenanzeige nicht im Takt läuft
weil einige Software länger dauert.
Handmultimeter geben ja auch 3x pro Sekunde aus, bei ADC Werte wäre dann
2x pro Sekunde echt zu lahm.
Wie gesagt es kommt immer drauf an, muss ich jede Zeile auf dem Display
sonder behandeln Datum, nur weil ich weiss das ändert sich in 24h nicht
kostet diese Sonderbehandlung Programmspeicher.
Es ist immer eine Abwägung zwischen CPU Nutzung & Speichernutzung, je
nach Aufgaben.
Geht man vom nano aus braucht man manchmal jedes Byte flash.
Wechselt man von AVR zu ESP dann hat man flash und SRAM im Überfluß
macht aber den Code unübersichtlicher wegen vieler Sonderbehandlungen.
Ich habe ein "Gerippe" für ESP32/nano328p das RTC3231, LCD5110,
Tastenabfrage und Serial In bedient, gleiche Software die man vielseitig
einsetzen kann, das muss ich dann nicht immer neu programmieren sondern
kann es ergänzen.
Mal 433 Mhz Funke, mal DHT Feuchtemessung, mal DCF77 Wordclock, mal
BerlinUhr, mal Laufschrift mit WS2812B Großdisplay 32x8.
Die grundlegenden Elemente bleiben ja gleich.
Kommandoauswertung "seriell in" heller/dunkler Kontrast +/-, was halt
gebraucht wird.