Większość układów scalonych ATMega ma już wbudowany moduł komparatora analogowego (AC), więc nie ma potrzeby korzystania z zewnętrznych obwodów, chyba że chcesz kontrolować histerezę.
W przypadku Arduino Uno, piny AC to PD6 i PD7 (cyfrowy pin 6 i cyfrowy pin 7 w języku „Arduino”). Do PD6 (AIN0) należy podłączyć napięcie odniesienia DC w miejscu, w którym ma być próg (w twoim przypadku ~ 0,3 V), a do PD7 (AIN1) podłączasz sygnał wejściowy.
Jeśli chcesz mieć możliwość pomiaru więcej niż jednego sygnału (aczkolwiek jednego na raz), możesz użyć dowolnego z analogowych pinów wejściowych (A0 do A5) zamiast PD7. Wyjście multipleksera ADC wewnątrz MCU może być skierowane do komparatora analogowego. Należy jednak pamiętać, że ADC nie może być używany jednocześnie z komparatorem analogowym, jeśli jako źródło wejściowe używany jest multiplekser.
W przypadku ATMega32U4 na Pololu Micro, zgodnie z twoim komentarzem, sprawy mają się trochę inaczej. Nadal mają one komparator analogowy, jednak nie mają styku AIN1. Zamiast tego musisz użyć ADC Mux jako źródła sygnału, co oznacza, że możesz podać sygnał impulsowy do dowolnego z pinów A0 do A5 na mikropłytce.
Dla odniesienia DC, AIN0, to znaczy na PE6, co odpowiada cyfrowemu pinowi 7.
W przypadku referencyjnego sygnału DC możesz po prostu użyć pary rezystorów jako dzielnika napięcia i prawdopodobnie także małego (~ 100nF) kondensatora odsprzęgającego, aby wygładzić szum.
Aby odczytać, czy sygnał jest wysoki czy niski, możesz sprawdzić bit ACO
rejestru ACSR
lub ustawić procedurę obsługi przerwań dla wektor przerwań ANALOG_COMP_vect
.
Jeśli jesteś zainteresowany synchronizacją sygnału, bit ACO
może być również wewnętrznie kierowany bezpośrednio do rejestru przechwytywania wejścia Timera 1, dzięki czemu możesz oznaczyć czas przejścia sygnału.