darmstadt

Werbung
ZfP-Sonderpreis der DGZfP beim Regionalwettbewerb Jugend forscht
DARMSTADT
Fahrradtacho 2.0
Matthias Jasny
Schule:
Graf-Stauffenberg-Gymnasium
Bürgermeister-Lauck-Straße 24
65439 Flörsheim am Main
Jugend forscht 2014
Jugend forscht ­ Fahrradtacho 2.0 Matthias Jasny
Graf­Stauffenberg­Gymnasium
Einführung
Kann man einen normalen Magnettacho perfektionieren, ihm mehr Funktionen verleihen und die Geschwindigkeit genauer auswerten?
Den Anstoß dafür, gab mir folgende Beobachtung: Mein Bruder und ich fuhren mit unseren Fahrrädern parallel nebeneinander, allerdings zeigten unsere Tachometer jeweils andere Geschwindigkeiten an. (Die beiden verwendeten Magnettachos, kamen von jeweils verschiedenen Firmen, waren aber beide nach dem jeweiligen Handbuch eingestellt.) Außerdem startet bei einem normalen Magnettacho die Messung erst ab ca. 7 km/h.
Lichtschranken, die im Infrarot­ oder Rotlichtbreich arbeiten, sind sehr präzise Komponenten. Sie werden oft in der Steuerungs­ und Überwachungselektronik eingesetzt. Durch ihre hohe Zuverlässigkeit erhoffe ich mir ein genaueres Ergebnis als bei der Magneterfassung.
Ich hatte mir überlegt, einen eigenen Tacho zu bauen. Dabei wollte ich mein Wissen über Elektronik vertiefen und eine eigene Schaltung entwickeln.
Inhaltsverzeichnis
Einführung
Seite 2
Idee
Seite 3
Erste Tests und dabei auftretende Probleme
Seite 3
Ausführung
Seite 4
Programmierung
Seite 10
Glossar
Seite 13
Literaturverzeichnis
Seite 13
Anhang (Quellcode)
Seite 2 von 14
Jugend forscht ­ Fahrradtacho 2.0 Matthias Jasny
Graf­Stauffenberg­Gymnasium
Idee:
Meine Idee war eine Lichtschrankenkonstruktion, die von einem Mikroprozessor ausgewertet wird. Als Grundlage sollte eine Reflexlichtschranke dienen, die durch die Fahrradspeichen geschaltet wird.
Falls die Rundung der Speiche das Licht zu stark streut, könnte man einen kleinen Spiegel verwenden, oder eine Verbindung z.B. mit Klebeband, zwischen den Speichen herstellen, so dass es
eine größere Reflexionsfläche gibt.
Für die Auswertungseinheit wollte ich zunächst einen RaspberryPi verwenden, um über ein Python­
Skript einen GPIO­Port abzufragen, an dem die Lichtschranke hing. Der Akku, der aus fünf AA­
Batterien besteht, soll später über den Fahrraddynamo geladen werden.
Um die aktuelle Zeit zu erfahren möchte ich ein DCF77­Funkmodul verwenden, welches mit dem 20x4 LC­Display bei Conrad erhältlich ist.
Erste Tests und dabei auftretende Probleme
Die erste Lichtschranke war mir durchgebrannt, weil der Vorwiderstand zu klein war. Nachdem ich eine viel kleinere zweite Lichtschranke bestellt hatte, wollte ich diese mit meinem RaspberryPi auswerten. Ich kam zum Resultat, dass die Latenz und die Zeit zwischen den Abfragungen zu groß war. Das heißt, wenn man mit einer höheren Geschwindigkeit fährt, würde zum Beispiel jede zweite Speiche ausgelassen und somit die Geschwindigkeit halbiert werden.
Rechts befindet sich die
GPIO­Schnittstelle des
RaspberryPi. Die
Lichtschranke kann
wahlweise mit 5V oder
3.3V betrieben werden.
Quelle: siehe Literaturverzeichnis
Die Lichtschranke besitzt vier Ausgänge, jeweils 2 für die IR­Diode und den Fototransistor. Im Bild links sind die zwei Vorwiderstände schon angelötet und die Kontakte mit Gummischläuchen provisorisch isoliert.
Da der RaspberryPi zu „langsam“ war, musste etwas Spezielleres her, etwas wo der Mikrokontroller­Prozessor direkt mit dem eigenem Betriebssystem programmiert wird. Seite 3 von 14
Jugend forscht ­ Fahrradtacho 2.0 Matthias Jasny
Graf­Stauffenberg­Gymnasium
Mein Lehrer aus der Roboter­AG hatte noch eine alte Atmega8 Schaltung mit Display für zwei Lichtschranken. Ich brauchte aber nur eine Lichtschranke, also übernahm ich die Schaltung und lies
den Port für die zweite Lichtschranke frei.
Ausführung
Wie vorher erwähnt, wollte ich die Erfassung mit einer Lichtschranke durchführen. Die Lichtschranke arbeitet im Infrarotspektrum, und ist somit
wenig störanfällig, aber nicht durch das Auge sichtbar.
Dadurch gibt es auch keine starken externen Einflüsse.
Die Lichtschranke sollte am Atmega8 einen Interrupt
auslösen, der einen Timer beendet, neustartet und den
Endwert zurückliefert. Mit dieser Zeitdifferenz zwischen den
Interrupt­Unterbrechungen, kann man die Geschwindigkeit
des Fahrrades berechnen.
Nach einer längeren Testphase gab es folgende Resultate:
Der Mikrokontroller war schon fast fertig programmiert. Die Geschwindigkeit wurde in m/s angezeigt. Die Lichtschranke schaltete bis ca. 25­30 km/h, schneller konnte ich das Fahrrad noch nicht drehen, da es auf einer Halterung stand. Zu diesem Zeitpunkt wurden die Speichen gezählt und die Zwischenzeit in Mikrosekunden angegeben. Der Randumfang und die Anzahl der
Speichen, waren noch fest in dem Programm eingegeben, wenn möglich plante ich diese über ein Menü mit einer Tastatur einzugeben. Dadurch, dass die Speichen gezählt werden, können viel kleinere Geschwindigkeiten angezeigt werden.
Um die Schaltung während der Fahrt zu laden, wird der Strom von dem Dynamo abgegriffen, welcher einen 6 Volt Akku lädt. Dieser Akku versorgt dann über einen Spannungsregler (L4940) die komplette Mikrokontrollerschaltung.
Für die Lichtschranke mussten vier Litzen verlegt werden, zwei für die 5 Volt Spannungsversorgung und jeweils eins für das Feedback und das Einschalten der IR­Diode.
Bei der Programmierung musste ich sehr gut aufpassen, dass die Taktzahl des Prozessors mit dem Umrechnungsfaktor übereinstimmt, und ich somit die Sekunden richtig kalibriere.
Die Taktrate war 8.000.000 Hz pro Sekunde. Ich verwendete zwei Timer um Zeiten zu messen, beide waren jeweils anders eingestellt, da mit dem ersten Timer (Timer0) die Zeit zwischen den Interrupts gezählt wurde und mit dem zweiten Timer (Timer1) die normale Sekundenzeit bestimmt worden war. Ich errechnete für beide zwei verschiedene Multiplikatoren, um den Rohwert in brauchbare Werte umzuwandeln. Nachdem ich schon einige Routinen programmiert hatte und diese funktionierten, stieß ich auf ein weiteres Problem: Der Prozessor war zu klein. Der Programmcode wurde immer länger und die Prozessoranschlüsse wurden knapp. Ich wollte schließlich noch eine Tastatur­Matrix anschließen Seite 4 von 14
Jugend forscht ­ Fahrradtacho 2.0 Matthias Jasny
Graf­Stauffenberg­Gymnasium
und Analog­Ports zum Messen der Batteriespannung, sowie das Zeitfunkmodul DCF77, verwenden.
Nun musste der große Bruder vom Atmega8 her, der Atmega32, welcher viermal mehr Speicher und Ports besitzt. Da dieser Prozessor eine komplett andere Struktur hat, musste ich einen neuen Programmcode und eine neue Schaltung entwerfen.
Das Schaltbild entwarf ich am Computer mit der Freeware TARGET3001. Nachdem ich alle Baugruppen in die Schaltung eingetragen hatte, erstellte ich das Platinenlayout. Dabei musste ich darauf achten, möglichst wenige Luftlinien einzuplanen und die Platine kompakt zu halten.
(Dennoch entstanden sehr viele Luftlinien)
Dies ist der komplette Schaltplan der Schaltung, den ich für das Ätzen der Platine verwendete. In der Mitte befindet sich das Herzstück, der Atmega32. Es gibt Anschlüsse für eine 4x5 Tastatur, ein 20x4 LC­Display und ein DCF77­Funkmodul. Außerdem hatte ich zwei Mosfets eingeplant um später die Fahrradlampe abhängig von der Uhrzeit an­ bzw. abzuschalten. Um die Batteriespannung
und die Versorgungsspannung zu messen, liegen zwei Leitungen auf den ersten beiden ADC­Ports des Atmega32. Da der Port nur 0V­5V auswerten kann verwendete ich einen Spannungsteiler. An dem 6,8kΩ Widerstand liegen 4.03V an und am 3,3kΩ Widerstand 1.96 Volt. Somit konnte ich über einen ADC­Port die Versorgungsspannung von ~5 Volt messen und am anderen die Akkuspannung von ~6­7V.
Seite 5 von 14
Jugend forscht ­ Fahrradtacho 2.0 Matthias Jasny
Graf­Stauffenberg­Gymnasium
Der Prozessor wird direkt über einen 6­poligen ISP­Stecker programmiert. Ich benutze einen Programmer der über USB an meinen Computer angeschlossen ist.
Dies ist das optimierte Platinenlayout
Nachdem ich die Bauteile im Schaltplan richtig gesetzt und verkabelt hatte, musste ich die Bauteile auf der Platine platzieren und die Leiterbahnen routen. Dies geschah in mehreren Schritten. Zuerst wurden die Leiterbahnen grob mit Kreuzungen verlegt. Danach wurden sie entflochten und immer weiter optimiert, bis es möglichst wenige Luftlinien gab, und die Platine kompakt war.
Die dünnen grünen Linien sind Luftlinien, die später mit dünnem Draht nachgelötet werden mussten.
Das fertige Platinenlayout (bzw. die Leiterbahnen) wurde auf eine Overhead­Folie gedruckt und die
lichtempfindliche Platine wurde mit Hilfe jener belichtet. Dadurch blieben die Leiterbahnen ständig
im Schatten und wurden später nicht von der Säure weggeätzt. Als Ätzmittel verwendete ich Seite 6 von 14
Jugend forscht ­ Fahrradtacho 2.0 Matthias Jasny
Graf­Stauffenberg­Gymnasium
Amoniumpersulfat ((NH4)2S2O8). Nachdem ich die Löcher gebohrt habe, musste ich die Bauteile
einstecken und festlöten, die Schaltung testen und programmieren.
Für das Löten verwendete ich bleihaltiges Lötzinn, welches besser fließt als bleifreies , was aufgrund der dünnen Leiterbahnen sehr wichtig war.
Anfangs hatte ich ein Problem, dass ich an den
Ausgängen an der Platine keine Spannung messen
konnte. Der Spannungsregler wurde extrem heiß
und die Batterien leer. Dies deutete eigentlich auf
einen Kurzschluss hin, aber es fehlte ein kleiner
Kondensator (links oben im rechten Bild).
Nachdem der Kondensator angelötet wurde,
funktionierte die Schaltung auf Anhieb.
Quelle: siehe Literaturverzeichnis
Links die bestückte Platine von oben. Der Spannungsregler hat einen Kühlkörper, da dieser bei hohen Strömen heiß wird.
Oben sieht man die Platine von unten. Die roten und grünen Kabel sind Luftbrücken. Der blaue Kondensator glättet die Spannungsspitzen für den Mikrokontroller und ist zum Platzsparen unten angelötet.
Es gibt eine übliche Vorgehensweise mit der man „frische“ Schaltungen in Betrieb nimmt. Zuerst wird die Schaltung auf Kurzschlüsse durchgemessen und gepiepst. Danach wird die Spannung an verschiedenen Ausgängen wie Tastatur oder Display gemessen. Wenn bis dorthin alles funktioniert,
setzt man den Prozessor ein und versucht mit dem Programmer die Signatur auszulesen. Falls dies klappt, besteht eine Verbindung zum Prozessor und er kann programmiert werden.
Als nächsten Schritt versuchte ich nach und nach alle Komponenten anzuschließen und zu programmieren. Ich fing mit dem Display an, da man später über diesen alle möglichen Testinfos ausgeben kann (Siehe folgende Bilder). Seite 7 von 14
Jugend forscht ­ Fahrradtacho 2.0 Matthias Jasny
Graf­Stauffenberg­Gymnasium
Für mein Display hatte ich ursprünglich alle 8 Dataports verplant. Wenn man ein Display im 8­Bit Modus ansteuern möchte, müssen alle 8 Pins auf einem Port liegen. Es war bei mir nicht der Fall, also konnte ich mein Display nur im 4­Bit Modus ansteuern. Dies hat nur den Nachteil, dass es im Prinzip doppelt so lange zum Schreiben braucht. In der nächsten Schaltung werde ich es berücksichtigen. Nachdem ich mein Display getestet hatte und es funktionierte, steckte ich meine Matrixtastatur an. Diese braucht für ein 4x4 Tastenfeld nur 8 Ports.
Wird eine Taste gedrückt, werden die Leitungen an den Kreuzungspunkten verbunden. Um die gedrückte Taste zu ermitteln, werden nacheinander die Spalten bzw. Zeilen auf HIGH (+5V) gesetzt. Wenn nun eine Taste gedrückt ist, liegt der HIGH­Pegel nur in der jeweiligen Zeile bzw. Spalte an. Der Mikrokontroller schaltet blitzschnell zwischen PB0, PB1, PB2 und PB3 umher und setzt jeweils die Spannung auf HIGH. Wenn zum Beispiel PB0 auf HIGH gesetzt ist und die Taste links oben gedrückt wird, ist PB4 mit PB0 verbunden und es liegt eine Spannung auf PB4 an. Diese wird vom Mikrokontroller erfasst und ausgewertet. Jede Taste bekommt einen Keycode zugesprochen, der aber nicht dem eigentlichen Tastenwert entsprechen muss.
In meinem Fall hatte die Taste 1 den Keycode 0, da in der Informatik sehr oft bei 0 angefangen wird zu zählen. Diese Differenzen können im Programm am einfachsten mit einer Switch/Select­Case­
Schleife ausgeglichen werden.
Nun kam das wichtigste Bauteil ins Spiel, die Lichtschranke. Sie sitzt an einem Interrupt­Port des Atmega32, sodass bei ihrer Auslösung eine kleine „Funktion“ aufgerufen werden kann, um zum Beispiel die Tickanzahl zu erhöhen oder den Timer zu resetten. Ich stellte fest, dass die Lichtschranke zu wenig Strom bekam, da sie komplett an Port A5 des Atmega32 hing und dieser nur maximal 30 mAh ausgeben kann. Als Lösung schnitt ich die Leiterbahn durch und setzte eine weitere Luftbrücke zu +5V. Jetzt war das Problem behoben und die Lichtschranke erkannte die Speichen.
Seite 8 von 14
Jugend forscht ­ Fahrradtacho 2.0 Matthias Jasny
Graf­Stauffenberg­Gymnasium
Ich benutze für die Eingabe eine 4x4 Tastaturmatrix. Die Tasten waren noch nicht beklebt, funktionierten aber einwandfrei. Damit ein Tastendruck einzeln und nicht mehrmals erkannt wurde, setzte ich eine Pause von 200ms zwischen den einzelnen Tastendrücken ein.
Auf dem Display kann man schon das erste Testprogramm sehen. Es wurde die zuletzt gedrückte Taste ausgegeben und die Anzahl der Ticks. Was man auf dem Bild nicht sehen kann ist, dass die Anzahl im EEPROM des Atmega32 gespeichert wird. Dies bedeutet, der Wert geht nach dem Ausschalten nicht verloren und es wird beim Neustart vom gespeicherten Wert aus weitergezählt.
Seite 9 von 14
Jugend forscht ­ Fahrradtacho 2.0 Matthias Jasny
Graf­Stauffenberg­Gymnasium
Programmierung
Als Programmiersprache verwendete ich BASCOM. BASCOM ist an die Programmiersprache Basic angelehnt und sehr hardwarenah. Die aus dem Quellcode kompilierte Hex­Datei, flashte ich mit einem Atmel­AVR­ISP­MKII­USB Programmer mit dem Progamm AVR­Studio 4.
Für den Prozessortakt sorgt ein externer 8 Mhz Quarz.
Die Menünavigation ist eine komplette Eigenentwicklung und wird folgend beschrieben:
'Fahrradtacho Atmega32'
Kommentare:
$regfile = "m32def.dat"
$crystal = 8000000
$hwstack=40
$swstack=16
$framesize=32
Der verwendete Prozessor ist ein Atmega32.
Der Takt ist 8 Mhz.
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portb.1 , Rs = Portb.0 'Db0 = Portb.2 , Db1 = Portb.3 , Db2 = Portb.4 , Db3 = Portd.4 ,
Config Lcd = 20 * 4
Dies ist die Konfiguration der LCD Pins an den Ports des Atmega32.
'Config Porta.5 = Output
'Porta.5 = 1
Porta.5 wird als Output gesetzt.
Auf Porta.5 wird +5V geschaltet, damit die Lichtschranke leuchtet. (Auskommentiert, wegen manueller Versorgung. (siehe oben))
On Int0 On_int0
Config Int0 = Rising Enable Int0
Wenn die Lichtschranken den Interrupt auslöst, wird On_int0 ausgeführt. // Auslösung bei Anstieg
Int0 wird aktiviert.
Enable Interrupts Interrupts werden aktiviert.
In_tickcount = 0 In_ticktimer = 0 In_settings = 0 In_tacho = 0 In_menu = 1 Alle Menüpunkte bis auf das Hauptmenü werden deaktiviert.
Da es in BASCOM keine booleanschen Werte, wie TRUE oder FALSE gibt, verwendete ich Bits (0 oder 1). Diese haben im Prinzip den gleichen Nutzen.
Cls Das Display wird geleert. (clear)
Die LC­Display Größe ist 20x4 Zeichen.
Seite 10 von 14
Jugend forscht ­ Fahrradtacho 2.0 Menu0 Do If In_menu = 1 Then Keycode = Getkbd() If Keycode <> 16 Then If Keycode = 14 Then Matthias Jasny
Graf­Stauffenberg­Gymnasium
Die Unterfunktion Menu0 wird aufgerufen.
(siehe Ende des Quelltextes)
Beginn der Hauptdauerschleife.
Falls das Programm im Menü ist, werden die Tasten abgefragt.
Wenn es einen Keycode gibt, der nicht 16 ist, wird geprüft ob die „Enter“ Taste gedrückt wurde. Keycode 16 bedeutet, dass keine Taste gedrückt wurde.
In_menu = 0 Select Case Menu0_counter Case 0 : Cls In_tacho = 1 Tacho Case 1 : Cls In_tickcount = 1 Tickcount Case 2: Cls In_ticktimer = 1 Ticktimer Case 3: Cls In_settings = 1 Settings Case Else: In_menu = 1 End Select Else Cls Menu0 End If End If End If Das Programm ist nicht mehr im Menü.
Je nach Wert des Menu0_counters (Auswahl im vorherigen Menü) wird eine Unterfunktion oder wieder in das Menü aufgerufen.
If In_menu = 0 Then Keycode = Getkbd() If Keycode <> 16 Then If Keycode = 12 Then In_menu = 1 In_tacho = 0 In_tickcount = 0 In_ticktimer = 0 Wenn im Untermenü und die Zurücktaste gedrückt wird, wird das Hauptmenü wieder „TRUE“ gesetzt.
Die entsprechende Variable für den Menüpunkt wird auf „TRUE“ gesetzt und das Display geleert, somit weiß das Programm welches Menü angezeigt werden soll.
Falls kein gültiger Menüpunkt ausgewählt wird, wird wieder auf eine Eingabe gewartet.
Menu0 wird angezeigt.
Ende der if­Schleifen.
Alle Untermenüs werden auf „FALSE“ gesetzt.
Seite 11 von 14
Jugend forscht ­ Fahrradtacho 2.0 Matthias Jasny
In_settings = 0 Cls Menu0 End If End If End If If In_tacho = 1 Then Tacho End If […]
Loop
Graf­Stauffenberg­Gymnasium
Display leeren.
Menu0 anzeigen.
Ende der if­Schleifen
Wenn der Menüpunkt Tacho ausgewählt wurde, wird die Funktion Tacho aufgerufen.
Ende der Dauerschleife
Sub Menu0: Dies ist die Funktion Menu0.
Locate 1 , 1 Lcd "Navigation " ; Chr(1) ; Chr(2) ; Chr(3) ; In der ersten Zeile wird eine kleine Hilfe für die Chr(4) ; Chr(5) ; Chr(6) Navigation mit selbst erstellten Zeichen angezeigt.
If Keycode = 3 Then Decr Menu0_counter Wenn die Runtertaste gedrückt wurde, wird Menu0_counter um eins verringert (die nächste Zeile gezeigt).
If Keycode = 7 Then Incr Menu0_counter Wenn die Hochtaste gedrückt wurde, wird Menu0_counter um eins erhöhet (die vorherige Zeile gezeigt).
If Menu0_counter = Menu0_length Then Wenn letzte Zeile erreicht, wieder die erste Zeile
Menu0_counter = 0 anzeigen.
If Menu0_counter = 255 Then Menu0_counter Wenn erste Zeile erreicht, wieder die letzte Zeile
= Menu0_length ­ 1 anzeigen.
Menu0_id = Menu0_counter + 1 Locate 2 , 1 Lcd Chr(62) ; Menu0_items(menu0_id) ; Chr(60) If Menu0_id = Menu0_length Then Menu0_id = Menu0_id ­ Menu0_length In Zeile 2 wird der momentan ausgewählte Punkt in > < angezeigt.
Wenn der Itemindex zu hoch ist, wieder zurücksetzen, indem die Menülänge abgezogen wird.
Locate 3 , 1 If Menu0_id = Menu0_length Then Menu0_id In Zeile 3, wird der nächste Menüpunkt = Menu0_id ­ Menu0_length angezeigt.
Incr Menu0_id Lcd Menu0_items(menu0_id) In Zeile 4 wird der übernächste Menüpunkt angezeigt.
Locate 4 , 1 If Menu0_id = Menu0_length Then Menu0_id menu0_id ist der Index des Eintrags.
Seite 12 von 14
Jugend forscht ­ Fahrradtacho 2.0 = Menu0_id ­ Menu0_length Incr Menu0_id Lcd Menu0_items(menu0_id) End Sub
Matthias Jasny
Graf­Stauffenberg­Gymnasium
Ende der Funktion.
Glossar
Reflexlichtschranke
Lichtschranke, die bei Reflektion ihres eigenen Lichtstrahls auslöst.
RaspberryPi
Mini­Computer für ca. 35€
Python
Hohe Programmiersprache
GPIO­Port
Schnittstelle z.B. für LEDs oder andere Baugruppen
DCF77­Funkmodul
Uhrzeitmodul, welches die Atomuhrzeit aus Frankfurt am Main bezieht.
Latenz
Verzögerung
IR­Diode
LED, die Infrarotlicht ausstrahlt, für den Menschen nicht sichtbar.
Fototransistor
Schaltet bei Licht/IR­Licht durch
Atmega8/Atmega32
Mikrokontroller von Atmel
Interrupt
Unterbrechung, um eine Verarbeitung durchzuführen.
Litzen
Dünne Kabel (Durchmesser ca. 0,5mm)
kalibrieren
einstellen
TARGET3001
Platinenlayout­Programm
AVR Studio 4
Programm, welches ich zum Flashen verwendete
BASCOM­AVR
Programmiersprache und Kompiler
Kompiler
Übersetzt Programmcode in Maschinensprache.
Mosfets
Baugruppe/Transistor um hohe Ströme zu schalten.
ADC­Port
Analoger Eingang eines Mikrokontrollers, um Spannungen zu messen.
ISP­Stecker
Schnittstelle um AVR­Mikrokontroller zu programmieren
EEPROM
Nicht flüchtiger Speicher
Hex­Datei
Enthält das Programm in binärer Form (10010100)
flashen
Vorgang beim Übertragen eines Programmes vom Computer auf einen Mikrokontroller
Seite 13 von 14
Jugend forscht ­ Fahrradtacho 2.0 Matthias Jasny
Graf­Stauffenberg­Gymnasium
Literraturverzeichnis
Grafiken:
­ http://www.elektor.de/Uploads/Cache/Forum/Posts/100202094755.Keyboard.resized.454x0.jpg
­ http://www.homofaciens.de/bilder/technik/raspberry­gpio_g.jpg
(Stand 16.01.2014)
Programme:
­ AVR Studio 4
­ BASCOM AVR
­ Target3001
Bis auf die oben aufgeführten Quellen verwendete ich für diese Arbeit kein gedankliches Eigentum anderer. Alle Texte sind von mir verfasst.
Seite 14 von 14
Herunterladen