ShortNews

Dienstag, 19. Juni 2012

Die Rezeptseite zur Hochzeit meines Bruders

Zur Hochzeit meines Bruders sollten wir Gäste uns eine Seite für ein gemeinsames Kochbuch einfallen lassen. Da ich schon seit Jahren ein Projekt mit einem Mikrocontroller realisieren wollte, aber nie eine gute Idee für dessen Verwendung hatte, habe ich mir gedacht, ich baue einen solchen in eine Rezeptseite ein. Anfänglich sollte diese nur leuchten aber dann nahm ich mir vor, noch einen Soundgenerator zu programmieren, um auch ein wenig mit Timern, Interrupts usw. in Berührung zu kommen.

Zunächst ein paar technische Details

Beim Herzstück handelt es sich um einen ATMEL ATmega 644 Mikrocontroller (µC) im TQFP-Gehäuse mit 44 Pins (L x B x H nur 12 x 12 x 1,2mm). Also um einen Chip, auf dem nicht nur die Recheneinheit (Prozessor), sondern auch der Arbeitsspeicher (4kB), der Speicher für das Programm (64kB) usw. drauf sind.

Anfangs wollte ich einen ATtiny 2313 nehmen aber ich habe schnell gemerkt, dass sein 128Byte Arbeitsspeicher und 1kB Programmspeicher niemals ausreichen. Die längeren eingegebenen Melodien sind jeweils schon über 1kB groß.

Nutzt man keine externe Taktquelle (er läuft mit der internen 8MHz Clock) und die ISP-Programmierschnittstelle, hat man 29 Aus-/Eingangspins, mit denen ich 28 Leuchtdioden (LEDs) und einen Lautsprecher ansteuere.
Der Lautsprecher hat 0,25W@32ohm und hängt daher nicht direkt an einem µC-Ausgang, sondern an einem Transistor (BC817-40 SMD).
Ich habe SMD-Bauteile gewählt, damit die Seite möglichst dünn wird. Im Endeffekt ist sie knapp 3mm dick geworden. Es wäre eigentlich noch einen Millimeter dünner gegangen, doch habe ich mich aufgrund der Stabilität für einen etwas stärkeren Karton entschieden.

Einen der beiden 8-Bit Zeitgeber des µCs nutze ich für den Takt. Also dafür, dass die LEDs wechseln und die Musiknoten sich ändern. Den 16-Bit Zeitgeber nutze ich zur eigentlichen Tonerzeugung.
Aber genug zu den technischen Daten.

Das Löten der SMD-LEDs

Probleme hatte ich mit den SMD-Leuchtdioden. Es gab zwar 2mm Dioden, doch hatten diese eine zu hohe Stromaufnahme, weshalb ich mich für SMD-LEDs entschieden habe, die mit 2,85V und bis zu 280mcd bei nur 5mA extrem hell sind. Leider sind diese nichts fürs Löten mit der Hand (es sei denn, man ist ein Roboter), da sie nur 1,0 x 0,55 x 0,3 mm klein sind (siehe Fingerkuppe):


Ursprünglich wollte ich direkt 0,3mm dünnen Kupferlackdraht anlöten, nur ist dieser ja in etwa so dick, wie die LED breit ist. Ich hatte dann die Idee, zwei dünne Kupferklebebänder mit einem möglichst geringen Abstand auf ein etwas dickeres Papier zu kleben, damit es nicht bei 450°C Löttemperatur gleich wegkokelt. Dabei habe ich etwa 60% Ausschuss generiert und wenn es geklappt hat, sah das leuchtende Ergebnis so aus:

Dann habe ich die Doppelstreifen mit den LEDs in einzelne kleine Pads geschnitten, die ich auf dem unteren Blatt der Rezeptseite aufgeklebt habe. Auf dem folgenden Bild kann man sehen, wie klein ein Pad ist und wie winzig eine LED inmitten des Pads:

Danach habe ich die Kupferlackdrähte angelötet:


Die Softwareentwicklung und Tests

Um überhaupt schon einen µC programmieren und testen zu können, habe ich mir ein Steckboard gekauft und nicht eine der fertigen Entwicklerplatinen, die mehrere zig Euro kosten und teilweise nur recht unflexibel zu beschalten sind.
Einen mit AVRDUDE auch unter Linux funktionierenden USB ISP-Programmer gibt es schon recht günstig, die passenden Kabel sind schnell gelötet und das Steckboard kann man auch zum Entwickeln anderer Schaltungen nutzen. Bestückt habe ich es dann mit einem ATmega 644 im DIP-Gehäuse, normalen LEDs und einem Piezo-Schallgeber:


Ich programmiere ihn in C und zwar mithilfe von Eclipse, da es dafür das AVR Eclipse Plugin gibt, mit dem ich sehr gut ganz ohne AVR Studio auskomme.

Zur Software sei nur so viel erwähnt, dass man Lieder und Leuchtmuster relativ einfach als Zeichenketten eingeben kann. Dazu habe ich mir eine Reihe von rudimentären Befehlen überlegt.
So sieht die Zeichenkette für Mendelssohns Hochzeitsmarsch beispielsweise wie folgt aus:
 const char SND_STR00[] PROGMEM = "M8I08"
  "P1P2 B24B27P6 B24P6 B24B27P6 B21 P2 B24B27P6 B24P6 B24B27P6 B21 P2 B24B27P6 B24P6 B24B27P6"
  "D326P6 D34D37P6 D34P6 D34D37P6 D326P6 D34D37P6 D34P6 D34D37P6"

  "F326P6 F34F37P6 F34P6 F34F37P6 F326P6 F34F27P6 F34P6 F34F37P6"

  "C41 B313 f33  A32 G325P5 F32 D325 G25"
  "C34 D34 C34 D34 C34 D35 C34 B25 C34 D32 G224 D34"
  "E32 C23 E23 G23 C33 E33 G33"
  "C41 B313 f33  A32 G325P5 F32 D325 G25"
  "C34 D34 C34 D34 C34 D35 C34 B25 C34 E32 D324 E34"
  "D31 C33C35C37 P4P6P7 C24C27P6 C24P6 C24C27P6"
  "J----01EC----02FA----02FA----01EC "
  "C226P6 C24C27P6 E24E26 G24G26G27 C32 C24C27P6 C24P6 C24C27P6"
  "C22 E24E27P6 G24P6 C34C37P6 E32 C24C27P6 C24P6 C24C27P6"
  "E226P6 E24E26E27 G24G26 C34C36C37 E32 G24G26G27 C34C36 E34E36E37"
  "G32 G24G26G27 C34C36 E34E36E37 G32 C24C26C27 E34E36 G34G36G37"
  "J03D0--------------------00D9 "
  "C316P6 C32C336P6 C33"
  "E32 D325P5 B22 G226P6"
  "G22G236P6 C336P6 C32C336P6 E336P6"
  "E32 D33D35D37 P4P6P7 B22 G226P6"
  "E213 E336P6 E313 G336P6"
  "G31 F33F35F37 P4P6P7 E32"
  "D32 c324 E34 D32 A224 C34"
  "B22 G32 A32 B32"
  "J--------00D9----00D9 "
  "G21 F213 E236P6  E21 F214 P4"
  "F11 E113 d136P6  d11 E114 P4"
  "E31 D313 C33  E31 D313 C336P6"
  "C32 B22 A22 B22"
  "C32 G24 g24 G24 g24 G24 g24 G24 g24 G24 g24 G24 g24"
  "E31 D313 C33  E31 D313 C336P6"
  "C32 B22 A22 B22"
  "C30 P0";

Ein "C32" steht beispielsweise für ein C der 3. Oktave und der Länge 1/2² (also einer Viertelnote). Es gibt dann noch Befehle für die Schläge pro Minute, für Wiederholungen von Passagen, Pausen etc.
Zwar gäbe es Möglichkeiten die Melodien in einem viel platzsparenderen  Binärformat zu speichern, doch würden sie sich dann nicht so ohne Weiteres eingeben lassen.

Das eigentliche Programm ist auf dem Chip weniger als 1 kB groß. Aber auch zusammen mit den bisherigen Melodie- und Leuchtzeichenketten ist es mit ~8kB noch weit weg von den möglichen 64kB.

Das Design

Ein Problem bei der Bastelangelegenheit war es, transparente Folien in den richtigen Farben zu finden. Erst wenige Tage vor der Hochzeit habe ich einen Händler für professionelle Bühnentechnik gefunden, der sehr viele verschiedene Farbfolien als Filter angeboten hat. Da es aber keine in braun gab, hatte Kathy die Idee, dafür einfaches Drachenpapier zu nehmen und so haben wir die benötigten Farben dann doch alle irgendwie zusammengekriegt.
Mithilfe Kathys schöner Schablonen konnte ich die Muster, welche wir uns zuvor überlegt haben, in den Karton schneiden, der als Versteifung der Seite dient:

Die Folien haben wir dann auf der Rückseite des vorderen Blattes festgeklebt:

Das Zusammenlöten des Mikrocontrollers mit den restlichen Bauelementen

Auch das Löten des µCs hat sich als ziemlich schwierig erwiesen, weil die Beinchen doch sehr dünn und nah beieinander sind. Zudem konnte ich keine Platine nehmen, also musste ich die Kupferdrähte direkt anlöten:

Angetrieben wird das Ganze durch zwei CR2016 Lithiumbatterien mit je 3V Nennspannung und eingeschaltet wird mithilfe eines Magneten, der an zwei Reed-Kontakte gehalten wird. Unten links im Bild ist zudem eine kleine schwarze Buchse zu sehen, mit der die Seite zukünftig umprogrammiert werden kann. So lassen sich nach und nach immer mehr Lieder und Leuchteffekte hinzufügen.

Die fertige Rezeptseite

 

 

Danksagung

Danke, Kathy, für die Hilfe bei den ganzen Blättern, den Folien, fürs Weghören, wenn ich hier und da geflucht hab', das Ertragen des Hühnchengeruchs beim Löten und natürlich auch für das ganze Design und den Text!

Die Lieder der bisher eingegebenen Melodien im Original

Dieses hier ist noch nicht so alt und auch nicht sehr bekannt aber es hat das Potential, ein Klassiker zu werden: