Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

MIDI, Bascom i 89C4051 - help?

robiw 30 Apr 2007 21:05 1669 6
  • #1
    robiw
    Level 26  
    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
    robiw
    Level 26  
    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
    RSP
    Level 27  
    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
    crazy_phisic
    VIP Meritorious for electroda.pl
    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
    robiw
    Level 26  
    RSP wrote:
    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
    RSP
    Level 27  
    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.