Arduino Meetup September 2017


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.

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

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.

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

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.

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.

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.

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

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.

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.

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...

Bei meiner Tischbohrmaschine ist die LCD Anzeige ausgefallen.

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.

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

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.

Damit gebe ich das Mikrofon weiter.