Arduino Pins getaktet einlesen

Klaus_ww:
Was Du also möchtest ist ein Komparator.

Hat der Atmega328 übrigens eingebaut. Wird aber durch die Arduino IDE nicht implementiert.

Per Hand ansteuern:

Mit Lib:
http://www.leonardomiliani.com/2012/analogcomp-una-libreria-per-gestire-il-comparatore-analogico/?lang=en

Beim ADC kann man den Prescaler auf 16 ändern:
http://www.microsmart.co.za/technical/2014/03/01/advanced-arduino-adc/

Damit hat man einen ADC Takt von 1MHz, eine Wandlungszeit von ca. 20µs und theoretisch 50.0000 Samples pro Sekunde.

Aber wenn man hier schon den ADC verwendet, dann sollte man das auch per Hand machen und den free running mode verwenden:
http://www.glennsweeney.com/tutorials/interrupt-driven-analog-conversion-with-an-atmega328p
(Wobei mit der Code da nicht so gefällt, da er nicht die Namen der Bits verwendet, aber in den Kommentaren steht was gemacht wird)

Im free running mode, macht der ADC ständig Wandlungen. Nachdem eine Wandlung fertig ist, wird automatisch die nächste gestartet und ein Interrupt ausgelöst. Zwischen den Wandlungen kann man dann andere Dinge tun. Das heißt anders als analogRead() blockiert das nicht! Das muss man dann auch mit dem niedrigeren Prescaler kombinieren.

Und wenn man den ADC über einen Timer steuern will, ist es auch besser das per Hand zu machen, als über die Arduino Sprachmittel mit denen man sich nur Overhead einfängt. Man kann den ADC nämlich direkt über Timer Interrupts triggern. Siehe Datenblatt Seite 256f.

Ein Komparator ist aber sicherlich die bessere Lösung! :slight_smile: