Neuere Stromzähler sind zum Teil mit einem Optokoppler ausgestattet, der für jede verbrauchte Wattstunde einen Impuls liefert (1000 Impulse = 1 kWh). Der Anschluss an einen Arduino gestaltet sich dem entsprechend einfach: D+ Ausgang des Zählers auf 5V legen und den D- Ausgang an einen digitalen Eingang des Arduino anschließen, dieser muss noch mit einem 4k7 Widerstand gegen Masse gezogen werden um ein klares Signal zu erhalten.
Vom Prototyp zur Kleinserie
Published on 2011/07/23
In den letzten Monaten wurde der Prototyp eines Universalladegeräts für Mobiltelefone mit Statusanzeige (nicht angeschlossen, lädt, geladen, Überlast) in einer Kleinserie für “The Electric Hotel” vervielfältigt:
Hier eine kleine Liste der Dinge, die bei der Serienfertigung zu beachten sind:
- Ausreichend Rand um den Nutzen für den Bestückungsautomaten
- Passermarken oder gegenüberliegende Bohrungen auf jeder Platine im Nutzen
- Koordinaten aller Bausteine immer auf die Mitte des Gehäuses beziehen
- Klare Kennzeichnung der Einheiten (mm, cm, inch, mil)
- Gerberfiles des Nutzens, Drillfile, Stückliste und Koordinaten der Bauteile für den Bestücker bereitstellen
- Eindeutige Beschriftung aller beigestellten Bauteile, bei kleinen Bauteilen (0805 und kleiner) durchaus 10% mehr bereitstellen, da der Automat auf dem Weg die Bauteile verlieren kann
- Falls Bauteile nicht bestückt werden sollen, diese trotzdem in die Stückliste als “nicht zu bestücken” aufnehmen
Platinenherstellung
Published on 2011/02/26
Hier eine Anleitung, wie man mit ein wenig Chemie in kurzer Zeit hochwertige Platinen herstellen kann.
Layout erstellen
Das Layout wird mit EAGLE erstellt und gegen die eigenen Design-Regeln geprüft (Ausgehend von den pcb-pool Regeln: Minimale Leiterbreite 6 mil, minmaler Abstand 6 mil, Bohrungen mindestens 0,5mm):

Platinenherstellung continued »
Neues Midi-Pult (Update 4)
Published on 2010/09/25
Nachdem aus dem 120 RGB-LED Projekt ein wunderbares Leitsystem für die Nachrichtenmeisterei bei der Museumsnacht 2010 geworden ist (Video folgt noch), steht nun ein neues Projekt vor der Tür: Ein edles Midi-Pult mit 32 Fadern, 64 Drehencodern und den darin integrierten Tastern.

Zum Aufbau: das Pult ist in zwei Teile, jeweils 19-Zoll/5HE, aufgeteilt. Beide Hälften verfügen über eigenständige A/D-Wandler (MCP3208) für die 100mm Fader und Digital-Inputs (74HC165) für die Encoder und Taster. Diese geben Ihre Daten auf einen zentralen Bus, der von dem Microcontroller auf MIDI umgesetzt wird.
Bei der Wahl des Prozessors standen die üblichen Verdächtigen zur Auswahl (PIC, Atmel und MSP), es ist aber – trotz der anhaltenden Lieferengpässe bei Atmel – ein Atmega328 geworden. Nachdem die Software recht schnell auf dem Arduino lauffähig war, ging es an die Code-Optimierung. Sobald ein wenig mehr IO-Leistung gebraucht wird (für die Encoder werden insgesamt 256 Bit über den Bus geschoben), sollte auf digitalRead und digitalWrite verzichtet werden. Die Umstellung von digitalRead(10) auf ((PINB & 0×04) >>2) brachte Faktor 40, so dass nun auch schnelle Drehungen ohne Verlust von Schritten erfasst werden. Das war dann auch der Abschied von Arduino.App und der Beginn der Umstellung auf Eclipse-CDT, das auch unter MacOS eine gute Unterstützung der kompletten AVR-Suite bietet.
Da das Pult länger halten und angenehm zu bedienen sein sollte, kommen die edlen ALPS-Produkte zum Einsatz, die in Stückzahlen auch bezahlbar sind. Die Encoder stammen aus der Automotive Serie, sind staubdicht und auf 500.000 Zyklen ausgelegt.

Momentan sind die Platinen in der Produktion bei pcb-pool, die Frontplatte wird von Schaeffer-AG hergestellt. Sobald es an den Zusammenbau geht, folgen weitere Bilder.
Update 1:
Mittlerweile gibt es die ersten Bilder von pcb-pool:

Jetzt bleibt nur zu hoffen, dass die Stencils für die richtige Seite angefertigt werden.
Schaeffer hat die Frontplatten bereits gefräst, da der Versand für den 01.10. geplant ist, müssten diese also zusammen mit den Platinen am Samstag in der Post sein.
Update 2:
Es wurde dann doch Montag, aber sowohl die Platinen als auch die Frontplatten waren heute in der Post. Da die Encoder erst am 18.10. geliefert werden, konnten die Frontplatten schon teilweise bestückt werden:

Morgen geht es, sofern die Zeit es zulässt an die Bestückung der Platinen:


Update 3:
Die SMD-Bestückung der kleinen Platinen ist erledigt, nur für die Wandlerplatinen reichte die Lötpaste dann doch nicht mehr. Am Wochenende wird das Gehäuse gesägt und der Aufbau getestet.
Update 4:
Das Gehäuse war dann recht schnell gesägt, die Bestückung erledigt, alle Stecker (68 Stück für die Flachbandkabel im Inneren) verpresst. Der erste Test verlieft fast gut, aber drei Lessons Learned gab es dann doch noch bei dem Projekt:
- Niemals mit 100 nF X7R Abblockkondensatoren geizen
- Einen A/D Wandler immer nur mit einer Taktfrequenz betreiben, die tatsächlich kleiner ist als die maximal zulässige (der Atmel war dann doch schneller als erwartet)
- Traue niemals einem Datenstrom, der seriell übertragen wurde (es kann tatsächlich mal ein Byte fehlen)
Aber nun ist das Pult fertig und konnte erfolgreich am MOTU-828MK2 MIDI-Port betrieben werden, alle 160 Midi-Signale werden einwandfrei übermittelt, in dem zugehörigen Live-Set konnten allerdings auf Grund der Ableton-Einschränkung nur jeweils 128 gleichzeitig getestet werden.
Zum Abschluss noch ein paar Bilder vom fertigen Gerät:


MAX6966 10-Port Led Treiber
Published on 2010/07/13
Auf der Suche nach einer Alternative zu der PIC Ansteuerung der RGB-LEDs fand ich bei Maxim den MAX6966, der einen schöne Lösung für die niedrigen Helligkeitsstufen bietet. Für alle Kanäle lässt sich mit einem gesonderten 3-Bit Register die Konstantstromquelle in 8 Stufen zwischen 1.25 mA und 20 mA einstellen. Wenn ein Kanal einer RGB-Led hell leuchtet spielt die Auflösung der anderen beiden Kanäle ja keine große Rolle mehr.
Für den Hobbybastler ohne Lötstoppmaske leider nicht gut zu verarbeiten: Entweder im 16-poligen TQFN (0,5 mm Pinabstand) oder QSOP Gehäuse (0,635 mm Pinabstand). Zudem sind zwei Stromversorgungen einzuplanen: Einmal die 3,3 Volt Logiklevel und eine zweite für die LEDs (sollte mindestens 1 Volt über der Vorwärtsspannung liegen). Bei meinen bevorzugten Cree CLV1A-FKB LEDs also mindestens 4,2 Volt.
Da die Ausgänge aber auch parallel geschaltet werden können, sind auch 50 mA LEDs (wie z.B. OVSTRGBBCR8 v0n Optek) direkt ansteuerbar.
Vuvozero (filter vuvozela sounds from soccer games)
Published on 2010/06/13
For all people who feel annoyed by the bee-swarm sound, I’ve created a small Ableton Live Set containing a filter for the main frequencies of the vuvuzela.
Installation:
- Download Ableton Live (Demo Version) from ableton.com.
- Download Vuvuzero.als.zip decompress and open the file with Ableton.
Usage:
Put channel 1 into record mode (by clicking the small circle below the “S” in the first track). Connect your satellite receiver to the line in of your PC/Mac and the line out to your amplifier.
Enjoy the games.
Serial RGB-Dot (Update 4)
Published on 2010/06/01
Ein neues Projekt ist gerade unterwegs: Ähnlich dem FNordlicht bzw. BlinkM suchte ich eine Lösung eine einzelne RGB-LED seriell anzusteuern, die 100 einzelnen LEDs werden etwa einen Meter entfernt voneinander sein, so dass die bereits existierenden RGB Treiber für 8 oder 64 LEDs nicht wirklich praktikabel oder zu teuer waren. Momentan liefert digikey die PIC12F508 samt RGB-LEDs und pcb-pool wird nächste Woche die passenden Platinen in den Briefkasten werfen.
Statt I2C wird in dem PIC ein 24-Bit Schieberegister mit Latch realisiert. Nach dem Latch liegen dann die drei Software PWMs. Da links und rechts auch noch Lötpads hinmüssen, ist die Platine mit 10mmx17mm dann doch größer geworden als ursprünglich geplant, aber immer noch kleiner und deutlich günstiger.

Der PIC-Code samt Arduino-Library folgt sobald die ersten Tests erfolgreich waren.
Update 1:
Die Platinen sind zwar noch unterwegs, aber der PIC-Code ist mittlerweile fertig. Vorerst nur mit einem 8-Bit PWM, später folgt vielleicht ein Upgrade auf 10-Bit.
Ursprünglich sollte der Latch über den Watchdog-Timer erfolgen (wenn 18ms lang kein Taktsignal vorliegt, werden die Daten aus dem Schieberegister in die PWM-Register kopiert). Da unter den einzelnen Prozessoren der WDT-Timer aber schwanken kann (laut Datenblatt zwischen 9ms und 30ms) erfolgt jetzt die Übernahme über den integrierten Timer nach 10ms.
Update 2:Von pcb-pool kam jetzt das erste Bild vom Produktionsprozess. So wie es ausschaut, wird am Wochenende alles zusammengebaut.
Update 3:Alle Platinen sind nun bestückt und verlötet, morgen erfolgt der Upload des PIC-Codes:
Update 4:Die LEDs sind jetzt auch alle verbaut, fehlt nur noch der Funktionstest.
;; PWM-Code fuer RGB-Dot
;; Copyright 2010 Wolfgang Jung (w@elektrowolle.de)
list p=12f508
#include p12f508.inc
__CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF & _IntRC_OSC
;; Register
REG_B_RED EQU 0x08
REG_B_GREEN EQU 0x09
REG_B_BLUE EQU 0x0A
REG_C_RED EQU 0x0B
REG_C_GREEN EQU 0x0C
REG_C_BLUE EQU 0x0D
REG_LCLK EQU 0x0E
REG_OVERFLOW EQU 0x0F
REG_PWMCNT EQU 0x10
REG_WORK EQU 0x11
;; Pinassignments
PIN_RED EQU H'0'
PIN_GREEN EQU H'1'
PIN_BLUE EQU H'2'
PIN_SDIN EQU H'3'
PIN_SDOUT EQU H'5'
PIN_SCLK EQU H'4'
;; Konstanten
DEF_OPTION EQU 0xC7 ; Kein Wakeup, Kein Pull-Up, TOCS=fOSC/4, TOSE=1, PSA=TMR0, Prescale=256
DEF_TIMEOUT EQU 39 ; Bei 4 MHz und Prescale=256 -> etwa 10ms
ORG 0x000
;; startup
MOVLW DEF_OPTION
OPTION
;; Port-Config OIIOOO
MOVLW 0x18
TRIS GPIO
L_MAIN
MOVF GPIO, W ; Lade Port nach W
XORWF REG_LCLK, W ; XOR mit letztem CLK
MOVWF REG_WORK
BTFSS REG_WORK, PIN_SCLK ; Flanke von SCLK?
GOTO L_NO_EDGE
L_EDGE_DETECTED:
BTFSC REG_LCLK, PIN_SCLK
GOTO L_FALLING_EDGE
L_RISING_EDGE:
;; steigende Flanke -> SDIN auswerten
CLRF REG_OVERFLOW
BCF STATUS, C ; clear CARRY-Flag
BTFSC GPIO, PIN_SDIN
BSF STATUS, C ; CARRY-Flag enthaelt nun SDIN, nun das Bit durch die 24-Bit schieben
RLF REG_B_RED, 1
RLF REG_B_GREEN, 1
RLF REG_B_BLUE, 1
;; letztes Bit merken fuer das naechste Modul
BTFSC STATUS, C
BSF REG_OVERFLOW, 0
GOTO L_CLR_WDT
L_FALLING_EDGE:
;; Fallende Flanke -> letztes Bit wieder auf SDOUT schreiben
BCF GPIO, PIN_SDOUT
BTFSC REG_OVERFLOW, 0
BSF GPIO, PIN_SDOUT
L_CLR_WDT:
;; Timer0 zuruecksetzen, Prescaler muss danach angepasst werden
MOVLW 0
MOVWF TMR0
MOVLW DEF_OPTION
OPTION
;; letzten Input merken
MOVF GPIO, W
MOVWF REG_LCLK
L_NO_EDGE:
;; Keine Flanke seit DEF_TIMEOUT timer0
MOVLW DEF_TIMEOUT
SUBWF TMR0, W
;; Prescaler muss angepasst werden
MOVLW DEF_OPTION
OPTION
;; Skip, wenn tmr0 < DEF_TIMEOUT
BTFSS STATUS, C
GOTO L_DO_PWM
L_COPY_BUFFER_TO_PWM:
;; Daten aus Schieberegister in PWM-Register
MOVF REG_B_RED, W
MOVWF REG_C_RED
MOVF REG_B_GREEN, W
MOVWF REG_C_GREEN
MOVF REG_B_BLUE, W
MOVWF REG_C_BLUE
L_DO_PWM:
DECF REG_PWMCNT, F ; Ist pwmCnt == 0?
BTFSS STATUS, Z
GOTO L_PWM_RED
;;; PWMCnt == 0 -> Also alle Pins auf high
BSF GPIO, PIN_RED
BSF GPIO, PIN_GREEN
BSF GPIO, PIN_BLUE
L_PWM_RED:
MOVF REG_PWMCNT, W
SUBWF REG_C_RED, W
BTFSS STATUS, Z ; Skip, wenn pwmCnt > red
GOTO L_PWM_GREEN
MOVF REG_C_RED, W ; Wenn red==0, dann niemals an
BTFSS STATUS, Z
BCF GPIO, PIN_RED
L_PWM_GREEN:
MOVF REG_PWMCNT, W
SUBWF REG_C_GREEN, W
BTFSS STATUS, Z
GOTO L_PWM_BLUE
MOVF REG_C_GREEN, W
BTFSS STATUS, Z
BCF GPIO, PIN_GREEN
L_PWM_BLUE:
MOVF REG_PWMCNT, W
SUBWF REG_C_BLUE, W
BTFSS STATUS, Z
GOTO L_MAIN ; Zurueck zum Anfang
MOVF REG_C_BLUE, W
BTFSS STATUS, Z
BCF GPIO, PIN_BLUE
mbed.org als Alternative zu Arduino
Published on 2010/05/09
Nach dem Erfolg des Arduino ist NXP auch auf den Zug der einfachen Mikrocontrollerentwicklung aufgesprungen. Unter mbed.org gibt es die Übersicht der beiden verschiedenen Modelle LPC2368 (ARM7) und LPC1768 (Cortex-M3), die einen interessanten Ansatz mit einem Online-Compiler umsetzen (auf dem eigenen Rechner muss keine Entwicklungsumgebung installiert werden).
Preislich sind beide auf dem gleichen Niveau (Einzelpreis 48,80€ bei Farnell) und durchaus eine Alternative zu einem Arduino, da beide doch um einiges leistungsfähiger sind. Hier der Auszug aus dem Datenblatt:
- 100 MHz operation
- 512 KB of Flash memory
- 64KB of SRAM
- 10/100 Ethernet MAC
- USB 2.0 full-speed device/Host/ OTG controller with on-chip PHY
- Four UARTs with fractional baud rate generation, RS-48, modem control, and IrDA
- Two CAN 2.0B controllers
- Three SSP/SPI controllers
- Three I2C-bus interfaces with one supporting Fast Mode Plus (1-Mbit/s data rates)
- I2S interface for digital audio
Einen konkrete Anwendung schwebt mit zwar noch nicht vor, aber das wird sich bestimmt noch ergeben.
Einzige Minuspunkte, die ich bislang finden konnte sind der nur einfach vorhandene 12-Bit DAC und das sämtlicher Code auf den NXP-Servern liegt.
Falls doch mehr DAC-Kanäle benötigt werden, scheint ein TLV5628, TLV5608, TLV5610 oder ähnliches ganz brauchbar zu sein (8-Fach, 8/10/12-Bit DAC über SPI).
Wichtiger Hinweis am Rande: Sämtliche Digital-IOs sind zwar 3,3V aber 5V tolerant.
16 Bit Port Extender mit I2C-Bus PCA9555
Published on 2010/04/26
Texas Instruments bietet mit dem PCA9555 einen 16 Bit Port-Extender an, von dem maximal 8 Stück parallel an einem I2C Bus betrieben werden können. Insgesamt können so 128 individuell als Ein- oder Ausgang konfigurierbare Leitungen bereitgestellt werden, wobei alle Eingänge bei jedem Flankenwechsel einen Interrupt auslösen.
Die Ausgänge sind in der Lage 25 mA dauerhaft gegen Masse zu schalten, für LEDs also ausreichend.
Sobald die Bestellung da ist, wird an dieser Stelle die dazu passende Arduino Bibliothek veröffentlicht.
Sammlung von Tipps und Tricks
Published on 2010/04/20
Microchip hat unter 01146B.pdf eine schöne Sammlung an Tipps zusammengestellt, die sich auch auf andere Mikroprozessoren anwenden lassen.
Aus der Übersicht:
- 4×4 Keyboard with 1 Input
- 5V → 3.3V Active Clamp
- Brushless DC Fan Speed Control
- Creating a Dithered PWM Clock
Und viele weitere. Insbesondere Punkt 2 war für mich eine überraschend einfache Lösung für das übliche Problem mit Klemmdioden (Sättigung der 3,3V Schiene):




