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

[Bascom][DS7843][SPI programowe] proszę o sprawdzenie kodu

Madergames9 09 Kwi 2010 20:14 2988 15
REKLAMA
  • #1 7940769
    Madergames9
    Poziom 15  
    Witam.
    Prosiłbym o sprawdzenie poprawności programu. Usiłuję skomunikować się z układem poprzez Atmega128 i SPI programowe. Jednak układ po wysłaniu ramki nie wystawia na końcówce Busy stanu wysokiego i stoi. Jak wyremuję sprawdzenie tego pinu to efektem jest odczyt "255" i całkowity brak reakcji na dotyk.
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Będę wdzięczny za pomoc.

    Pozdrawiam
  • REKLAMA
  • #2 7941090
    mpietras
    Poziom 17  
    pb.4 masz skonfigurowane jako wyjście i jednocześnie używasz go jako CS i BUSY.
    Poza tym powinno być wg. noty katalogowej Bitwait "BUSY", reset.
    W miejsce "BUSY" wstaw pin do którego podłączona jest linia BUSY z DS.
    Pin ten skonfiguruj jako wejście.

    Właśnie sobie uświadomiłem, że we wszystkich swoich programach stosuję składnie
    Config portx.y = ... zamiast
    Config pinx.y = ... jak jest w helpie ale wszystko działa
  • REKLAMA
  • #3 7942124
    Madergames9
    Poziom 15  
    Poprawiłem trochę kod i wygląda to teraz tak:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Dalej nic się nie dzieje. Jak powinny być poustawianie porty. Chodzi mi szczególnie pin do którego podłączona jest końcówka "Busy" oraz "MISO" bo wyczytałem gdzieś, że oprócz konfiguracji SPI programowego trzeba niezależnie ustawić "MISO" jako wyjście. Jeszcze jedna sprawa to Sck. Czy tam jest sygnał zegarowy i jak to sprawdzić?. W przypadku SPI sprzętowego można ustawić jaka jest jego częstotliwość jednak w przypadku SPI programowego nie znalazłem takiej opcji. Mam taktowanie 16Mhz to może prędkość jest za duża..?
  • REKLAMA
  • #4 7943832
    Madergames9
    Poziom 15  
    Nikt nic nie wie...?
  • #5 7944648
    mpietras
    Poziom 17  
    powinno być
    Bitwait Pinb.6 , Reset

    to tak na pierwszy rzut oka

    sprawdź i daj znać
  • #6 7946131
    Madergames9
    Poziom 15  
    Niestety, ale nie pomogło. Nie mam pomysłow. A może to błąd biblioteki...?. Jak to można samemu napisać, aby wysyłać bez uzycia Config Spi..?
  • REKLAMA
  • #7 7947178
    mpietras
    Poziom 17  
    Możesz jeszcze podciągnąć PortB.6 do plusa na początku programu, albo zastosować shiftin i shiftout
  • #8 7947790
    Madergames9
    Poziom 15  
    Z Shiftem jeszcze nie próbowałem, ale według noty katalogowej wygląda, że Pinb.6 powinien być pływający, tylko nie wiem, czy ma byś ustawiony jako wejście czy w ogóle nie ustawiony. Jeżeli jednak ustawię Pinb.6 jako wyjście i podciągnę do plusa, to program staje na odczycie z "Busy", czyli układ nie zwraca wykrywa stanu niskiego. Jednak patrząc na przebieg zegarowy z noty katalogowej podczas transmisji na "Busy jest stan niski i dopiero pojawienie się stanu wysokiego powoduje przejście do odbioru danych. Tutaj proponujesz wykrywanie stanu niskiego, więc jak to się ma do reszty programu... nie bardzo rozumiem. Jak sprawdzić czy w ogóle układ odpowiada, a może samo wysłanie danych jest nie poprawne...?. Mógłbyś mi to wyjaśnić jak to rozumiesz..?
  • #9 7950540
    mpietras
    Poziom 17  
    czy to samo co ADS7843?
  • #10 7951324
    Madergames9
    Poziom 15  
    Hmmm według pobieżnego przeglądu not aplikacyjnych wyglada, że to to samo. Przyznaję, że angielskiego nie znam, więc nie mam możliwości wgryzienia się w tekst. Ale z przebiegów i tabel wygląda to samo, czyli jakoby zamiennik. Patrząc na przebiegi to widać, że przy wejściu w cykl to Busy ustawia się w stan niski a po wyjściu ustawia się w stan wysoki. Będę probował poźniej z Shiftem, ale to dopiero za jakies 3 godzinki więc dopiero wtedy będę mógł podać coś więcej...

    Oki wrzuciłem taki kod i w zmiennej E pojawiają, się rózne dane za każdym razem inne, więc co dalej z tym...?

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Dodano po 3 [godziny] 49 [minuty]:

    Teraz spraw ma się tak. Poprawiłem kod programu i wygląd na to, że wszystko działa :
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Tzn odczytuje dane z osi X i Y jednak mam problem z uruchomieniem INT5, gdyż obecnie nie chce wskoczyć do podprogramu. Natomiast, gdy odremuję to co jest w pętli głównej to najpierw odczytuje prawidłowo położenie w osiach, a po odjęciu palca od panela dotykowego zmienna E i F ustawia się niejako centralnie i wyświetla cały czas jedna i druga około 60 , 64. Gdyby Int5 działał to jedno przejście odczytałoby się prawidłowo i by było dobrze. Trochę się powielam teraz z innego tematu, ale może i w tym pomógłbyś mi ?

    Dodano po 3 [godziny] 49 [minuty]:

    W międzyczasie stwierdziłem co następuje. Po włączeniu zasilania odczyt z ADS7843 odbywa się tylko raz po tym jest już głuchy. Programowanie powtórne lub Reset poprzez program Bascom nic nie pomaga. Po wyłączeniu zasilania i ponownym włączenia Sytuacja się powtarza. Jednokrotny odczyt i koniec. Podanie na Int5 bezpośrednio niskiego poziomu też nic nie daje. Wygląda jakby coś się blokowało. Jak można programowo ustawić port do stanu jak po właczeniu zasilania..?. Mówię konkretnie o końcówce 7 Atmegi 128
  • #11 7955747
    Madergames9
    Poziom 15  
    Pomęczyłem się i wymęczyłem to:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Jest to kod działający, czyli sprwdzony/testowany. Teraz będę go wrzucał do programu głównego. Odczyt 8bit jest wystarczający do określenia położenia palucha i rysika równiez. Układ DS7843 nie angażuje mikrokontrolera, więc sprawa warta była chyba zachodu. Udostępniam ten kawałek programu free z myślą, że może teraz ktoś mógłby go jeszcze uprościć. Powiem, że do końca nie wiem dlaczego działa, ale tak jest napewno.

    Pozdrawiam
  • #12 8941366
    slawekjurek
    Poziom 14  
    Kolego Madergames9 męczę się właśnie z ADS7845 pod BASCOMem i próbowałem skorzystać z Twoich doświadczeń, jednak nie za bardzo kapuję jakie piny tego ADSa są podpięte u Ciebie do jakich portów ATmegi?

    Czy mógłbyś to łopatologicznie wyłożyć, będę wdzięczny :)
  • #13 9311303
    Madergames9
    Poziom 15  
    Och bardzo dawno tutaj mnie nie było.. Czy temat kolega jakoś załatwił w inny sposób..?
  • #14 9311558
    slawekjurek
    Poziom 14  
    Szczerze mówiąc mimo własnych pomysłów, nadal mam z tym problem.
    Poza tym myślę, że może fajnie, gdyby Kolega pomógł, dla potomnych... :)
  • #15 9314321
    Madergames9
    Poziom 15  
    Oki.
    Nie jestem z tych co odsyłają nie wiadomo gdzie (najlepiej na google), więc odpowiem :D. Temat podłączenia był opisywany w jednym z wątków, ale do rzeczy. Mam to podłączone do Atmegi128, więc jakby gdzie indziej miało to podejść to odpowiednio trzeba to zmodyfikować. Więc:

    DCLK - PB0
    CS - PB4
    DIN - PB5
    BUSY - PB6
    DOUT - PB7
    PENIRQ - PG3
    IN3 - PE4
    IN4 - PE5

    Tak to u mnie jest podłączone i działa. Co bym zmienił..?. Napewno podłączenie Pod IN3 i 4 bo jakoś wychodzi, że z tym portem bywają problemy więc warto to wziąść pod uwagę. Reszta pozostaje jak wyżej tzn część programowa. Doszedłem do tego metodą prób i błędów, więc jakby co to wal śmiało jak mogę to pomogę. A dla potomnych to zawsze coś na dobry początek zabawy z tym układem..:D
  • #16 9314812
    slawekjurek
    Poziom 14  
    Wielkie dzięki, dam znać jak coś w końcu sensownie mi ruszy :)
REKLAMA