Nur OnTopic Arduino / ATMega Programmierung

Bitte stark genau im Thema bleiben wie es im ersten Beitrag steht. Alles andere gilt als OT und kann gelöscht werden.
@moogli Danke, das probier ich bei Gelegenheit mal. Jetzt müssen erstmal andere Baustellen bereinigt werden.
 
Unabhängig von konkreten Fragestellungen darf ich einen Tipp loswerden:
NIEMALS Delay() verwenden. Das ist die Pest bei eventverarbeitenden Programmierungen, da alle Aufgaben blockert werden.
 
NIEMALS Delay() verwenden
DELAY() benutze ich (sonst) nie und zwar genau aus dem von Dir genannten Grund. Komischerweise ist es hier unentbehrlich, sonst wackelt das Timing. Frag mich nicht, warum ...

Edith: Ich habe es erfolgreich getestet mit bis zu 600 BPM - ein Wert, der in der Praxis kaum vorkommen dürfte. 600 BPM heißt, ich habe für einen Loop 100 ms Zeit. In dieser Zeit
ist das wenige, was dort steht, locker erledigt. Somit kann ich mit die 1 Millisekunde ruhig gönnen.
 
Zuletzt bearbeitet:
Ich habe mal viel Geld für ein Noise Engineering Fraction Solum ausgegeben, nur um gestern festzustellen, dass man das auch mit einem Atmel nachbauen kann. Hier
also ein Clock-Multiplier/ Divider, der auch krumme Werte beherrscht, also 2 Takte rein, 5 Takte raus oder 7 Takte rein und 4 Takte raus - und das mit dem Eingang
synchronisiert. Ursprünglich war das Projekt als reiner 2/3-Teiler in einem kleinen Attiny85 gedacht, um den TAP-Eingang eines Delays anzusteuern (300 BPM rein,
200 BPM raus). Aber es funktioniert auch mit anderen Teilerfaktoren. Wer's gebrauchen kann -> divmulti.rar

Das Foto zeigt ein Beispiel. Während am Eingang drei Impulse eingehen, werden im gleichen Zeitraum zwei Impulse ausgegeben. Die Synchronisation findet immer
auf dem kleinsten gemeinsamen Vielfachen statt. Hier -> 2 * 3 = 6.


IMG_5142.png

Ein weiteres Beispiel (4 Takte rein, sieben Takte raus):

IMG_5143.png
 
Zuletzt bearbeitet:
Wird immer komfortabler. Jetzt mit OLED-Display und Encoder. Man kann aus deiner Liste vordefinierter Teilerverhältnisse wählen. Aber welche sind sinnvoll?

uint8_t __numerator[] = {1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6};
uint8_t denominator[] = {1, 2, 3, 4, 5, 6, 1, 3, 5, 1, 2, 4, 5, 1, 3, 5, 1, 2, 3, 4, 1, 5};


IMG_5144.png
 
Zuletzt bearbeitet:


Zurück
Oben