Archiv der Kategorie: AVR

Mein kleiner Microcontroller

Arch Linux / Arduino: libtinfo.so.5 fehlt

Bild: https://www.adlerweb.info/blog/wp-content/uploads/2017/02/archarduino-300×58.pngBei der Nutzung der Arduino-IDE kommt es zur Zeit unter Arch Linux zu Problemen in Zusammenhang mit AVR-Boards. Ursache ist, dass Arduino seit einigen Versionen nicht mehr die Tools des System nutzt, sondern auf vorkompilierte Binärdateien setzt. Diese Alles-dabei-Conteiner versprechen auf den ersten Blick eine Vereinfachung, fliegt aktuell leider etwas auseinander: Die beigelegten Programme sind an vielen Stellen gegen überholte Bibliotheken gebaut. Dies verschafft zwar Kompatibilität mit trägen Systemen wie z.B. Debian, macht eine Nutzung mit aktuellen Systemen umständlich.

Schaut man sich die Fehlermeldung genauer an findet man schnell heraus, dass der beigelegte avrdude die Probleme auslöst:

avrdude: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or director

Libtinfo wurde zwischenzeitlich wohl in Ncurses übernommen, zudem benötigt Arduino/avrdude eine ältere, normalerweise nicht mehr installierte API der ncurses-Library.

Wer die Libraries passend haben möchte muss zuerst ncurses5-compat-libs installieren um die alten API-Versionen nachzurüsten, im Anschluss sorgt das Dummy-Paket libtinfo dafür die alten Dateinamen auf ncurses umzubiegen.

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

boolean dir1 = false;
boolean dir2 = false;
boolean dir3 = false;
//[...]
if(dir1) {
  //Aktionen
  dir1 = false;
}else{
  dir1 = true;
}

//23.644 Byte Flash, 1.537 Byte RAM

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

byte dir = 0x00;
//[...]
if(dir & 0x01) {
  //Aktionen
  bitSet(dir, 0x01);
}else{
  bitClear(dir, 0x01);
}

//23.650 Byte Flash, 1.535 Byte RAM

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.

Arduino® Pro Mini Pinout Cheat-Sheet

Ich arbeite auf Grund des geringen Preises häufig mit Arduino®-kompatiblen Boards der „Pro Mini“-Serie. Leider sind die Pins auf diesen Boards nicht nach der CPU sondern dem Standard der Arduino-IDE beschriftet. Bisher nutzte ich diverse Pinout Cheat-Sheets aus dem Netz, jedoch haben viele dieser Diagramme vertauschte Pins, welches bei mir in den letzten Wochen zu einigen fehlerhaften Aufbauten führten. Lange Rede kurzer Sinn: Ich werfe ein weiteres Cheat-Sheet in den Raum – hoffentlich mit weniger fehlerhaft beschrifteten Pins. Wenn doch etwas auffällt: Die Kommentare sind offen.

Bild: https://www.adlerweb.info/blog/wp-content/uploads/2015/08/prominipinout-1.2-300×212.png
[DA]

BitBastelei #125 – AVR Bauteiltester

BitBastelei #125 - AVR Bauteiltester

(297 MB) 00:39:37

2014-11-30 11:00 🛈

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

Denon RC-1158 IR-Codes

Um einen AV-Receiver per Arduino zu steuern musste ich – mangels RS232 – die Fernbedienung emulieren. Um das zu bewerkstelligen benötigt man die entsprechenden IR-Codes. Bewaffnet mit IRMP – bzw. dessen Arduino-Umsetzung – habe ich mir die entsprechenden IR-Command-Codes der Fernbedienung notiert. Wers braucht: Viel Spaß.

DENON RC-1158 Mapping

Florian „adlerweb“ Knodt · 2014 · www.adlerweb.info
Powered by IRMP / IRMP4Android

Protokoll: DENON/Sharp · Address: 0x3254

       

StBy

   

On

0x4003

   

0x4002

       

Sleep

Dimmer

Status

Search

0x4344

0x4290

0x4280

0x43D7

       

BD

TUNER

BAND

MEMORY

0x42D1

0x42CF

0x43D0

0x4024

       

DVD

DOCK

SHIFT

MODE

0x42D0

0x42DC

0x43CE

0x43D3

       

TV

GAME

CH+

TuneUp

0x42D2

0x42D5

0x43CC

0x43CA

       

SAT/CBL

V.AUX

CH-

TuneDn

0x42D3

0x42D9

0x43CD

0x43CB

       

Q_CD

Q_BD

Q_GAME

Q_AUX

0x4124

0x4125

0x4126

0x4127

       

MENU

 

AUDIO ADJ

VolUp

0x4023

 

0x41C0

0x4170

       
 

Up

   
 

0x401B

   
       

Left

Enter

Right

 

0x401D

0x401F

0x401E

 
       
 

Down

   
 

0x401C

   
       

CH LEVEL

 

RETURN

VolDn

0x417A

 

0x4022

0x4171

       

NIGHT

RESTORER

TONE

MUTE

0x4222

0x4224

0x4196

0x4172

       

SURR_LEFT

SURR_RIGHT

DELAY-

DELAY+

0x414C

0x4150

0x426E

0x426D

       

IPOD_SKIP_L

IPOD_STOP

IPOD_PLAY

IPOD_SKIP_R

0x2005

0x2008

0x2001

0x2004

       

IPOD_REV

IPOD_REPEAT

IPOD_RANDOM

IPOD_FWD

0x2016

0x2011

0x2010

0x2015

       
       

BitNotice #8 Unboxing: Borderless Electronic 9$-Arduino

BitNotice #8 Unboxing: Borderless Electronic 9$-Arduino

(44 MB) 00:07:17

2013-11-09 01:30 🛈

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.

BitBastelei #17 – Solarmonitoring mit dem Volkszähler

BitBastelei #17 - Solarmonitoring mit dem Volkszähler

(77 MB) 00:05:29

2012-07-22 19:46 🛈

Software:

Hardware: