Schlagwort-Archive: AVR

Grafisches LCD-Schnäppchen

Vor einiger Zeit hatte ich bei Pollin ein LCD mit bestellt. Grafisch, 128×60 Pixel für 7 Euro – da kann man ja nicht viel falsch machen. Übers Wochenende habe ich mit dem Kleinteil mal angenommen und war von der Ausstattung doch sehr überrascht: Neben dem LCD selbst, welches eine ganz Brauchbare Qualität zeigt, ist auch noch ein Touchscreen vorhanden. Offenbar gab es Kontaktprobleme, wodurch dieser zum Teil nicht funktioniert und daher nicht im Datenblatt erwähnt ist. Ich hatte Glück: Auch ohne Basteln lief der Touchscreen sofort und darf demnächst als kleine GUI für mein MSR-System herhalten.

19358

1Wire (DS18x20) auf RS232 (EIA232)-Adapter

Heute musste nochmal eine Kupferplatte dran glauben: Das Ätzgerät durfte nochmal aus dem Schrank hervorkommen. Daran, dass die Hälfte meiner Platinen für die Tonne ist hat sich zwar nichts geändert, aber ein paar sehen brauchbar aus.

Die Erste, die nun in Betrieb geht, ist ein Adapter für DS18x20-Temperatursensoren. Keine wirkliche Neuentwicklung, das PCB soll lediglich einen Aufbau auf Steckbrett ersetzen und ergänzen, welcher schon seit Jahren in Betrieb ist. Der Aufbau ist recht einfach: Die Sensoren werden zusammen mit einem Pullup direkt an den Controller geheftet. Dazu ein MAX232 um die serielle Schnittstelle (ggf. über USB-Adapter) an den PC zu bekommen und der übliche Kram wie Quarz, Stromversorgung, …
18333
Als Controller dient ein ATMega8 – eigentlich überdimensioniert, aber davon hab ich die Schublade voll. Es sind 6 1-Wire Busse vorbereitet, jeder drüfte mit CAT5-Kabel etwa 50m problemlos überbrücken können. Insgesamt sollten mehr als 500 Sensoren technisch kein Problem sein, mit geringeren Pullup-Wiederständen oder direkt einem aktivem Pullup sollten auch Längen von über 500m und über 1000 Sensoren machbar sein.
18338
Die Software ist eine Adaption des Codes von Martin Thomas. Am PC wird das ganze durch ein PHP-Script geparsed und per RRDtool in die bekannten Diagramme umgewandelt.

Mein momentaner Aufbau besteht dabei aus 4 Bussen mit insgesamt 9 Sensoren.

18329
(Hinweise: Zusätzlicher Kondensator am Eingang und Bastelei am RS232 da ich kein passendes Kabel da hatte)

Platz vs. Verbrauch

Ich gaub, ich muss meine neue Platine doch nochmal überdenken und der Stromversorgung etwas mehr Platz zukommen lassen…

Ausgangssituation:
Input: Trafo, 18V
Output: 5V für ATMega + paar 74er

a) 78S05 -> 8W
b) 34063 (Step-Down) -> 5W

Hätte nicht gedacht, dass der Unterschied trotz suboptimaler Bestückung des 34063ers doch so deutlich ausfällt…

Spaß mit Pulsen

Verdammter Schreibtisch – da liegt immer so viel rum, was einen auf dumme Gedanken bringt. Erst entfernte ich meine alte LED-Beleuchtung, welche sich aus einer umgebauten LED-Kopflampe zusammensetzte und durch die “echte” Lampe nun keine Verwendung mehr hatte. Dabei musste ich mein Steckbrett wegräumen. Was ist denn da nochmal drauf? Schieberegister, Optokoppler, Controller – ah, Moment, das ist meine neue Brandmeldezentrale – ok, das was ich bisher aufgebaut habe. Aber da ist ja ein loser Controller – huh. Der besagte Controller war ein Testaufbau um per PWM der Piezosirene verschiedene Töne zu entlocken – nun dient er zusammen mit der alten 3-LED-Lampe als PC-gesteuertes Stroboskop. Echt ekelhafte Frequenzen sind da machbar…

Revival der Wetterstation

13010

13015

13020

Über Nacht habe ich mich nochmal am Außensensor meiner Wetterstation probiert. Den hatte ich vor einigen Monaten in die Ecke gelegt, da die meisten Sensoren irgendwie nicht so wollten wie ich und mir die Lust vergangen war. Nun weiß ich auch warum: Ein Kabel war gebrochen… Der Sensor hat über Nacht einige Änderungen abbekommen und klebt nun im funktionellen Plastikgehäuse zum Test im Freien.

Kleiner Überblick über die Hardware:

  • AVR ATMega8L
  • SHT71, digitaler Feuchte-/Temperatursensor, ±3.0 %rF, ±0.4°C
  • MPX4115A, analoger Drucksensor, über OpAmp am ADC
  • Conrad “Regensensor”
  • RF02, Funkmodul
  • Stromversorgung: 7805 (µCs), TS317 (1,5V Regensensor)

Funktionen:

  • Normalbetrieb: Messwerte alle 90 Sekunden senden
  • SHT71/MPX4115A: Werte werden bei Bedarf ausgelesen
  • Regensensor: Interruptgesteuert
  • Debug-Jumper: Sendeintervall auf 5 Sekunden verkürzen
  • RS232-Schnittstelle zum debuggen

Am Stromverbrauch ließe sich noch etwas machen – momentan werden keine Sleep-Modi der µCs verwendet und auf die eigene Elektronik des Regensensors könnte man auch verzichten. Da der Verbrauch aber nur knapp über dem Leerlaufverbrauch des Netzteils liegt ist das für mich erst mal uninteressant.

Bisher ist noch kein Datensatz ohne Bitfehler angekommen, könnte aber daran liegen, dass der Empfänger noch auf meinem Basteltisch unter Tonnen von Kabeln begraben ist. An der endgültigen Position sollte der Empfang deutlich besser sein. Dank Fehlerkorrektur vermeldet das System trotzdem soeben folgendes:

RX DONE
Data: #####T 359 H 6965 P 849 R 10 C 6409#||

Oder grob übersetzt:

Temperatur
3,59°C (/100)

Luftfeuchte
69,65% (/100)

Luftdruck NN
1004,45 hPa
(((((Vss/1023*ADC)/(R2/R1+1))+Vref)/5+0,095*1111,11*Fkorr)/(1-((0,0065*h)/288,15)^5,255)) [sic!]

Regen:
45mm/m² (Ticks * 4,5mm/m², reset bei 100 Ticks)

Der letzte Wert ist eine einfache Prüfsumme (XOR)

Jetzt muss es nurnoch für einen Test regnen – die Gießkanne ist noch zugefroren…

–EDIT–

Zu früh gefreut… MESSFEHLER_T2 oder auch SHT71 ausgefallen. Scheint, als ob das Kabel noch immer Probleme macht…

Grillfest

OK, schlecht Idee… Ein loses Bauteil in meinem Netzteil sorgte Gestern für etwas schlechte Laune. Eigentlich kein Problem: Abmontieren, Anlöten, Einbauen. Da ich in der Zwischenzeit aber nicht mein komplettes System lahmlegen wollte noch schnell ein anderes Netzteil angeschlossen – 5V, passt schon. Tja, offenbar tat es das nicht. Irgendwie hatte das Ersatznetzteil eine Macke und lieferte statt der versprochenen 5V plötzlich 7V. Obwohl die (automatisch rückstellenden) Sicherungen meiner Nodes funktionierten und ich recht schnell den Übeltäter von der Leitung entfernte transformierte sich ein Atmega vom Steuerungschip für Temperaturmessungen zur Kochplatte. Dieser Node war nur notdürftig zusammengesteckt und offenbar hatte ich keine Sicherung draufgepackt. Verdammt.

Immerhin war dank SVN der Quellcode noch greifbar und ein neuer µC schnell auf der Platine dem Steckbrett. Die Sensoren haben die 7V offenbar überlebt und lieferten direkt augenscheinlich richtige Messwerte. Ein Gutes hat das Ganze: Der gewachsene Kabelsalat des Nodes ist jetzt wesentlich geschrumpft und wieder halbwegs nachvollziehbar – dieses mal mit Sicherung.

Bastelarbeiten zum Jahresende

Eine Woche Urlaub hinterlässt spuren. Der Schreibtisch hat sich in ein riesiges Steckbrett verwandelt und der Boden dürfte sich irgendwo unter der zentimeterdicken Schicht der Testverkabelung befinden. Obwohl die Post offenbar schon Weihnachtsurlaub hat und mir noch einiges an Hardware fehlt konnte ich doch einige Punke auf meiner Liste abarbeiten:

Zum einen habe ich den schwachen Dollar etwas ausgenutzt und meinem Server noch ein paar Festplatten spendiert. Neben dem bisherigem Terrabyte für die Daten (4x250GB, SATA-1, RAID 5 = effektiv 750GB) gesellen sich jetzt 2 weitere Terrabytechen ins Gehäuse (4x500GB, SATA-2, Controller PCI-X 64Bit, RAID 5 = effektiv 1,5TB) und erhöhen damit die Kapazität aller 13 Festplatten auf physikalische 3,1TB. OK, irgendwie muss ich noch einen Lüfter dabeizaubern – bei Volllast kratze ich an der 40°C-Marke. Zwar sind die Platten laut Datenblatt bis 60°C ausgelegt, aber man muss ja nichts riskieren.

1186811863

Nächster Punkt ist mein zusätzliches “Brandmeldesystem”. Zwar fehlt immernoch die endgültige Platine der Zentraleinheit, aber inzwischen hängen meine Rauchmeldeeinheiten in den Räumen, können lokal im Bandfall einen akustischen Alarm geben und liefern bereits Temperaturmesswerte an meinen Server, der fleißig Diagramme zeichnet. Die Stromversorgung läuft über ein überwachtes Schaltnetzteil, ist mit mehreren dezentralen Bleiakkus gepuffert, jeder Sensor hat eine separat abgesicherte Leitung und alle Sensoren werden (wenn die Zentraleinheit läuft) ständig auf korrekte Funktion überwacht.

Zwischendurch hat sich dann noch meine Workstation zu Wort gemeldet – ein RAID1 schützt vielleicht vor Festplattenausfällen, aber gegen Probleme des Dateisystems (ext3) ist auch das machtlos. 4 Stunden später lief ein neues Gentoo auf dem System und dank den letzten Updates klappt trotz 64Bit jetzt sogar Flash. UT ist natürlich auch drauf 😉

Meine Wetterstation närt sich langsam wieder einem funktionsfähigem Zustand – inzwischen konnte ich die Fehlfunktionen auf einen kaputten Sensor zurückführen. Zusammen mit dem Funksender können so jetzt wieder Temperatur und Luftfeuchte ermittelt werden. Auch der Luftdrucksensor müsste funktionieren, ist aber noch nicht kalibriert. Der Regensensor ist hardwareseitig auch fertig, hier fehlt noch eine passende Ergänzung Software. Gänzlich fehlen meine letzten Wunschsensoren für Wind und Sonnenenergie, die danach irgendwann mal in Angriff genommen werden.

Bei iSys bin ich noch nicht weiter. Zwar schau ich mir zwischendurch immer mal wieder einzelne Softwareteile an, aber auch hier warte ich noch auf meine Platinenbestellung, denn Softwaretest auf dem Steckbrett sind recht aufwändig.

Ansonsten herrscht das übliche Weihnachtsgeraffel – Geschenke organisieren etc. Nebenbei noch Zertifikate erneuern (ja, ich weiß, der IMAP-Server fehlt noch) und packen müsste ich natürlich auch noch…

Ungeplante Migration

Uff, Was für ein Marathon. Eigentlich hatte ich am Freitag ja noch gute Laune, als der Postbote – passend zum freien Tag – meinen neuen Server durch die Tür schleppte. 2 Sockel mit je einem soliden Xeon 3.06GHz, 4GB RAM und netten Spielereien wie z.B. IPMI (aka mein BIOS kann TCP/IP) sollten wieder für einige Zeit Beschäftigung bieten. Außerdem ist er deutlich leiser und dank Speedstep & Co dürften auch die Stromkosten etwas sinken. Da allerdings mit der neuen Hardware einige Anschlüsse wegfallen wollte ich eigentlich langsam umsteigen. Erst mal in Ruhe ein aktuelles Gentoo drauf, dann meine Steuerung passend umstellen und schlussendlich dann den alten Server abschalten.
Nunja, das war der Plan, die Praxis kam etwas überraschender. Gerade hatte ich das frische Gentoo auf der neuen Kiste gebootet und eine ellenlange Liste an Portage übergeben gab es als Quittung nur eine Fehlermeldung: Der Portage-Tree wäre ungültig. Huh? Der Tree liegt auf meinem Server und ist per NSF an alle Rechner verteilt – was soll da jetzt auf einmal ungültig sein. Die Antwort war nicht sehr erfreulich: Mein alter Server hatte den Dienst quittiert. Offenbar waren die frostigen Temperaturen zu viel für eine LAN-Karte, die nun den ganzen PCI-Bus lahmlegte. Naja, also die große Auswahl: Weiter arbeiten ohne Internet und mit “lediglich” 100MBit/s im LAN oder direkt den neuen Server fertig aufsetzen. Naja, dir Grundfunktionen sollte der Neuling packen – Routing steckt in einer VM und zur Steuerung reicht PHP. PHP ist schon drauf, also Platten und Karten umgebaut und gestartet. Schnell noch VMware installieren – ach halt. Kein Internet. Auf den alten Platten lagen natürlich auch die Distfiles und somit eine passende Version des VMware Servers. Installiert, Konfiguriert, Gestartet, Connected, … nichts. Keine Reaktion. Hier macht sich der große Nachteil von Closed Source bemerkbar: Debuggen Fehlanzeige. “Es ist ein Fehler aufgetreten – der Fehler lautet:” – nunja, kein Fehler ist auch ein Fehler.

OK, also den VMware-Server auf meinem Laptop installiert und notdürftig den Router zum Booten verholfen. Im Netz auch nichts Neues. Viele kennen den Fehler, nur eine Antwort sucht man vergebens. Mein erster Gedanke war nun direkt auf KVM zu setzen, da dies inzwischen sogar PCI-Karten an VMs weitergeben kann lässt sich damit viel Zeit vertreiben. Dummerweise unterstützen die CPUs keine Hardwarevirtualisierung, womit nur QEmu übrig bliebe. QEmu ist die Lösung, die mir schon öfter Offline-Tage beschert hatte, weil der Netzwerkstack nicht immer so will wie ich. Dann kam mir wieder VMware in den Sinn – die Version 2 des Servers ist seit kurzem stable, im entsprechenden VMware-Overlay fand sich auch schon ein passendes Ebuild und siehe da: Nach etwas gebastel startet sogar das neue Webinterface. OK, ich musste zwar den halben Laptop neu kompilieren, weil das Plugin nur mit USE=”accessibility” funktioniert, aber immerhin konnte ich danach meine zwischenzeitlich neu geladene Version von Endian in eine serverseitige VM bannen.

Nächste Baustelle war meine Steuerung. Die Relaiskarte mit serieller Schnittstelle lässt sich ja noch recht einfach zur Zusammenarbeit überreden, bei meinen Schaltergebastel am Parallelport ist das schon schwerer: Zwar ist das Ganze prinzipiell auch mit dem neuen Server möglich, aber der Parallelport ist hier nur intern auf einem Pfostenstecker ausgeführt. Dumm, wenn man seinerzeit neben den Drähten auch die nötigen Widerstände direkt auf den Sub-D-Stecker gepflastert hat. Als Lösung muss wie immer der Holzhammer her: Jetzt pollt ein kleiner Atmega8 die Schalter und gibt die Daten seriell an den Server weiter. Als kleiner Bonus fragt der in der Leerlaufzeit noch meine 1wire-Thermometer ab, sodass ich trotz der Blockade beider COM-Ports nicht auf die Temperaturen verzichten muss. Auf Dauer auch keine Lösung, dafür habe ich wie schon erwähnt andere Pläne: Nachdem ich während dem Kompilieren etwas mit meinem AVR-Zeugs gebastelt habe konnte ich die ersten beiden MCP2515, trotz der von mir gehasstem SMD-Bauweise, zum reden bringen. Das ganze war so stabil, dass jetzt direkt ein kleines Paket mit MCP2515s zu mir unterwegs ist (diesmal in DIP). Dabei sind auch ein paar weitere Atmega’s – u.A. passend für einen iSysBus Devnode.

Inzwischen geht also sogar das Licht an, wenn ich den Schalter betätige und “mein” Internet ist wie auch die Datenfreigaben zurück auf dem Schirm. Einzige dringende Problemstelle ist das Soundsystem: Meine alte Soundkarte lässt sich nicht in den neuen Slot prügeln – die Karte besteht auf ihre 5V Versorgungsspannung, mein Server hält nur Slots für 3,3V bereit. Schlecht, wenn der Server normal als Wecker dient: Zwar sollte mein Handy hier temporär ausreichen, aber irgendwie ist das nicht immer laut genug :/. Naja, ich mach mich dann auf die Suche nach einer passenden Soundkarte, aber erst mal begebe ich mich jetzt wieder an meinen Terminkalender: Die ersten Konzerttermine für 2009 zeichnen sich ab um zwischen Weihnachten und Neujahr war ja auch noch Etwas.

Mediacenter Zwischenstand II

Ein Schritt weiter und zwei zurück – so ähnlich komme ich mir momentan bei meinem Mediacenter vor. Zum einen hat sich am Interface wieder was getan: Die Zimmersteuerung (Licht u.Ä.) lässt nun über eine virtuelle 3D-Ansicht des Zimmers kontrollieren, Videos haben dank Amazon noch bessere Cover und ein Feedreader im Iframe rückt immerhin ein paar Nachrichten raus. Systemmäßig läuft das Frontend auf einem alten Laptop – theoretisch. Zwar zeigen sich selbst hochauflösende Inhalte und DVDs nun ohne Ruckler, aber die Anbindung von Touchscreen und die Energieverwaltung mit TuxOnIce und Wake on LAN sind alles andere als zuverlässig – zudem erschweren Probleme mit Pulseaudio die Anbindung an mein Soundsystem. Sofern ich mir den neuen Server hole wird wohl dieser wieder dran glauben müssen.

Bei den Sensoren sieht es ähnlich aus: Zwar ist die Hardware für mein Rauch- und Temperaturmeldesystem am Bildschirm soweit fertig, aber irgendwie bekomme ich das Aufbügeln für die Prototyp-PCBs nicht mehr hin (hat Reichelt neues Papier?). Tja, leider sind Softwaresimulationen oder Steckboardgebastel nicht wirklich zuverlässig, daher siehts Softwaremäßig hier noch recht dünn aus.

Etwas besser sieht es bei den Planungen aus das Steuersystem auf meine zukünftige Wohnung auszudehnen – Hier ist die derzeit eingesetzte parallele Signalisierung zum Server natürlich fehl am Platz. Bei meinen Recherchen zum Thema Hausbus bin ich bereits vor längerem beim iSysBus gelandet, einem offenen Projekt, welches auf CAN basiert. Zwar ist die Seite nicht gerade aktuell, aber im IRC und auf dem SVN-Server wird fleißig gewerkelt: Die ersten Node-Prototypen wurden in den letzten Wochen gefertigt und werden momentan von den Aktiven auf µC und Interrupts geprüft. Wenn das ganze für mich aktuell wird hat der Bus recht gute Chancen: CAN ist weit verbreitet und sehr robust, also gut geeignet für eine solche Steuerung. Zudem verwendet iSysBus ebenfalls meine Lieblinge aus der AVR-Serie, was mir bei der Wartung sehr entgegen kommt.

btw: Woran merkt man, dass man sich schon an eine Haussteuerung gewöhnt hat? Wenn man im Büro bei Dämmerungsbeginn instinktiv mit der Maus auf die Stelle im Panel klickt, an der zu Hause der “Licht einschalten”-Button sitzt. Schade, es war dummerweise nur Firefox.

Druck von oben – ein Barometer mit AVR

Nachdem inzwischen Temperatursensoren und Feuchtigkeitsmessung an meiner “Wetterstation” recht gut funktionieren ist es Zeit für das nächste Modul: Ein Barometer. Passend dazu konnte ich einen MPX4115A von Motorola aus einem anderen Gerät ausschlachten. Dummerweise bewegen sich die interessanten Messwerte alle in einem sehr kleinen Bereich, was den 10Bit AD-Wandler des ATMega an seine Grenzen treibt. Zwar gibts ungefäre Messwerte, aber die Schwankungen waren für meinen Geschmack zu groß. Fündig wurde ich bei tuxgraphics, welche eine eigene “Wetterstation” im Angebot haben. Auch dort kommt ein MPX4115A zum Einsatz, der wird aber mittels eines TLC272 entsprechend verstärkt. Der TLC272 kommt zum Einsatz, da dieser nicht wie die meisten eine negative Spannung benötigt, sonder sich auch mit einer einzelnen +5V-Spannung begnügt.

Da tuxgraphics die interne 1,1V-Referenz ihres ATMega88 nutzen musste ich etwas dran drehen, denn ich habe bei meinem ATMega8 nur die Wahl zwischen 2,56V oder 5V – da letztere nach einigen Berichten stabiler wäre kommen also +5V als Referenzspannung zum Einsatz.

Wirklich verstehen tue ich die Schaltung zwar nicht, aber ich denke, dass das ganze so einigermaßen stimmt – für die letzten 18 Stunden hatte ich auf jeden Fall den selben Luftdruckverlauf wie eine angrenzende Wetterstation. Werde das Ganze noch einige Zeit weiter beobachten.

Hier der ADC-Relevante Teil meiner Schaltung:

Bild: http://adlersa.yotaweb.de/blog/wp-content/uploads/2008/07/admpx.png
OpAmp und MPX4115A an ATMega8

Die Formeln sehen momentan so aus:

$r1=100;
$r2=11;
$vcc=4.93;
$ref=3.82;
$offset=-2; //Druck Differenz zu NN und Messfehler
//$adc=Messwert

$vin=($ref+($vcc/1023*$adc/($r1/$r2+1)));
$hpa=($vin/$vcc+0.095)*1111.11+$offset;