Elektroda.pl
Elektroda.pl
X
Relpol
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ATMEGA128][Touch panel] jak podłączyć.

karol1010 05 Lis 2009 19:56 15316 51
  • #31 05 Lis 2009 19:56
    Mat_91
    Poziom 25  

    A nie można po prostu wysyłać dane do µC przez UART a na karcie to już µC by wszystko zapisał? :)

    Połączenie z kompem było by wymagane w momencie wgrywania obrazków na karte, a później można odłączyć i mamy niezależny system.

  • Relpol
  • #32 05 Lis 2009 20:14
    adambehnke
    Poziom 24  

    No to lipa. Akurat wszystkie karty mam formatowane. Czyli w tym momencie nie rozumiem w jaki sposób mogę załadować do niej obrazki. Czyli wychodzi na to że z mojego pomysłu nici?

    Dodano po 6 [minuty]:

    Mat_91 napisał:
    A nie można po prostu wysyłać dane do µC przez UART a na karcie to już µC by wszystko zapisał? :)

    Połączenie z kompem było by wymagane w momencie wgrywania obrazków na karte, a później można odłączyć i mamy niezależny system.




    Taka możliwość oczywiście istnieje ale przysparza trochę problemów. Ja osobiście wolał bym uzyskać system plików na karcie. Na bieżąco mogę uaktualniać wybrane obrazki na PC. Chyba że istnieje inny sposób przechowywania obrazów. Ale znowu problem z ich zapisanie.
    Najprostsze jest zapisanie ich w kodzie atmegi ale znowu ograniczenia pamięci. Chyba że istnieje sposób na rozszerzenie pamięci mikrokontrolera w taki sposób aby uznawał ją za swoją własną. Tu może trochę przykolorowałem :)

  • #33 05 Lis 2009 20:43
    atom1477
    Poziom 43  

    Można zrobić uproszczony system plików. To znaczy system plików będzie normalny, ale układ z uP będzie miał uproszczoną obsługę systemu plików.
    To znaczy będzie szukał tylko jednego konkretnego pliku.
    W takim razie wystarczy obsługa katalogu głównego.
    Pomysł z UARTem też dobry. Zapomniałem wspomnieć i jak widać ktoś mnie uprzedził ;p

    Dodano po 2 [minuty]:

    AVRowi nie rozszerzysz pamięci. Ja bym dał UARTa skoro chcesz zmieniać obrazki tylko przy okazji zmiany programu na uP (tak wnioskuję).

  • #34 09 Lis 2009 18:48
    adambehnke
    Poziom 24  

    Podłączyłem Touch pad wg. opisu i kodu z paru postów wyżej (kolegi: Atom) i coś jest nie tak.
    Otóż działa mi tylko 1/4 panela dotykowego. Wg. podłączeń z postu działa mi lewy górny narożnik. Zamieniając piny na taśmie od touch panela można sprawić że działają inne cześci panela. Ale zawsze tylko 1/4. Wiecie może o co chodzi lub co robię źle?

    Dodano po 2 [minuty]:

    oto mój kod:

    Code:
    Get_touch_screen:
    
    '    '===============================
        Xl_port = 0
        Xr_port = 0
        Yu_port = 1
        Yd_port = 1

        Xl_ddr = 1
        Xr_ddr = 1
        Yu_ddr = 0
        Yd_ddr = 0

        Waitus 100

        Z = Getadc(yd_adc)
        '===============================


        '===============================
        Xl_port = 0
       Xr_port = 1
        Yu_port = 0
        Yd_port = 0

        Xl_ddr = 1
        Xr_ddr = 1
        Yu_ddr = 0
        Yd_ddr = 0

        Waitus 100

        X = Getadc(yd_adc)
        '===============================


        '===============================
        Xl_port = 0
        Xr_port = 0
        Yu_port = 0
        Yd_port = 1

        Xl_ddr = 0
        Xr_ddr = 0
        Yu_ddr = 1
        Yd_ddr = 1

        Waitus 100

        Y = Getadc(xl_adc)
        '===============================



    pytanie do czego jest to:
    Code:
    Z = Getadc(yd_adc) 



    uzywam zmiennych X i Y do określenia pozycji. Może robię źle?

    I jak skonfigurować ADC ?
    Mam tak:
    Code:
    Config Adc = Single , Prescaler = Auto , Reference = Internal  

  • #35 09 Lis 2009 21:11
    atom1477
    Poziom 43  

    Z określa czy panel został wciśnięty. A nawet można zrobić czujnik siły nacisku.
    Reference ustaw na AVCC. Teraz masz Internal i właśnie to jest problem.

  • Relpol
  • #37 11 Lis 2009 21:34
    adambehnke
    Poziom 24  

    Jeszcze jedno pytanko. Nie chcę bez sensu tworzyć nowych tematów a to pytanie w sumie pasuje tu.

    Otóż zna ktoś jakiś programik w którym mogę sobie tworzyć pliki .bgf ? Konwertowanie obrazków z bitmap w bascomie jest co najmniej super uciążliwe , a i tak po skonwertowaniu czasami i tak mają jakość do d.....
    Widziałem gdzieś na www coś takiego. Chciałbym w tym momencie zacząć tworzyć sobie menu na Lcd graficzny i jakąś klawiaturkę ale jak mam znowu robić coś w corelu i potem w Bascomie to przerabiać to mnie Boże Narodzenie zastanie.
    Przypadkiem natknęłem się w necie na coś takiego (oczywiście na fotkę a nie na soft):

    [ATMEGA128][Touch panel] jak podłączyć.

  • #38 12 Lis 2009 10:02
    karol1010
    Poziom 21  

    Witam czy możesz wytłumaczyć po krotce kod adambehnke? ten wyżej?

  • #40 12 Lis 2009 20:07
    adambehnke
    Poziom 24  

    hmm, może inaczej. Zamieszczam działający programik testowy. Na jego bazie można troszkę pogrzebać i zrozumieć co i jak.


    Code:
    $regfile = "m32def.DAT"
    
    $crystal = 1000000
    $baud = 19200
    $hwstack = 64
    $swstack = 32
    $framesize = 64


    Config Graphlcd = 240 * 128 , Dataport = Portb , Controlport = Portc , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 6

    Dim Temp As Byte , X As Integer , Y As Integer , Z As Integer
    Dim C As String * 9
    Dim V As Integer
    Dim H As Integer

    Config Adc = Single , Prescaler = Auto , Reference = Avcc


    Enable Interrupts

    Start Adc






    Cls

    Cursor Off


    Showpic 0 , 0 , L
    Showpic 36 , 0 , R
    Showpic 0 , 30 , U
    Showpic 90 , 0 , D


    Locate 15 , 1
    Lcd "TEST WYSWIETLACZA GRAFICZNEGO 240*128"
    Locate 16 , 1
    Lcd "TOSHIBA 6963C"


    Do
    Gosub Readtouch
    Cls Text

    Locate 12 , 1
    Lcd "Touch X " ; X
    Locate 13 , 1
    Lcd "Touch y " ; Y
    Locate 14 , 1
    Lcd "Status: " ; C



    Gosub Readposition


     'rysowanie
    V = X / 7.5
    H = Y / 4



      Pset H , V , 1



    Loop



    Readtouch:
    Config Pina.0 = Output                                      ' Makes port F.0 output
    Config Pina.2 = Output                                      ' Makes port F.0 output
    Set Porta.0                                                 ' Sets port F.0 High
    Reset Porta.2                                               ' Sets port F.2 Low
    Ddra.1 = 0                                                  ' Sets port F.1 as input
    Ddra.3 = 0                                                  ' Sets port F.1 as input  because we need it now as ad input
    Waitms 20                                                   ' Wait until the port is stable




    Y = Getadc(3)                                               ' Read the ad value for the y
    Y = 1024 - Y                                                ' Invert the reading

    Config Pina.1 = Output                                      ' Makes port F.1 output
    Config Pina.3 = Output                                      ' Makes port F.3 output
    Reset Porta.1                                               ' Sets port F.1 Low
    Set Porta.3                                                 ' Sets port F.3 High
    Ddra.0 = 0                                                  ' Sets port F.0 as input
    Ddra.2 = 0                                                  ' Sets port F.2 as input  because we need it now as ad input
    Waitms 20                                                   ' Wait until the port is stable
    X = Getadc(2)                                               ' Read the ad value for the x
    X = 1024 - X                                                ' Invert the reading

    Return





    Readposition:


    If X > 188 And X < 289 And Y > 80 And Y < 170 Then C = "LEFT"
    If X > 188 And X < 289 And Y > 206 And Y < 299 Then C = "RIGHT"





    If X < 2 And Y < 3 Then C = "NONE"



    Return











    D:
    $bgf "d.bgf"

    L:
    $bgf "L.bgf"

    R:
    $bgf "R.bgf"

    U:
    $bgf "U.bgf"



    Programik pozwala na klikanie dwóch przycisków oraz na proste rysowanie po ekranie w ślad za rysikiem.

    W załączniku pliki bgf potrzebne do ww. kodu.



    A co do mojego pytania odnośnie tworzenia bgf-ów to zna Ktoś jakiś program pozwalający zapisywać pliki graficzne bezpośrednio w formacie *.bgf??

  • #41 13 Lis 2009 08:01
    karol1010
    Poziom 21  

    piszemy toshiba a nie toschiba :)

  • #42 13 Lis 2009 19:40
    adambehnke
    Poziom 24  

    Cytat:
    piszemy toshiba a nie toschiba


    <rotfl>



    Dodano po 3 [minuty]:

    Otrzymałem odpowiedź z Artronica odnośnie kontrastu:



    Cytat:
    Kontrast ustawiamy w następujący sposób.

    Z wyjścia Vout lub Vee (wyjście generatora napięcia ujemnego)
    pobieramy napięcie ujemne na potencjometr 25kohm (33k i 47k tez mogą być)
    drugi koniec potencjometru do masy

    z suwaka podzielone napięcie ujemne podajemy na wejście Vo

    Potencjometrem ustawiamy napięcie przy którym kontrast jest optymalny

    Przy przesterowaniu wszystkie pixelki powinny się "otworzyć" i "pokazać" światło podświetlenia niezależnie czy wyświetlacz otrzymał jakieś dane czy nie.
    Ustawiamy kontrast na skraju wysterowania pixeli i doregulowywujemy na docelowym obrazie.

  • #44 21 Lis 2009 20:03
    KJ
    Poziom 31  

    Witam. Mam pytanie odnośnie rezystorów szeregowo z panelem dotykowym. na jednych schematach one występują na innych nie. Zauważyłem ze jak ich nie ma to odczyty współrzędnych są stabilniejsze. Pytanie wiec czy brak rezystorów nie spowoduje szybszego zużycia panelu ?

  • #45 21 Lis 2009 20:20
    adambehnke
    Poziom 24  

    Rezystory nie są wymagane do poprawnej pracy panela. Zabezpieczają port przed przypadkowym zwarciem-uszkodzeniem. Przekopałem całe tony informacji w necie jak podłączałem swój panel jak i udzielili mi pomocy koledzy z forum. Rzeczywiście bez rezystorów odczyt jest stabilniejszy, ale najlepiej zmniejszyć częstotliwość odczytu touch pada i problem znika.

  • #46 22 Lis 2009 02:45
    KJ
    Poziom 31  

    Nie zdarzyło mi się uszkodzenie portów zwarciem itp więc póki co rezystory usuwam. Generalnie panel już działa i to bardzo dobrze obsługa programowa jest nawet przyjemniejsza od obsługi zwykłej klawiatury czego się nie spodziewałem. Mam jednak pytanie czy ktoś ma jakiś pomysł na generowanie przerwania w momencie dotknięcia ekranu ? tak aby nie było konieczności ciągłego sprawdzania czy coś zostało naciśnięte.

  • #47 06 Lut 2010 15:38
    Smoczy
    Poziom 18  

    Odświerzam, ale może jakiś pomysł poddam odnośnie obsługi panela dotykowego, chodzi o wykrywanie czy został nacisnięty jakiś klawisz. Można to zrobić np.:
    podciągamy obydwie strony warstwy X panela do zasilania poprzez uaktywnienie pullup w porcie,
    łaczymy obydwie strony warstwy Y do masy poprzez podanie stanu L na przez port,
    wejście przerwania sprzętowego np. INT0 łączymy diodą z warstwą X (anoda do INT, ktoda do X). w momencie, jak naciskamy panel rezystancja jego jest na tyle mała, że powinno się wygenerować przerwanie opadającym zboczem,

    a potem to standard tak, jak każdy z was lubi obsługiwać panel. Niestety nie podam przykładu w Bascom, ponieważ nie piszę w tym języku. W C panel mam opanowany dość dobrze więc jeżeli jest ktoś chętny to pomogę.
    P.S. Ja w swoich projektach wykonuję także kalibrację panela dotykowego, ponieważ na powierzchni panela nie występuje pełen zakres zmian napięcia, jest on okrojony od góry i od dołu. Ponadto jest rózny dla osi X oraz Y.
    Mołej pracy, Łukasz

  • #48 09 Lut 2010 00:26
    KJ
    Poziom 31  

    Testowałeś to w praktyce ? Czy to tylko twoja teoria ? Bo by wyglądało ze wystarczy diodę wstawić między jedno wyjście X a wejście INT0. Coś mi się to za proste wydaje zwłaszcza ze utknąłem na tej kwestii jakiś czas temu i póki co rozwiązania brak. Trochę się już nakombinowałem z komparatorami analogowymi i dalej nie mam rozwiązania problemu. Przetestować nie mam jak bo LCD jest tak podpięty ze zajmuje wszystkie INT-y swoimi pinami a pozostałe są zajęte innymi peryferiami. Docelowo będzie jednak pracował w innym urządzeniu.

  • #49 09 Lut 2010 09:32
    Smoczy
    Poziom 18  

    Tak u mnie działa, i tak po dłuższym zastanowieniu doszedłem do wniosku, że jak by się postarał, to chyba by się nawet bez diody obeszło. Rezystncja mojego panela to:
    - dłuższy bok ok 800ohm
    - krótszy bok ok 300ohm
    Podajemy pullup na dłuższy bok (X), masę na krótszy (Y). Po naciśnięciu w dowolnym punkcie (wartość wypadkowa rezystancji dzielnika się nie zmienia, ponieważ dwa jego końce są połaczone ze sobą), na 99% jest w stanie wygenerować nam przerwanie. Można spróbować też bez diody, ustawiając wejście INT jako hi Z.
    Przetestować możesz nie kożystając bezpośrednio z przerwań, tylko np. ustawiając w programie testowanie stanu portu (nawet bezpośrednio wejścia X) i generowanie programowego przerwania. To dla przetestowania, czy moje rozwiązanie Będzie u Ciebie działać.
    Poza tym, nie wiem jaki sterownik masz w panelu i na jakim konkretnie procku pracujesz, ale mogę powiedzieć, że można podłaczyć T6963C do każdego AVR posiadającego sprzętowy moduł obsługi pamięci zewnętrznej tak, że w programie będzie widziany i obsługiwany jako 2 komórki w pamięci. Ułatwia to wiele spraw,nawet do tego stopnia, że da się wykożystać piny podłaczone do panela także do innych celów.
    Miłej pracy, Łukasz

  • #52 09 Lut 2010 20:41
    Smoczy
    Poziom 18  

    ok, prosże bardzo, tutaj jest schemat, podłancza się go klasycznie, bez dekodera adresów i bez zatrzasku, czas pomiedzy zboczem opadającym sygnału /CE oraz /RD lub /WR może być zerowy więc łaczymy obydwa sygnału razem (przez diody)i do wejścia /CE. W programie definiujemy 2 komórki pamięci np COMAND oraz DATA_R_W i przypisujemy im sztywne wartości w pamięci w obszarze EXTERNAL. Na schemacie jest takie podłączenie, że mogą one mieć adres odpowiednio np. 1100h oraz 1200h. Chodzi o to, żeby zmieniał się bit portu połączonyz wejściem C/D i tyle. Resztę pinów, odpowiednia ich konfiguracja i czasy trwania stanów nas nie interesują, załatwia wszystko sprzęt. Jeżeli kożystamy z rezonatora do 10MHz (teoretycznie nawet do 12MHz) nie trzeba ustawiać sprzętowych waitstate. Jeżeli jest większy kwarc to jeden waitstate wystarczy. Zastanawiam się czy nie będzie lepiej założyć osobnego wątku na temat wyświetlacza lcd, żeby było łatwiej szukać. Dokładam jeszcze fotkę tak działającego wyświetlacza z panelem dotykowym.
    Pozdrawiam, Łukasz

    Załączniki: