- częstotliwości środkowe filtrów kanałów LED: 400 Hz, 2000 Hz, 4000 Hz,
- maksymalny prąd gniazd wyjściowych LED1…3: ok. 10 A,
- napięcie zasilania: 7…12 V,
- pobór prądu samego urządzenia: ok. 10 mA.
Zadaniem urządzenia miała być realizacja funkcji kolorofonu z cyfrowym torem przetwarzania sygnałów audio, bez potrzeby stosowania analogowych filtrów wejściowych. Co więcej, chciałem, żeby docelowa implementacja bazowała na bardzo prostym mikrokontrolerze, o ograniczonych zasobach sprzętowych. W ten sposób postanowiłem udowodnić, że nawet skomplikowane, na pozór, zadania programowe można zrealizować przy użyciu minimalnych zasobów sprzętowych.
Budowa i działanie
Zaprojektowano bardzo prosty system mikroprocesorowy. Jego sercem jest jeden z najmniejszych mikrokontrolerów firmy Microchip (dawniej Atmel) o oznaczeniu ATtiny13, taktowany wewnętrznym, wysokostabilnym generatorem RC o częstotliwości 9,6 MHz. Jest on odpowiedzialny za realizację pełnej funkcjonalności urządzenia. Próbkuje wejściowy sygnał audio doprowadzony do wyprowadzenia ADC2 (PB4) układu, z częstotliwością 8 kHz, używając przy tym układu czasowo-licznikowego Timer0, który jest w tym wypadku wyzwalaczem konwersji wbudowanego przetwornika ADC pracującego w trybie 8-bitowym.
Następnie, po zebraniu N liczby próbek (20), wykonuje zoptymalizowany algorytm dyskretnej transformaty Fouriera korzystający ze współczynników wektora rotującego (twiddle factors), aby wyznaczyć moce sygnału dla trzech zakresów częstotliwościowych: 400 Hz, 2000 Hz i 4000 Hz. Wyznaczone wartości są z kolei przeliczane (zakres 0…127) na współczynnik wypełnienia dla trzech wyjściowych kanałów PWM, za pomocą których urządzenie steruje pracą diod powerLED (z wykorzystaniem wbudowanych tranzystorów MOSFET) podłączonych do złącza LED.
Zastosowano tutaj programowy, 3-kanałowy, 7-bitowy generator PWM, bazujący na tym samym układzie czasowo-licznikowym Timer0 i jego przerwaniu od porównania zawartości licznika z wartością rejestru OCR0A (TIM0_COMPA_vect). Takie rozwiązanie było konieczne, ponieważ mikrokontroler ATtiny13 dysponuje wyłącznie dwoma kanałami sprzętowego generatora PWM, co jest w tym wypadku niewystarczające.
Uważny Czytelnik zastanowi się również nad zagadnieniem, w jaki sposób tak prosty mikrokontroler o pamięci programu wielkości 1 kB i 64-bajtowej pamięci RAM jest w stanie zrealizować skomplikowane obliczenia dyskretnej transformaty Fourier’a DFT. Zastosowałem tutaj wiedzę zawartą w interesującym artykule autorstwa Łukasza Podkalickiego (EP 12/2019) prezentującym arcyciekawe zagadnienia z zakresu DSP w odniesieniu do transformaty Fouriera w ujęciu realizacji na prostych, 8-bitowych mikrokontrolerach o ograniczonej mocy obliczeniowej i niewielkiej ilości pamięci RAM. Autor opisuje tam, jak przy użyciu arytmetyki stałoprzecinkowej i współczynników wektora rotującego w prosty sposób jesteśmy w stanie wykonać dyskretną transformatę Fouriera (DFT) sygnału audio, otrzymując widmo jego mocy. Na pierwszy rzut oka wydaje się to niewiarygodne, ale naprawdę działa. Oczywiście stosuję tutaj pewną sztuczkę polegającą na tym, że moc sygnału obliczana jest wyłącznie dla wybranych prążków częstotliwościowych, ale w niczym nie umniejsza to możliwości liczenia transformaty Fouriera na tak niewielkim mikrokontrolerze AVR.