Schlagwort-Archive: AVR

BitBastelei #229 – ICStation.com RF24 Funkmodule

RF24-Module sin ein guter Kompromiss um günstig und einfach Daten mit einem Mikrocontroller wie dem Arduino per Funk zu übertragen. Das Modul übernimmt dabei viele Aufgaben zur Sicherstellung einer korrekten Übertragung, sodass der µC weniger Aufgaben erledigen muss.

Mit dem Rabattcode: bitics gibt es 15% Rabatt auf das Sortiment von ICStation

BitBasics: Funk-Datenübertragung per Mikrocontroller

Nicht immer kann ein ein Kabel legen um Daten eines Mikrocontrollers wie dem Arduino zu ihrem Ziel zu bringen. Hier zeige ich die bekanntesten Möglichkeiten um mit Mikrocontrollern Daten drahtlos zu übertragen.

Arduino: boolean vs. byte

Möchte man einen einfachen Status im an/aus-Format notieren ist üblicherweise ein Boolean der Dateityp der Wahl. Technisch gesehen unterstützt der bei Arduino verwendete ATMega jedoch immer nur 8-Bit-Register, sodass auch ein Boolean (1-Bit-Wert) intern meist als Byte (8-Bit-Wert) abgespeichert wird. Klingt nicht sehr effizient, aber kann man per Hand tatsächlich „besser“ arbeiten?

Gehen wir von einem einfachen Beispiel aus: Wir möchten mehrere dieser Zustände speichern und auf deren Basis eine Entscheidung treffen. Für dieses Beispiel wird der Wert immer invertiert – in diesem Fall könnte man es auch kompakter Lösen, aber da es nur als Platzhalter für komplexeren Code gilt lasse ich das mal so stehen. Alle Beispiele sind Auszüge eines größeren Programms, die absoluten Größen also ohne weitere Aussagekraft.

Erster Versuch: Mit Boolean

Zum Vergleich mit einem einzigen „byte“-Wert, dessen einzelne Bits als Informationsspeicher verwendet werden sollen:

Schaut man auf das eigentliche Programm gewinnt die Variante mit Boolean – 6 Byte kleiner. Nicht wirklich verwunderlich – hat man ein ganzes Byte müsste sich direkt ein Sprung bei !=0 durchführen lassen. Mit Byte-Teilen ist ein Vergleich oder ein vorheriges UND nötig, welches zusätzliche Befehle und somit auch Speicher und CPU-Takte verschlingt. Schaut man jedoch auf den RAM dreht sich das Bild: Hier ist das einzelne Byte sparsamer. 2 Byte kommen mir jedoch etwas klein vor – ich fürchte hier hat der Compiler mit seinen Optimierungen einiges der boolean-Logik geschmissen, denn theoretisch sollte zur ersten Variante deutlich mehr Abstand sein.

Wie auch immer: Selbst ohne große Analyse zeigt sich, was ich schon erwartet hatte: Boolean spart Flash, Byte spart RAM. Welche Variante die sinnvollere ist hängt letztendlich vom jeweiligen Projekt ab. Da mir der RAM ausging war die Umstellung auf Byte eine gute Möglichkeit etwas zu sparen. Möglicherweise hätte es auch gereicht den Compiler nicht mit -Os anzuweisen, einen möglichst kleinen Code zu generieren.

BitBastelei #125 – AVR Bauteiltester

Bausatzzeit: Bei einem fernöstlichen Händler habe ich – neben ein paar günstigen Tastern – ein Messgerätbausatz [1] gefunden, welcher interessante Werte aufweist: Transistoren, FETs, Triacs, Dioden, Widerstände, Kondensatoren – nahezu kein Bauteil, welches das Gerät nicht messen kann.Im Falle der Kondensatoren wird auch der ESR angezeigt, im Gegensatz zu meinem ELV-ESR-Meter jedoch laut Anleitung ohne ständiges Kalibrieren.
Natürlich hat der Händler die Schaltung nicht selbst entwickelt – sie stammt von Markus Frejek und Karl-Heinz Kübbeler, alle Infos sind auf Mikrocontroller.net [2] in deutsch zu finden. Da ich mir ohnehin die CPU zeitnah gegrillt habe gibt es also auch gleich die neueste Firmware, welche noch einige neue Features bringen sollte.

0:13 Notaus-Taster
3:32 Bausatz-Überblick
6:59 Aufbau
10:17 Komponententests
22:30 Originalprojekt auf µC.net
26:26 Auslesen der Originalfirmware – oder auch nicht
29:51 Neuer µC, neue Firmware
36:05 Erstkalibrierung

[1] http://www.banggood.com/DIY-Meter-Tester-Kit-For-Capacitance-ESR-Inductance-Resistor-NPN-PNP-p-929603.html
[2] http://www.mikrocontroller.net/articles/AVR_Transistortester

Eigenbau-MPPT – Hardware-Prototyp und ein paar Ideen

Örks – wieder kein Strom. Mein Wellsee-Regler hat (mal wieder) das Zeitliche gesegnet – guter Zeitpunkt um sich nochmal um den Eigenbau-MPPT zu kümmern.

Einige Prototypen liegen schon hier, allerdings bisher ohne passende Firmware. Das Ganze basiert grob auf dem Design von Tim Nolan und ist aus Kostengründen auf eine 5x5cm-Platine gequetscht. Bis auf einen zu gloßen Elko (geplanter Footprint war nicht lieferbar) und einem zu geringen Abstand zweier Mosfets (Kühlkörper etwas stromm, aber ohnehin elektrisch verbunden) bin ich ganz zufrieden. Von der Dimensionierung sollten ~250W drin sein. Gegenüber des Originals wird ein Halleffektsensor für die Strommessung verwendet, RS232 ist auf eine Anschlussleiste herausgeführt und das Modul ist nicht auf einen Arduino angewiesen.

Derzeit portiere ich die Arduino-Firmware auf native ATTinys. Ich bin mal optimistisch und habe fürs Erste einen ATTiny24a mit 2kb Flash verlötet, im Zweifelsfall kann ich aber mit den 44 oder 48er Typen problemlos aufrüsten. Ich denke die Firmware selbst wird kein so großes Problem, wohl aber meine Featuritis – ich hätte gerne die Möglichkeit mehrere Regler zu vernetzen um so meine unterschiedlichen Module einzel Steuern zu können – sozusagen ein Mehrphasensynchronregler. Zudem wäre ein PC-Interface nicht schlecht um für jedes Modul eigene Statistiken zu erhalten.

Aktuelle Wetterdaten aus Saffig und Solarstatistiken hinzugefügt

Sowohl hier als auch auf 56648.de sind in der Rechten Spalte nun Wetter- und Solardaten meiner Sensoren verfügbar. Als Temperaturwerte gibt es in der Übersicht die aktuelle Temperatur sowie Tagesmaximum, -minimum und der -durchschnitt. Bei den Solarwerten gibts den aktuellen Ertrag, Tagespeak und den heutigen Ertrag samt der daraus ermittelten Sonnenstunden. Mit einem Klick auf die Überschriften lassen sich weitere Statistiken auf der Wetterseite sowie der Solarseite finden. Für beide Systeme liegt hier noch eine Kiste mit Sensoren, wird also irgendwann noch ausgebaut.

Technisch werden die Daten über einen 1Wire-Converter für Temperaturen bzw. den bereits vorgestellten USB-Solar-Adapter an meinen Homeserver übertragen und dort für interne Verwendung über das Volkszähler-Projekt in einer MySQL-Datenbank zwischengelagert. Für die externen Statistikseiten laufen kleine PHP-Scripte welche die Daten aus der DB ohne Umwege aufarbeiten.