Amateurfunk verbindet die Welt

Liegen geblieben – kann das weg?

Erstellt: DL6GL, 14.05.2023, letzte Änderung 23.07.2023

Vielleicht doch nicht. Mit der Zeit bleibt so einiges liegen. Weil die Lust daran abhanden gekommen ist. Weil es nicht oder so nicht mehr gebraucht wird. Weil es dann doch eine bessere Lösung gegeben hat. Wie auch immer, es hat mal Arbeit gemacht, es hat mal Spaß gemacht, es hat mal Sinn gemacht. Und es wurden mal Ideen umgesetzt und Lösungen. Ideen und Lösungen, die vielleicht irgendwann wieder vergessen sind.

Wie habe ich das damals nochmal gemacht? Gut, wenn das irgendwo festgehalten ist. Das Laborbuch vergangener Tage hat wohl ausgedient, auch wenn ich vor vielen Jahren noch die Irrungen und Wirrungen bei der TRX-Entwicklung so notiert habe. Da ist das Internet praktischer. Nicht für Notizen und Handzeichnungen, aber doch für Ergebnisse und deren Grundlagen.

In loser Folge möchte ich hier einige unvollendet liegen gebliebene Projektchen und deren Teillösungen aufführen. Kann ja sein, dass jemand gerade nach so etwas sucht.


Real Time Clock mit PCF8563

Dieses kleine Projekt ist vor etwa zehn Jahren unvollendet geblieben. Ursprünglich sollte es eine Heizungssteuerung werden. Mit dem doch erfolgten Austausch gegen einen modernen Brennwertkessel hat sich das dann erübrigt.

Als Herausforderung für meinen im Ruhestand vernachlässigten Denkmuskel fiel mir vor kurzem ein, das AVR-Programm umzubauen, allerdings nicht mehr als Heizungssteuerung, sondern als Alarmgeber für was auch immer "just for fun". Besonders reizte mich dabei die Herausforderung, einige für mich neue Funktionen zu entdecken und auszuprobieren, über die ich getrennt berichten werde. Das ist vorläufig dabei herausgekommen:

  • Uhrzeitmodul (Real Time Clock, RTC) mit einem PCF8563. Solche Module sind für kleines Geld aus China zu haben. Wenn ich es vermeiden kann, kaufe ich nicht von dort. Was da so abgeht, passt mir nicht. So habe eins selber gebaut.

  • Ablaufsteuerung mit einem ATmega168P (geplant), Programmentwicklung vorab auf einem Testboard mit einem ATmega328P. Ein Arduino NANO wäre dann auch einsetzbar, aber weniger zu empfehlen, wenn ein mobiler Einsatz mit einem 3,7V LiIon-Akku vorgesehen ist. Die Zusatzperipherie, u.a. LED, schluckt unnötig Strom.
    Die aktuelle Uhrzeit sowie bis zu fünf Alarmzeiten können interaktiv mit drei Tastern und LCD-Anzeige eingegeben werden. Der Controller überträgt den jeweils anstehenden Alarm in die RTC, die diesen dann automatisch auslöst. Signalisiert wird der Alarm mit einer deutlich blitzenden LED.
    Während nicht aktiver Zeiten kann der Controller wahlweise in den Schlafmodus versetzt werden, um Strom bei einem Mobilbetrieb zu sparen. Aufgeweckt wird der Controller von einem Alarm oder manuell per Taster. Danach legt er sich nach einer vorgegebenen Zeit wieder schlafen.

  • Eine ausführliche Beschreibung ist im Download zu finden einschl. Firmware für ATmega328P und ATmega168P, jeweils mit internem 8MHz RC-Takt. Ein Arduino mit aufgelötetem 16MHz-Quarz kann auch verwendet werden.

Download

Real Time Clock mit PCF8563.zip


Nachfolgend beschreibe ich einige Einzelheiten aus dem Programm, die bei mir etwas in Vergessenheit geraten waren oder mit denen ich mich erstmalig auseinandergesetzt habe.

 

 

Handhabung von AVR-Registern mit BASCOM

BASCOM verbirgt Manipulationen einzelner AVR-Register hinter Hochsprachenbefehlen wie "Config …" oder "Enable …". Mit der Definition des Controllers sind das dann auch gleich die dazu passenden Register und Bits im Register. Die BASCOM-Help bietet eine reiche Auswahl.

Wer genau wissen will, welche Aktionen er womit auslösen wird, muss sich auf die "atomare" Ebene von Registern und einzelnen Bits begeben. Die BASCOM-Help hilft da nicht weiter. Das AVR-Datenblatt muss zu Rate gezogen werden. Das ist zu Anfang mühsamer, macht aber den Code transparenter und eröffnet alle Möglichkeiten, die die AVR-Entwickler vorgesehen haben, die aber ggf. von BASCOM aus nicht erreichbar sind.

Es mag zunächst naheliegen, die BASCOM-Konstrukte zu verwenden. Hier möchte ich zeigen, dass der direkte Zugriff auf AVR-Register so viel schwieriger auch nicht ist, zudem sehr übersichtlich Möglichkeiten eröffnet, einzelne Funktionen gezielt zu beeinflussen. Nur Mut…

 

Download

Handhabung von AVR-Registern mit BASCOM.pdf

 

 

Pin Change Interrupt mit BASCOM

In den Anfangszeiten, als es neben ATtinys noch die ATmeg8/16/32 gab, musste man sich mit wenigen interruptfähigen Pins zufrieden geben. Beim Atmega8 waren das die INT0- und INT1-Pins PD.2 und PD.3, an denen externe Interrupts ausgelöst werden konnten. Beim ATmega16/32 kam noch INT2 an PB.2 hinzu.

Mit der neueren Generation ATmega 48/88/168/328, die mit dem in der Arduino-Familie verbauten ATmega328P große Verbreitung gefunden hat, gibt es die freie Auswahl aus beliebigen Pins mit dem Pin Change Interrupt. Die Datenblätter geben im Kapitel "External Interrupts" dazu Auskunft. Anders als bei den INT0 bis INT2-Interrupts mit wählbarer Reaktion (ansteigende / abfallende Signalflanke, Low Level oder Change) wird ein Pin Change Interrupt bei jeder Änderung am betreffenden Port ausgelöst. Das eröffnet vielfältige Möglichkeiten, Peripherie flexibel einzubinden.

Eine Konfigurierung hört sich kompliziert an, ist es aber nicht wirklich. Dazu machen wir uns wieder an ein paar AVR-Registern zu schaffen. Im Ergebnis erhalten wir die freie Auswahl an noch freien und für das Board-Layout gut zugänglichen I/O-Pins zur Verarbeitung externer Interrupts.

 

Download (aktualisiert 26.05.2023)

Pin Change Interrupt mit BASCOM.pdf

 

 

Sleep: Controller schlafen legen mit BASCOM

Soll ein Microcontrollermodul auch mobil genutzt werden, ist es sinnvoll, in Pausen, wenn der Controller eigentlich nichts zu tun hat, ihn in einen Schlafmodus mit reduzierter Stromaufnahme zu versetzen. BASCOM bietet dazu einige Optionen wie "Idle", "Powersave" und "Powerdown" an. Die BASCOM-Help gibt sich dazu aber recht bedeckt. Also arbeiten wir uns wieder einmal an dem Datenblatt ab. Hier wieder für die ATmega48/88/168/328-Familie in Kap. 9. Bei anderen Controllern wie den ATtinys oder den ATmega8/16/32 sieht das etwas anders aus.

Mit diesen Maßnahmen lässt sich vorab schon einmal Strom sparen:

  1. Stromversorgung kleiner als 5V-Standard.
    Bei sehr geringen Spannungen ist i.a. auch die Taktfrequenz zu reduzieren, z.B. max. 4MHz bei 1,8V für den ATmega328P.

  2. Wahl von Taktquelle und Taktfrequenz.
    Wenn keine quarzgenauen Frequenzen notwendig sind, z.B. für Timings, und eine etwas gemächliche Gangart ausreicht, steht der interne RC-Taktgenerator, je nach Controller 1 oder 8MHz zur Auswahl. Dieser spart auch wieder Strom gegenüber einem externen Quarz, bei einem ATmega328P mit 16MHz Quarz gemessen ca. 5mA. Außerdem wacht der Controller mit RC-Takt schneller wieder auf.

  3. Alle nicht benutzten I/O-Ports auf Input mit internem Pullup konfigurieren.

Um richtig Strom zu sparen, können wir BASCOM-Hochsprachenbefehle einsetzen oder wieder einmal in die Register-Trickkiste greifen. Es sind verschiedene Schlafmodi wählbar. Neben anderen Möglichkeiten, den Controller wieder aufzuwecken, werden hier externe Interrupts gewählt.

 

Download

Sleep - Controller schlafen legen mit BASCOM.pdf

 

 

LED-Blitzlicht mit BASCOM

Ab und zu braucht man statt einer einfach nur leuchtenden LED ein etwas auffälligeres Blinklicht. Die primitivste Lösung sind Waits mit abwechselndem LED AN und LED Aus. Ein ernsthafterer Programmierer macht das dann doch lieber mit einem Counter in einer Interruptroutine und lässt den LED-Port toggeln. Schon besser, aber nicht auffällig genug. Wie wäre es mit einer aufblitzenden LED, wie etwa bei Flugzeugen? Ist nur unwesentlich aufwendiger als ein Toggeln.

 

Download

LED-Blitzlicht mit BASCOM.pdf
LED-Calculator.xlsx