ps. Jest jeszcze jedna możliwość poprawy tego kodu, choć wymaga daleko idących zmian. Całkowite odcięcie timingów od generowania PWM. Czyli: timingami zajmuje się niewykorzystany licznik TIMER0 pracujący w trybie CTC, czym zachowujemy elastyczność i zależność tonacji od częstotliwości kwarcu. Zaś liczniki TIMER1 i TIMER2 puszczamy na 8 bitów, i wtedy grają równo...
No, proszę. Ktoś chyba doszedł do takich samych wniosków. Otóż istnieje kod zwany
avr-psg, który w 99,9% właśnie w ten sposób poprawia to oprogramowanie układowe (Różnica jest kosmetyczna co do wykorzystania sposobu jak skracać licznik TIMER0). Zatem mamy:
- licznik TIMER0 jako konfigurowalna poprzez dane w EEPROM podstawa czasu,
- liczniki TIMER1 i TIMER2 działają jako 8 bitowe w trybie FastPWM - więc mamy 3 identyczne przetworniki DAC 1-bit,
- z tego co analizowałem, to poprawiono też tabelę głośności i obwiedni by operowała na 8 bitach.
Jak to gra? IMO nieźle. Możecie się sami przekonać odsłuchując nagrania. Specjalnie nagrania są zapisane w wysokiej jakości jako FLAC 24-bit 48KHz. Wszystkie nagrane w tych samych warunkach, przez wejście liniowe prosto z mojego Multiinterface. Odtwarzaniem zajmował się HQ48 SMD z uruchomionym programem SoundTracker. AVR-PSG działał na ATmega48PA taktowanym 20MHz (bez OC

).
https://filebin.net/asv278if9delwx5u# (plik zip, 150MB)