Witam, postanowiłem zrobić prosty sprzętowy dekoder midi na Atmega16, kwarc 14.7456, błąd baudu około 1.5% (dopuszczalny zgodnie z notą katalogową). Samo połączenie przy klasycznym baudzie np. 38400 jest w porządku i znaki wysłane z terminala są poprawnie interpretowane i procesor odtwarza na piezo skalibrowane dźwięki (najniższy ton - 27 dźwięk), niestety przy ustawieniu Baudu na 31250 i podpięciu sprzętowego interfejsu midi (optoizolacja itd) każdy przychodzący znak, który wyświetlam na LCD odbierany jest jako liczba ok. 250, ba czasem wyświetla mi nawet 500, co znacznie przekracza zakres unsigned char. O graniu ciężko mówić. Oczywiście na razie przyjmuję, że pierwszy bajt mnie nie interesuje, gram tylko drugi, którym indeksuję tablicę. Dodam tylko, że informacja midi składa się z trzech bajtów w którym pierwszy mówi o evencie (numer kanału itd), a drugi to wysokość dźwięku, trzeci to siła naciśnięcia klawisza itd. Natomiast gdzieś jest problem z obsługą odbioru i interpretacji bajtu przychodzącego, oto kod:
main.c
Oraz usart.c (biblioteki LCD są napisane dobrze, z kursu diodaC)
main.c
Kod: C / C++
Oraz usart.c (biblioteki LCD są napisane dobrze, z kursu diodaC)
Kod: C / C++