Elektronik


Diese Seite ist chronologisch aufgebaut. Die neusten Sachen kommen zuerst, älteres Zeug ist weiter hinten, und konsequenterweise ist dann eine kleine Einführung in Elektronik erst ganz am Schluss zu finden.

Alle Programme dieser Seite sind Opensource/Freeware.


Inhaltsverzeichnis:

RGB-LED-Matrix
Erste Versuche mit neuem ATtiny10
Reise-Wecker mit BCD-Anzeige
Text über RS232 auf TV-Monitor ausgeben
IR-Fernsteuerung
Kühlschrank-Thermometer
Grafik-LCD
Selbstbau-Taschenrechner
Quarzfrequenz-Messung mit Funkuhr
Eisenbahn-Steuerung
Modellbau-Servos
Scatter, Lichtstreuung-Messgerät
Solarzellen, Laderegler, Nachführung
Hardware-Zufallszahlengenerator
Licht-Wecker
AVR-Microkontroller
Alte Projekte (Funkuhr, Schachuhr, ...
kleine Einführung in Elektronik (noch unvollständig)


RGB-LED-Matrix mit ATmega1284P

Modul-Rueckseite Modul-Vorderseite-mit-Lichter LED-Matrix mit Nimm-Spiel
Diese LED-Matrix besteht aus 200 RGB-LEDs. Das ganze besteht aus 4 Modulen, die jeweils 50 LEDs enthalten und von einem Microkontroller ATmega1284P angesteuert werden. Die Anzeige besteht aus halbdurchsichtigem weissem Kunststoff, der mit dem 3D-Drucker ausgedruckt wurde. Damit erscheint jede LED als ein viereckiges Licht.

Quellprogramm: ledmatrix.tar.gz
Im Quellprogramm ist bisher nur ein Testprogramm und ein erstes einfaches Spiel (Nimm) enthalten.


Erste Versuche mit neuem ATtiny10

Der neue Tiny10 ist sehr klein, er hat nur 6 Pins. Es gab mal ein Tiny10 mit mehr Pins aber ohne RAM, oder zumindest ein Preliminary-Dokument dazu. Der neue hingegen hat wenigstens 32 Byte RAM. Die grösste Einschränkung ist wohl, dass er nur 16 Arbeits-Register hat, also nur r16 bis r31. Die Register r0 bis r15 fehlen!

Um zu compilieren waren ein paar kleine Änderungen in avra notwendig. Im Wesentlichen in device.c der neue Tiny10 definiert und der alte umbenannt. Entsprechende Dateien von avra-1.3.0-patch/ im folgenden Archiv nach avra-1.3.0/ kopieren und neu compilieren.

Der grösste Aufwand war es jedoch einen Programmer zum laufen zu bringen. Ich habe es nach längerem Probieren für den All-AVR geschafft.
Dazu musste die Datei 41-atmega.rules nach /etc/udev/rules.d/ kopiert werden, und ausserdem in der Datei /lib/udev/rules.d/69-libmtp.rules die Zeile, die mit ENV{ID_MTP_DEVICE} beginnt auskommentiert werden.

Nach all diesen Vorbereitungen ein kleines Testprogramm für folgende Schaltung erstellt:
Schaltschema-Tiny10-Test2
Die ersten 3 LEDs blinken lassen geht schon mal.
Nach setzen des Fusebits RSTDISBL blinkt auch die vierte LED. Neu programmieren geht dann aber nur noch mit Jumper J1 entfernt und J2 auf 12 Volt gesetzt.
(Wie man RSTDISBL wieder zurücksetzt habe ich noch nicht rausgefunden)

Quellprogramm: tiny10.tar.gz
Eagle-Library: tiny10.lbr
avra1.3-patch: avra-1.3.0-patch.tar.gz (neue Controller: ATmega2560, ATmega1284P, ATtiny10)

weitere Patchs:


Text über RS232 auf TV-Monitor ausgeben

Bei Pollin gibt es einen RS232-BAS-Bausatz. Damit kann man über die Serielle Schnittstelle einen Text ausgeben, der dann an einem Fernseher angezeigt wird. Es sind dabei 20 Zeilen a 27 Zeichen darstellbar.
Der Bausatz funktioniert mit einem Atmega8, einem MAX232 für die RS232-UART-Wandlung und je zwei Widerständen und Dioden für die Video-Ausgabe.

Es gab da beim Pollin-Bausatz ein paar kleine Unzulänglichkeiten:
Auf einem grossen Fernseher wackelte das Bild ziemlich stark.
Auf einem kleinen Monitor war die Schrift nur schlecht lesbar.
Es waren nur ASCII-Zeichen darstellbar, also keine Umlaute und keine Sonderzeichen.

Ich habe also den Atmega8 neu programmiert. Das Wackeln ist damit vollständig verschwunden. Die Schriftgrösse ist jetzt im Programm per Option einstellbar. Dabei resultieren folgende Zeilenanzahlen und Zeichen pro Zeile:
Mit kleiner Schrift: 22 Zeilen a 42 Zeichen
Mit grosser Schrift: 13 Zeilen a 27 Zeichen
Sehr grosse Schrift: 6 Zeilen a 16 Zeichen (die Zeichenbreite kann noch variert werden, so dass sich 14, 16, 18 oder 22 Zeichen ergeben)
Umlaute und diverse Sonderzeichen sind jetzt auch darstellbar. Der Zeichensatz besteht aus total 256 Zeichen.

Eine Version für Grafikausgabe von 320x256 Punkten in Schwarzweiss habe ich auch programmiert. Dazu wird aber ein Atmega1284P und somit eine neue Schaltung benötigt.

Quellprogramm: rs232bas.tar.gz (aktuelle Version: 1.4)
Testprogramm: seriell.tar.gz Serielle Schnittstelle unter Linux austesten (MacOSX sollte auch gehen, Windows braucht noch Anpassungen)
Fonteditor: fonteditor.tar.gz Hilfsprogramm zum eigene Fonts erstellen, die in rs232bas (Option in basi.asm) direkt verwendet werden können.

Farbiger Text und Grafik auf TV-Monitor ausgeben

Diese neue Variante funktioniert nur mit einem Atmega1284P. Hier die entsprechende Schaltung:
schaltung_1284p
Für die farbige Ausgabe wird ein RGB-Scart-Eingang benötigt. Normalerweise am Fernseher mit Ext1 bezeichnet.
Statt dem USB-UART-Modul könnte man natürlich auch RS232 verwenden. Bei Verwendung von USB sollte die USB-Spannungsversorgung ausreichen, so dass kein externes Netzteil benötigt wird.
Ausser farbigem Text können auch grafische Elemente gezeichnet werden: Punkte, Linien, Vierecke, Kreise und Ellipsen.

Quellprogramm: basirgb.tar.gz (aktuelle Version: 0.3)


IR-Fernsteuerung

Funktioniert gleich wie die IR-Fernbedienungen von TV, Radio usw. Aber fast jede Fernbedienung funktioniert jeweils wieder mit einem anderen Format. Ein gut dokumentiertes Format ist das RC5-Format
Bisher erst der Sender realisiert. (Universalfernbedienung, bisher nur 3 Formate)
Für den Empfangs-Teil gibt es günstige Module wie z.B. TSOP 4838.
Als Sender kann z.B. die IR-Diode LD274 genommen werden.
Sender: geschlossenes_Geraet   Innenleben: offenes_Geraet

Quellprogramm: irfernbedienung.tar.gz


Kühlschrank-Thermometer

Damit kann man die Temperatur im Kühlschrank überwachen, und den Temperaturverlauf aufzeichnen.

Quellprogramm: funkthermometer2.tar.gz
Auswerteprogramm: datenauswerten.tar.gz


Grafik-LCD mit AVR-Microkontroller ansteuern

Hier ist mein provisorischer Treiber für das Grafik-LCD auf dem myAVR-MK3-Board
und für die Grafik-LCDs EADOGM und EADOGL.

Quellprogramm: lcdtreiber.tar.gz


Selbstbau-Taschenrechner

Programmierbarer Taschenrechner im Eigenbau. Bisher gehen schon mal die Grundfunktionen sowie Winkelfunktionen und Logarithmus. Die Echtzeituhr für den Terminplaner funktioniert auch schon. Terminplaner ist aber bisher auf einen einfachen provisorischen Kalender beschränkt.
Geplant ist auch noch ein einfaches direktes Programmieren. Ausserdem noch Molekulargewichts-Berechnung (MG-Rechner).
Begonnen hatte ich auf einem ATmega32, dann ATmega644 und inzwischen habe ich auf den ATmega1284P gewechselt.
Selbstbau-Tastatur Tarech im Gehaeuse Tarech Tastaturbelegung Tarech Schaltschema
Programm: tarech.tar.gz

Neue Version mit AVR-Stamp jetzt auf separater Homepage: Selbstbau-Taschenrechner
Download: tarech2.tar.gz


Quarzfrequenz-Messung mit Funkuhr

Um die Frequenz eines Quarzes im Bereich 1MHz bis 16MHz zu messen, braucht man nur ein Funkuhrmodul, einen ATmega8 und ein LCD-Modul:
Funkuhr-Frequenzmesser-Schaltschema Funkuhr-Frequenzmesser
Der Quarz ist gesockelt. Man setzt also einfach den zu messenden Quarz in den Sockel und schaltet ein. Nach 20 Sekunden sollte die ungefähre Frequenz ermittelt sein. Danach wird je länger man die Schaltung laufen lässt, umso genauer die Frequenz ermittelt. Nebenbei wird noch abwechslungsweise Uhrzeit und Datum angezeigt.
Programm: funkuhr2.tar.gz

Alte Funkuhr mit digitaler Elektronik: Funkuhr


Eisenbahn-Steuerung

Dies ist eine einfache DCC-Zentrale um Modelleisenbahnen zu steuern. Sie funktioniert mit einem ATmega32-Microkontroller (im Bedarfsfall kann der auch durch einen ATmega644 oder ATmega1284 aufgerüstet werden), ein 128x64 Grafik-LCD fuer Text und Grafik-Anzeige und einer 4*5-Tastatur zur Eingabe. (Die Tastatur stammt von einem billigen Taschenrechner und enthält einen ATtiny2313 der über den UART die Tastencodes dem ATmega32 sendet.)

Bisher kann man damit 4 Loks steuern (wäre aber leicht auf mehr erweiterbar), es gibt bisher 14 Geschwindigkeitsstufen (es fehlt nur noch das entsprechende Umschaltkommando um auch 28 Stufen zu unterstützen), und Licht ein/aus-schalten geht auch schon.

Bild von DCC-Zentrale
Download: bahnsteuerung.tar.gz

Vorgesehene Erweiterungen sind: Positionserkennung mit RFID (erste Versuche waren schon mal vielversprechend), Weichensteuerungen (geht bisher über diskrete Elektronik mit separaten Schaltern), und schliesslich automatisches Anhalten und wieder Anfahren am Bahnhof. (bisherige Anlage auf der Bastelecke)

Informationen übers DCC-Protokoll:
DCC auf Wikipedia
DCC-Standards (english) S-9.1 und S-9.2 sind wohl die wesentlichen Infos

Zusammenfassung DCC-Standart:

Low und High wird durch Umpolung der Stromversorgung codiert. Es sollte mit mindestens 2V/us umgeschaltet werden. Stromversorgung ist 16V +- 4V.
1-Bits werden durch 58usec Low und 58usec High kodiert. Toleranz (des Empfängers) sollte +-6usec sein.
0-Bits werden durch 100usec Low und 100usec High kodiert. Toleranz sollte +9900,-10usec sein. (Sender +9800,-5)
(die 0-Bits-Verlängerungen können benutzt werden um eine DC-Lok fahren zu lassen)
Ein Datenpacket wird gestartet mit 14 1-Bits, dann 1 0-Bit. (Der Empfänger sollte mindestens 12 1-Bits sehen.) Dann folgen jeweils 8 Bit fuer ein Byte und als Abschluss ein 0-Bit. Nach dem letzten Byte statt dem 0-Bit ein 1-Bit als Abschluss.
Von diesen Bytes ist das erste die Lok-Adresse (1 bis 127 erlaubt). Das zweite Byte ist ein Kommando.
Beginnt das Kommando mit den Bits 01, dann haben die folgenden 6 Bits folgende Bedeutung: DCSSSS. Dabei ist D die Richtung, 1=vorwärts 0=rückwärts, SSSS die Geschwindigkeit und C ist entweder noch ein weiteres Geschwindigkeits-Bit (kleinste Wertigkeit) oder Licht an/aus.
Wenn SSSSC Geschwindigkeits-Einstellung ist: 0-1=Stop, 2-3=Notstop, 4=Stufe 1, 5=Stufe 2, ..., 31=Stufe 28. Wenn bei einem Stop C gesetzt ist, dann Richtung unverändert lassen, sonst D=neue Richtung.
(Wann C zum Licht ein/aus-schalten benutzt wird ist noch unklar)
Weitere Kommandos:
00000000 = wenn Lok-Nr==0: Reset an alle Loks
           wenn Lok-Nr==0xFF: Idle an alle Loks, nichts weiter tun
01DC000S = wenn Lok-Nr==0: Stop an alle Loks
Der Sender sollte mindestens alle 30ms ein Packet senden.

Das letzte Byte ist eine Prüfsumme. Exclusiv-Oder aller Bytes inklusive dieser Prüfsumme sollte 0 ergeben, sonst ist ein Übertragungsfehler aufgetreten.


Modellbau-Servos

Mit diesen kleinen Motoren kann man viele Dinge basteln. Am einfachsten zu verwenden sind sie, wenn man die Elektronik ausbaut und dann den Gleichstrom-Motor direkt ansteuert.

Mit einem Microkontroller ist es nun aber auch ziemlich einfach die enthaltene Elektronik anzusteuern. Als Steuersignal muss 50 mal pro Sekunde ein Puls von 500 bis 2500 Microsekunden gesendet werden. Die Pulslänge definiert dabei die gewünschte Position des Servos. Leider ist es von Hersteller und Modell abhängig welche Werte welchen Stellwinkeln entsprechen. Selbst zwei Servos vom selben Hersteller können da ganz verschieden sein. Sogar die Drehrichtung kann unterschiedlich sein.
Hier eine Schaltung um zwei Servos zu testen:
Servotester
Dafür wurde der kleinsten AVR-Kontroller (ATtiny13A) verwendet. Man kann damit sogar 2 Servos gleichzeitig ansteuern. Um die Stellwerte (Anzahl Microsekunden der Pulse) darzustellen war nur noch ein Pin frei. Deshalb wurde noch kurz eine Schaltung entworfen mit der man ein LCD mit nur 1 Pin ansteuern kann. Ein Tiny2313 empfängt die Daten über nur eine Leitung und steuert das LCD dann ganz normal an. Damit lässt sich also ein LCD-Modul zusammenbauen, das nur 3 Leitungen (Datenleitung + GND + 5V, in obigem Schema J3-1 bis J3-3) benötigt: dreidrahtlcd.png, lcd2313.asm
Das Programm für den ATtiny13A in obigem Schema ist pwmservo2.asm
Packet mit allen erwähnten Programmen: lcd3wire.tar.gz


Lichtstreuung-Messgerät

scatter-atmega32usb-device
Seite an der Uni (englisch): scatter device

Solarzellen, Laderegler, Nachführung

Solarzelle Die grössere ist eine 10-Watt-Solarzelle. Aus der Fläche und mit einer Solarkonstanten von 1kW/m2 gerechnet hat sie einen Wirkungsgrad von 13%.
Der Aufbau mit der kleinen Zelle ist ein Test um eine Nachführung auszuprobieren.
Solarnachfuehrung1 Solarnachfuehrung2 Solarnachfuehrung3
Erster Test der Nachführ-elektronik und -Mechanik. (ein ATtiny13A und ein Modellbau-Servo für jede Achse.)
Provisorische Microkontroller-Programm dazu: solarnachfuehrung.tar.gz

Neue Solarzellen-Seite: sonnenenergie/index.html


Hardware-Zufallszahlengenerator

Schaltschema
Ein Rauschgenerator mit einem Microkontroller verbunden liefert Zufallszahlen über die Serielle Schnittstelle.
hardzufall.tar.gz enthält das Programm für den Microkontroller.
rndcheck.tar.gz ist ein Testprogramm, das die Zufallszahlen über die Serielle Schnittstelle einliest.
pwrtmngr.tar.gz ist ein einfacher Passwortmanager, der die Schlüsseldateien aus den Hardware-Zufallszahlen erstellen kann.

Licht-Wecker

Bild_vom_Lichtwecker Bild_von_Hinten
Dieser Wecker weckt am Morgen sozusagen mit einem simulierten Sonnenaufgang. Er beginnt mit schwach rotem LED-Licht, dann wird es heller, es kommt noch langsam grün dazu so dass die Farbe über orange zu gelb wechselt, schliesslich noch eine blaue LED gibt dann langsam weisses Licht.
Schaltung mit einem Atmega32-Microkontroller realisiert: lichtwecker.tar.gz (aktualisiert am 13.4.2010: Bewegliche Feiertage korrigiert)

Neue vereinfachte Version als Reisewecker
statt ein LCD werden zur Zeitanzeige nur 13 LEDs verwendet. Die Anzeige ist damit im BCD-Binärformat (Beispiel im Bild 21:38).
Bild1:SMD-Schaltung Bild2:fertiger_Reise-Lichtwecker
Schaltung mit einem Atmega8A in SMD-Ausführung: simpleleduhr.tar.gz
Das Gehäuse dazu ist mit dem 3D-Drucker ausgedruckt.


AVR-Microkontroller

Meine ersten Programmbeispiele für den Atmega8: atmega8-erstebeispiele.tar.gz

Überarbeitete erste Programmbeispiele für den Atmega8: avr/index.html (this site is in english)

Wichtige Abkürzungen:
IC : Integrated Circuit (Integrierte Schaltung)
DIL : Dual Inline (IC-Gehäuse mit Anschlüssen in 2 Reihen)
SPI : Serielles Programmier-Interface
ISP : In der Schaltung Programmieren
Typische ISP-Stecker haben diese Belegungen: Bild_von_6pol_und_10pol_Varianten

Ein Microcontroller ist ein vollständiger Computer in einem einzigen IC. Hier geht es um die AVR-Serie von Atmel. Eine ausführliche Beschreibung der AVR-Microcontroller ist unter mikrocontroller.net zu finden.

Es gibt unter anderem folgende Typen:
Atmega8 im DIL-28 Gehäuse: Atmega8 eigene Zusammenfassung
Atmega32 im DIL-40 Gehäuse: Atmega32 eigene Zusammenfassung
Atmega328P im DIL-28 Gehäuse (Anschlussbelegung wie Atmega8, Speicher ähnlich wie Atmega32) Atmega328p eigene Zusammenfassung
ATtiny13A im DIL-8 Gehäuse: ATtiny13A eigene Zusammenfassung (kleinster AVR-Kontroller)
ATtiny2313A im DIL-20 Gehäuse: ATtiny2313A eigene Zusammenfassung (ohne AD-Wandler aber kleiner als Atmega8)
Atmeag2560 ist im myAVR-Stamp256: Atmega2560 eigene Zusammenfassung (hat viele Ports und ist nur als SMD erhaeltlich)

Für die Programmierung unter Linux-Ubuntu werden folgende Packete gebraucht:
avr-libc, avrdude, gcc-avr, binutils-avr, avra
Zum Programmieren mit dem Assembler (avra) werden noch Include-Dateien gebraucht. Bei avra-1.3.0 sind schon einige Include-Dateien dabei. Weitere können direkt bei Atmel erhalten werden. (Notfalls das Programm für Windows runterladen und alle *.inc kopieren)

Mit avrdude wird das compilierte Programm auf den Microcontroller übertragen.
Aufruf-Beispiele zum Auslesen des Atmega8 mit dem mySmartUSB:
avrdude -p m8 -c avr910 -P /dev/ttyUSB0 -v
avrdude -p m8 -c avr910 -P /dev/ttyUSB0 -U flash:r:flash.hex:i
avrdude -p m8 -c avr910 -P /dev/ttyUSB0 -U eeprom:r:eeprom.hex:i
Statt flash oder eeprom, geht auch noch lock, hfuse, lfuse und signature.


(da fehlen noch meine älteren Projekte)
(Digitale Sachen wie Funkuhr, Schachuhr, Sternzeituhr, Frequenzzähler wären heute mit den Microkontrollern sehr viel einfacher) Funkuhr mit TTLs aufgebaut

kleine Einführung in Elektronik

Strom, Spannung, Wiederstände

Um Strom durch einen Draht zu schicken braucht man eine Spannung. Je höher die Spannung umso mehr Strom fliesst. Je grösser der Widerstand des Drahtes umso weniger Strom fliesst.
Also gilt: I=U/R (I=Strom in Ampere, U=Spannung in Volt, R=Widerstand in Ohm)
Diese Formel ist besser bekannt in der Form U=R*I und heisst Ohmsches Gesetz.

Der Widerstand des Drahtes ist von der Länge, der Querschnitt-Fläche und dem Material abhängig. In der Elektronik werden oft Widerstände mit bestimmten Werten gebraucht. Für kleine Werte wird ein dünner Draht aufgewickelt (Drahtwiderstand), für grössere Widerstandswerte werden Kohleschicht- oder Metallfilm-Widerstände verwendet.

Wenn ein Strom durch einen Widerstand fliesst wird er warm. Das heisst es wird Energie umgesetzt. Je grösser die Spannung, je grösser der Strom und je länger die Zeit umso mehr Energie.
Also gilt: E=U*I*t (E=Energie)
Leistung ist als Energie pro Zeiteinheit definiert,
also gilt P=E/t und somit: P=U*I

Siehe auch Formelsammlung

(Diese Seite ist noch in Bearbeitung)

Transistoren, Logikschaltungen

Diese Seite ist noch in Bearbeitung

Tips und Tricks


Letzte Änderung: 2.Aug.2014 / Rolf                                                                                 Validator