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

Jak obsłużyć MIDI w Bascom na Atmel 89C4051 do sterowania TDA7449?

robiw 30 Kwi 2007 21:05 1954 6
  • #1 3836284
    robiw
    Poziom 26  
    Posty: 2032
    Pomógł: 25
    Ocena: 133
    Witam.
    Potrzebuję zrobić taki miniodbiornik midi z użyciem Atmela 89C4051. Hardware w postaci wejścia midi (DIN), 6N138 i dalej podpięte do nóżki procka (RX) już mam i co dalej? Program ma reagować na sygnał zmiany wartości wybranego kontrolera midi - dalej mam tego używać do regulacji parametrów TDA7449 czyli, krótko mówiąc poprzez midi chcę zmieniać nastawy TDA7449 (bas, sopran itp) ... czyli procek odbiera komunikat midi i jeśli to jest nasz kontroler to zmieniam nastawy TDA7449 - poprzez I2C. No i właśnie problem - jak zabrać się do midi od strony Bascoma... robiw
  • #3 3843524
    robiw
    Poziom 26  
    Posty: 2032
    Pomógł: 25
    Ocena: 133
    Witam.
    Częściowo już wiem, jak to obsłużyć ale pozostaje kilka pytań. Muszę monitorować przesyłane informacje a dane dla mojego sterownika to 3 bajty:

    Bx cc vv - zmiana wartości kontrolera cc (0-127) w kanale x (0-15) na wartość vv (0-127).

    Problemy pozostają takie:
    - czy w Bascomie ustawię $Baud 31250 przy kwarcu 11.059MHz?
    - program nie może stać i czekać na pojawienie się danej bo musi realizować inne funkcje a instrukcja np. INPUT czeka na daną. Program powinien monitorować (ale bez "gubienia" informacji) MIDI i po otrzymaniu bajtu rozkazu 176, odczytać dwa kolejne i wtedy zareagować na rozkaz. Jak to zrobić?

    ...robiw

    PS.
    Tutaj https://www.elektroda.pl/rtvforum/topic239367.html
    trochę o MIDI
  • #4 3843869
    RSP
    Poziom 27  
    Posty: 855
    Pomógł: 86
    Ocena: 164
    Rezonator musi mieć 12 MHz inaczej będzie niemożliwe uzyskanie 31250 . W starych procesorach z serii 8051 zegar był dzielony przez 12 i następnie trafiał do pozostałych elementów procka , nowe wersje 89S51 mają podział zegara przez 2 i następnie przez 6 co łącznie daje oczywiście 12 tyle że jak wyczytałem wstępny podział przez 2 można wyłączyć . Takie rozwiązanie pozwoliło by użyć rezonatora 6MHz .
  • #5 3843909
    crazy_phisic
    VIP Zasłużony dla elektroda
    Posty: 2244
    Pomógł: 278
    Ocena: 131
    Ten procesor ma sprzętowy port szeregowy więc zapewne "wyposażony" został w mechanizmy które czuwają nad wysyłanymi i odbieranymi danymi, a co za tym idzie zgłaszają odpowiednie przerwania w momencie odebrania/wysłania ramki danych.
  • #6 3843971
    robiw
    Poziom 26  
    Posty: 2032
    Pomógł: 25
    Ocena: 133
    RSP napisał:
    Rezonator musi mieć 12 MHz inaczej będzie niemożliwe uzyskanie 31250 . W starych procesorach z serii 8051 zegar był dzielony przez 12 i następnie trafiał do pozostałych elementów procka , nowe wersje 89S51 mają podział zegara przez 2 i następnie przez 6 co łącznie daje oczywiście 12 tyle że jak wyczytałem wstępny podział przez 2 można wyłączyć . Takie rozwiązanie pozwoliło by użyć rezonatora 6MHz .


    To jest 89C4051, choć zapewne dzielnik to też 12. Nie wiem jednak czy to ma znaczenie w przypadku Bascoma? Baud ma być 31250 z dokładnością 1%. Swoją drogą zastanawiam się czy obsługa przerwania od RX nie wywali transmisji I2C jeśli będzie przebiegać w tym czasie. Zresztą po odebraniu odpowiedniej informacji przez MIDI procedura obsługi przerwania także musi wysłać dane przez I2C... robiw
  • #7 3844031
    RSP
    Poziom 27  
    Posty: 855
    Pomógł: 86
    Ocena: 164
    Występuje 89S1051, 89S2051 i 89S4051 trzeba sprawdzić dokumentację do nich ( te procesory są programowane szeregowo przez ISP ). Użycie asemblera , C czy Bascom-a jest bez znaczenia bo to sprzęt uniemożliwia uzyskanie dokładnie 31250 Baud przy innym rezonatorze niż 12MHz ( 6Mhz ) a nie język ( program ) w którym piszemy oprogramowanie.

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy implementacji odbiornika MIDI na mikrokontrolerze Atmel 89C4051 w języku Bascom, mającego na celu sterowanie parametrami układu TDA7449 poprzez I2C. Hardware obejmuje wejście MIDI (DIN), optoizolator 6N138 oraz podłączenie do pinu RX mikrokontrolera. Kluczowym problemem jest obsługa transmisji MIDI z prędkością 31250 baud przy kwarcu 11.059 MHz, co jest wyzwaniem ze względu na ograniczenia sprzętowe 8051, które dzielą zegar przez 12, utrudniając dokładne ustawienie tej prędkości. Zalecane jest użycie rezonatora 12 MHz, aby uzyskać stabilny baud rate 31250. Program musi monitorować strumień MIDI asynchronicznie, bez blokowania głównej pętli, reagując na komunikaty kontrolera (status 176, następnie dwa bajty danych) i odpowiednio zmieniać ustawienia TDA7449 przez I2C. Wskazano, że mikrokontroler posiada sprzętowy port szeregowy z obsługą przerwań, co umożliwia odbiór danych MIDI bez utraty informacji. Jednak pojawia się obawa, czy obsługa przerwania RX nie zakłóci transmisji I2C, gdyż po odebraniu komunikatu MIDI procedura przerwania musi wysłać dane do TDA7449. Podkreślono, że problem dokładnego baud rate nie zależy od języka programowania (Bascom, C, asembler), lecz od sprzętowego podziału zegara i zastosowanego rezonatora.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA