Archiv der Kategorie: AVR

Mein kleiner Microcontroller

Erste iSysBus-Prototypen

Heute brachte der Postbote etwas ganz besonderes: Die ersten Prototypen für iSysBus-Nodes. Platinen für zwei Devnodes und zwei IO-Nodes sollen die ersten Auswüchse des CAN-basierten Bus-Systems darstellen. Inzwischen ist von jeder Sorte einer komplett aufgebaut und durchgemessen – ja, ich habe den Kampf gegen die SMD-Bauteile gewonnen. Morgen darf dann der Devnode seine ersten Lebenszeichen in Form von Debugmeldungen von sich geben.
19176

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)

Grüße aus dem Keller

Meine Ausgrabungen sind inzwischen etwas weiter fortgeschritten – den Knick konnte ich etwas mindern und auch am anderen Ende waren meine Angelkünste erfolgreich. Inzwischen liegt ein 4-adriges Datenkabel von meinem Serverräumchen auf dem Speicher bis in den Keller und transportiert die Daten eines Dallas 1Wire-Bus. Angeklemmt ist das ganze testweise an mein Temperaturmesssystem – zwar verursacht die lange Leitung an dem Shared-Bus so einiges an Kollisionen (kein Wunder, da es momentan eher eine Sternverkabelung als ein Bus ist), aber der Sensor im Keller meldet sich immerhin mit seiner Seriennummer.

Ausspannen zum Urlaubsende

Mein Ringurlaub neigt sich seinem Ende entgegen – ab Morgen werde ich mich wieder leeren Papierschächen und IP-Kollisionen widmen. Was gibts da besseres als zum Abschluss nochmal den heißen Stab aus seinem dunklen Versteck zu holen und damit umher zu wedeln. Löten entspannt halt…
Ergebnis:
16824
Rechts sind 3 Bausätze von Pollin – ein EIA232-TTL-Konverter kann die TTL-Signale eines Mikrocontrollers PC-tauglich machen, ein Step-Down-Wandler kann bei Tests die Spannung zurecht biegen und ein TS317 erfüllt die selbe Aufgabe, kann jedoch auch mit Wechselstrom am Eingang und größeren Stömen umgehen – auf Kosten der Effizienz.
Links ist meine derzeitige Baustelle: Der Controller meines Brandmeldesystems. Oben links ist ein MAX232 samt Elkos und Buchse zur seriellen Kommunikation mit dem PC. Die 2 Chips daneben sind 115er Schieberegister – einer für Alarmmeldungen der Rauchmelder und einer fürs Monitoring derer Stromversorgung. Ganz rechts sitzt ebenfalls ein Schieberegister, dieser ist jedoch ein Ausgang und ist zum ein- und ausschalten der Rauchmelder vorgesehen. Unten Links sitzen unter dem Kühlkörper 2 Step-Down-Wandler, einer baut aus den 18V des Trafos stabile 13,8V zum Laden des Notstromakkus und zur Versorgung des zweiten Wandlers. Dieser nutzt die Netz oder Akkuspannung um 5V zum Betrieb der µCs zu erzeugen. In der Mitte sieht man noch eine LED mit Optokoppler, über diesen kann der Controller feststellen ob der Trafo Strom liefert. Über diesen ist ein Spannungsteiler (2 Widerstände) mit deren Hilfe die Akkuspannung überwacht wird. Rechts ist unter meinem Notizklebzettel ein ATmega8 versteckt, daneben Transistoren zur Ansteuerung der Piezo-Sirene, der Anschluss für den Quittungstaster und eine Duo-LED zur Anzeige des Systemzustandes. Der erste Test lief auch schon ganz gut: Der Controller spricht mit meinem PC und zeigt im Spannungsmonitoring eindeutig wo ich den Stecker gezogen hab (Ja, der Akku ist kaputt).
Bild: https://www.adlerweb.info/blog/wp-content/uploads/2009/06/bmz.png

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…

Kleinkram PHP-Downloadmanager, Spannungsteiler-Rechner und ATX-Powerpanel

So, nachdem ich mich dieses Wochenende mit jede Menge Papierkram rumärgern durfte konnte ich heute doch noch etwas zeit finden um mich 3 kleinen Problemchen anzunehmen, die sich mir in letzter Zeit gestellt haben.


Erste Baustelle war ein Downloadmanager. Dieser sollte zentral auf meinem Server laufen und Downloads sequentiell abarbeiten. Die URLs vorzugsweise aus einer MySQL-Datenbank. Ergebnis sind ein paar PHP-Zeilen – nicht wirklich komfortabel, aber erfüllt fürs erste seinen Zweck.

Downloads werden in die Tabelle queue eingefügt – nur die URL. Der Status setzt sich wie folgt zusammen:
0 -> Offen
1 -> Download gestartet
2 -> Download erfolgreich
3 -> Download fehlgeschlagen

Der Download selbst wird durch wget erledigt, man könnte also z.B. eine maximale Bandbreite o.Ä. festlegen. Bei Abschluss/Fehlschlag eines Downloads wird im Datensatz ein Log angehangen.


Nächste Baustelle: Spannungsteiler. Primitiv, aber immerhin ein Ergebnis: Dieses Script hämmert Bruteforce-Like alle E12-Widerstände bis 1MOhm (oder so) durch und sucht einen passenden Wert um einen Spannungsteiler zu bauen.

Sollte jetzt schon einer sein Mailprogramm offen haben um mir zu schreiben, dass das alles nicht stimmt: Ich weiß es – löscht den Text und schick mir eine passende Formel 😉


Und die letzte Baustelle: Ich habe bereits seit längerem die „Frontpanel“-Anschlüsse meiner PCs (Power-Button, Reset, …) auf ein externes Bedienpult gelegt. Da mir die hardwired-Variante etwas auf den Keks ging und ich ein passendes Ethernet-Gateway bauen wollte gibts nun eine „Spezifikation“ für meine Schnittstelle.

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…

Reparatur-Wochenende

Dieses Wochenende wird repariert – und zwar alles. Los ging es erst mal mit einer etwas ungeplanten Reparatur: Nach einer Party machte mein Kinn Bekanntschaft mit einer Treppe – Pech gehabt. Nach Kurzbesuch im Krankenhaus und etwas unbequemer Nacht dann an meine Elektronik. Erst auf Softwareebene: Mein Relaissystem hat ab und an etwas Packet-loss. Ungünstig, wenn dabei z.B. der Einschaltbefehl des Weckers untergeht. Ein simpler Wrapper prüft nun nach senden des Befehls den Status der Relais und sendet ggf. den Befehl erneut. Direkt danach musste das interne Mailingsystem dran glauben – durch den Wechsel des Mailservers auf meinen neuen Server sind die ins Stocken geraten. Großbaustelle des Wochenendes war die heimische ISDN-Strecke. Der letzte Apparat am Bus funktionierte nur sporadisch. Mit neuem LSA-Verteiler, stundenlanger Adersuche und Korrektur der Abschlusswiderstände sollte das Problem der Vergangenheit angehören. Letztes Projekt bildet fürs Erste eines meiner Funkmikrofone: Da über Funk viel Rauschen auftritt bekommt dieses einen optionalen Kabelanschluss verpasst. Funktioniert soweit auch ganz gut, allerdings ist das Signal sehr schwach und entsprechend immer noch Rauschen vorhanden.Nebenbei bastel ich noch mit WDS herum – die 15EUR-802.11g-Router waren einfach zu verlockend. Leider scheint WPA mit WDS nicht zu funktionieren – schade.

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.