Arduino Meetup September 2017

Folie 1



Folie 2

Eröffnet wurde der Abend mit einer Countdown Schaltung, die mit immer kürzeren Pausen piepste.
Da ich immer wieder gefragt werde wie das mit den Timern funktioniert, hier die Kurzfassung:
Ein Timer ist ein Zähler, der externe Signale zählen kann oder meist vom vorhandenen Schwingquarz gespiesen wird, der auch den Takt für den Prozessor vorgibt.
Da ein Schwingquarz sehr präzise schwingt, ist es ideal für zeitkritische Anwendungen.
Die Signale können mit dem Prescaler vorgeteilt werden, bevor Sie den Zahlenwert im Timer erhöhen.
Dieser Zahlenwert im Timer wird permanent mit einem Vergleichswert verglichen, sobald beide übereinstimmen oder ein Wert überläuft, wird eine Aktion ausgelöst.
Dies kann ein Interrupt Request (IRQ) sein oder eine Pulsweitenmodulation erstellt werden.


Folie 4

Bei der Verwendung von Timer nicht Vorsicht geboten, da einige Arduino Funktionen diese verwenden.


Folie 5

Hier ein Beispiel wie der Timer 2 im Setup definiert wird:
Erst werden alle Interrupts ausgeschaltet,
dann die Vergleichswert Register gesetzt, wie wir auf die Werte kommen sehen wir gleich,
die auszulösen Interrupts definiert
und die Interrupts wieder eingeschaltet.


Folie 6

Hier ein paar Beispiele wie man Bits setzen und löschen kann und zur Kontrolle auf die serielle Schnittstelle ausgeben kann.


Folie 7

Berechnen wir nun wie wir mit Timer 2 genau jede Sekunde einen Interrupt auslösen können.
Das Signal des Quarzes wird mit dem Prescaler maximal geteilt, ist aber immer noch viel zu schnell und auch ein sehr schräger Wert.
Des Rätsels Lösung ist es, in der Interrupt Routine einen Zähler zu verwenden, so das erst alle 125 Interrupts dieser weitergeleitet wird.


Folie 8

Ich habe eine Tabelle angelegt und nach geraden Werten gesucht, Es hat sich gezeigt, das mit einem "Output Compare Register" mit dem Wert 125,
genau 125 Interrupts benötigt werden.


Folie 9

Mit diesem ermittelten Wert kann die Interrupt Request Routine erstellt werden und jede Sekunde die LED des Countdowns aktualisiert werden.
Wenn der Count-down Null erreicht hat, soll der Interrupt deaktiviert werden.


Folie 10

Das Piepsen der Vorlage ist leider nicht linear und somit nicht einfach mit einer Schleife nachzubilden, also muss ich sie ausmessen:


Folie 12

Jeder Piepston ist 125 ms lang, aber die Pausen dazwischen sind unterschiedlich.
Wenn das Signal so weit geglättet und gefiltert ist, dass eine glatte Null-Linie entsteht, kann der Flankenwechsel gemessen werden.


Folie 13

Dazu soll der Analog-Digital-Wandler des Arduino's das Audio-Signal einlesen und bei einem bestimmten Pegel den Port 3 ein- und ausschalten.
Dieser Port 2 ist mit einem Widerstand mit der dem Interrupt Request Eingang 0 (Port 2) verbunden
und der Interrupt zählt die Abstände zwischen den Flanken und schreibt diese auf die serielle Schnittstelle.
Die Ausgabe kann dann anschliessend in eine Tabelle kopiert werden und weiter ausgewertet werden.


Folie 19

Ich habe ja schon von FPGA's erzählt, nun suchte ich ein zweites Programmiergerät, doch die Preise sind doch sehr unterschiedlich für nahezu die gleiche Funktion...


Folie 23

Bei meiner Tischbohrmaschine ist die LCD Anzeige ausgefallen.


Folie 24

Die Ersatzteil Bestellung ist vorbildhaft: Man gibt's das Modell ein und kann in einer Explosionszeichnung auf das defekte Teil klicken,
mit einem weiteren Klick wird es in den Warenkorb gelegt und kann bestellt werden.


Folie 25

Und Bingo, es läuft wieder ! :-)


Folie 27

Ebenfalls vorbildlich wurde die Verkabelung gelöst: Es ist nahezu unmöglich ein Kabel falsch anzuschliessen.
Dies als Empfehlung wenn jemand ein Gerät bauen möchte.


Folie 31

Damit gebe ich das Mikrofon weiter.