logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Atmega16][C] Baud 31250, przekłamania UART, odtwarzanie midi

Krokus22 15 Mar 2011 21:33 1536 1
REKLAMA
  • #1 9281419
    Krokus22
    Poziom 19  
    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
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Oraz usart.c (biblioteki LCD są napisane dobrze, z kursu diodaC)

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 9298409
    Krokus22
    Poziom 19  
    Witam, problem leżał po stronie sprzętowej, opornik do kolektora w transoptorze powinien mieć wartość 470Ω zamiast 10k dla transoptora 6n138. Wówczas wszystko działa jak należy. Dziękuję za zainteresowanie i pozdrawiam.
REKLAMA