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

[Atmega32][C] obsługa AD7843

pywoo 21 Sty 2011 21:44 1061 2
REKLAMA
  • #1 9038842
    pywoo
    Poziom 18  
    Witam. Przymierzam się do ruszenia obsługi przetwornika AD7843 (kontroler matrycy dotykowej rezystancyjnej). Układ buduje na Atmega32 w tej chwili chodzi na 12Mhz.
    Czy ten przetwornik ruszy na sprzętowym SPI ? Z kilku tematów które znalazłem na forum (co prawda dla Atmega128 i obsługi w bascom ) wynikało że na sprzętowym SPI to nie będzie działało.
    Czy może któryś z kolegów już miał do czynienia z tym przetwornikiem? i mógłby się podzielić spostrzeżeniami lub może jakimś przykładowym kodem w C?

    Pozdrawiam.
  • REKLAMA
  • #2 9039106
    Fredy
    Poziom 27  
    Zrozumiałbym gdyby nie chodziło cos na programowym, ale na sprzętowym to chyba nie możliwe.
    Chyba że chodzi ci o problem współpracy z programatorem przez spi?
  • #3 9095099
    pywoo
    Poziom 18  
    Udało mi się skomunikować z przetwornikiem. Uruchomiłem go w trybie 12 bitowym. Z tym że nie wiem czy otrzymuje poprawne wyniki. Z tego co zrozumiałem z dokumentacji przetwornik zwraca wynik konwersji zawsze jako słowo 12 bitowe niezależnie od trybu konwersji. Zatem aby je odebrać najpierw wysyłam słowo sterujące odbieram 8 bitów, później wysyłam 0x00 i odbieram kolejne 8 bitów.
    Jeśli dobrze zrozumiałem dokumentacje to pierwszy odebrany bajt zawiera 7 starszych bitów a drugie odebrane słowo zawiera 5 młodszych bitów konwersji.
    Zatem trzeba to wszystko poprzesuwać i skleić.
    powiedzmy że pierwszy odebrany bajt to danaH a drugi odebrany bajt to danaL
    a wynik konwersji chcemy mieć w zmiennej danaK.
    w tej chwili wygląda to tak :
    
    danaK = (danaH<<4);
    danaK |=(danaL>>3);
    

    Nie wiem czy to jest dobrze . W trybie w jakim uruchomiłem przetwornik jest on uśpiony i oczekuje na dotknięcie matrycy, jednocześnie podając położenie spoczynkowe Y. Dla spoczynku Y danaH=128 a danaL=127 co w wyniku daje to że danaK=2063.

    Jednak dotykając panel rysikiem wartości nieraz oscylują wokół 2063 a czasami pojawiają się wartości z zakresu 1 do 14.

    A może ktoś miał do czynienia już z tym przetwornikiem i ma jakiś przykładowy kod w C ?
REKLAMA