4 vezetékes rezisztív érintőképernyő olvasása

Hogyan programozzak AVR chipet? Programozók beállításai...
Bascom nyelvű programok...
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Igazad lehet!:
„Elég kicsi a pozíciók eltérése, tehát egy nagy hiba okozhat eltérést, mivel a beolvasási hiba bennemarad (igaz, csak 16-a).”
Próbálok 2 egyforma értéket megvárni.
Meglátom menyire lassúl le?

Kösz!
Végre már az én projectem is halad.
:lol:
Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

Hozzászólás Szerző: kovacsna »

Szia!

Én a helyedben rátennék egy digitális felüláteresztő IIR szűrőt! Viszonylag könnyen leprogramozható. Teljesen megoldaná a gondodat. A prellt is könnyen ki tudnád szűrni, meg az egyéb durva hibákat is. Pl véletlen érintés.
Gondold át szerintem. Ráadásul jól paraméterezhetővé válik.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

„digitális felül áteresztő IIR szűrőt!”???

Bocsi de nekem ez még ismeretlen fogalom!

Tudnál valami bővebbet róla, vagy valami leírást?

Köszönöm!
:?:
Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

Hozzászólás Szerző: kovacsna »

Igen!

Digitális, mert ugye nem R-L-C tagokból áll. Vagy kapukból, vagy egy program valósítja meg

Felül áteresztő, mert itt neked az kell.

IIR - végtelen impulzusválaszú.

A második link nagyon beszédes! Hidd el, megéri a macerát! Egyszer megcsinálod, és szinte minden alkalmazásban használhatod ahol analóg méréseket kell csinálni. nagyon sok mintát találsz a neten rá.

Egy Duino-s alkalmazásban mi is használjuk. Azt pl a kollégám írta. Ő nagy ágyú az ilyenben. Mivel nem szeretnék az ő tollával ékeskedni, illetve az az eszköz egy termékünk, így nem illeszteném ide a program részletét.

http://dsp.mit.bme.hu/userfiles/diploma/ebner09.pdf

http://wiki.ham.hu/index.php/Diszkr%C3% ... B1r%C5%91k

Csak írd be a gugliba , hogy iir szűrő.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Az elmélet érdekes. De nem tudom, hogyan alkalmazzam az én problémámra?

Képzeljünk el 2db egymáshoz képest 90 fokkal elforgatót, Potmétert.
Amiknek a csúszkái csak akkor érintkeznek, ha megnyomják őket.
Mint minden nyomógombnál itt is bizonytalan az érintkezés.
Ehhez még hozzá adódik, hogy egymás után olvassuk be a potméter értékeit.

Két egymás után beolvasott analóg érték, kiértékeléséhez, hogyan jön a zajszűrés?

Eddig ami javított a hiba százalékon, ha az egyik oldalon nem érvényes a mért érték akkor a másikat is eldobom!

Azért még Guuglizok! Hátha találok valami jó példát!
:?

Más: (A megrendelő nem támogatja az újabb HW költségeket! Ezért SW ötletek kellenének!)
:cry:
Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

Hozzászólás Szerző: kovacsna »

Pedig leírtad a megoldást!:)

Vonatkoztass el a zajtól! A klasszikus értelemben vettől legalábbis.
A zaj is egy hiba.

Amit olvasol az AD-ról, azt belekergeted a IIR szűrőbe. A kimenete a szűrőnek pedig, csak az általad meghatározott paraméterek alapján adja csak vissza az értékeket.
És ezt ugye nagyon sok mintavétellel kell értelmezni!

Érted?

Pl. Alig érsz hozzá a tuch-hoz. Ezért ezt látni sem fogod, a szűrő kimenetén!

Ez csupán szoftverrel, megoldható!

Szerintem, amint olvasgatod a leírásokat, majd megérted. De segítek ha tudok!
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Értem mire gondolsz. Csak még az alkalmazása nem egészen tiszta nekem!
Most van Ez az átlagoló rutin:

Kód: Egész kijelölése

    Touch_yp = 0
    Waitms 20                                               ' Wait until the port is stable
    For I = 1 To 16   ’16* Olvasás összege
       Waitus 100
       Touch_yp = Touch_yp + Getadc(touchp_yp)              ' Read the ad value for the y
    Next I
Shift Touch_yp , Right , 4     ’Osztás 16-al
’ Ami nem jó mert ha 1 nagyon kicsi érték beugrik elhúzza az egész átlagát.
Ehelyett javasolod ezt az algoritmust:
És nézzünk egy példát az IIR implementációra, ahol mint a fenti blokkvázlaton látható, nem csak az új minták, hanem a régebbi eredmények is meghatározzák az új eredményt.

Kód: Egész kijelölése

/*
  IIR szűrő konvolúciót megvalósító részlete
  Bemenetek:
     m: <konvhossz> hosszú minta vektor
     a: <konvhossz> hosszú együttható vektor
     eredm: <konvhossz> hosszú előző eredményekből álló vektor
     b: <konvhossz> hosszú együttható vektor a visszacsatoláshoz
  Kimenet: a konvolúció eredménye
  A kimenetet ne felejtsük el a főprogramban az eredm vektorhoz hozzáilleszteni,
  hiszen az alábbi szűrő esetén felhasználjuk a következő számításhoz.
*/
 
float konvolval_iir(float short *m, const float *a, const float *eredm, const float *b, int konvhossz) {
    int i;
    float er=0;
    for (i=0; i<konvhossz; i++) er += m[i] * a[i]   +   eredm[i] * b[i];
    return er;
}
Megpróbálom illeszteni Bascomhoz!???

Köszönöm! 8)
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Létrehoztam 4 tömböt.
Amikbe még nem tudom milyen adatokat kel betölteni?
Hogy utána meghívjam az alábbi rutint.

Kód: Egész kijelölése

$crystal = 16000000

$hwstack = 174
$swstack = 174
$framesize = 174

$baud = 19200

Const Konvhossz = 16
Dim M(konvhossz) As Word                                    ' minta vektor
Dim A(konvhossz) As Word                                    'együttható vektor
Dim Eredm(konvhossz) As Word                                'előző eredményekből álló vektor
Dim B(konvhossz) As Word                                    'együttható vektor a visszacsatoláshoz

Declare Function Konvolval_fir()as Word
Declare Function Konvolval_iir()as Word

Do

Loop

End                                                         'end program

Function Konvolval_fir()as Word
     Local I As Byte
     Local Er As Word

     For I = 1 To Konvhossz
         Er = M(i) * A(i)
         Konvolval_fir = Konvolval_fir + Er
     Next I
End Function


Function Konvolval_iir()as Word
     Local I As Byte
     Local Er As Word
     Local Er2 As Word

     For I = 1 To Konvhossz
         Er2 = Eredm(i) * B(i)
         Er = M(i) * A(i)
         Er2 = Er2 + Er
         Konvolval_iir = Konvolval_iir + Er2
     Next I
End Function


Most, hogyan tovább Melyik tömbbe milyen értékek Kelenének?
:? :?:

Hogyan kerül bele a régebbi eredmény?
Meg melyik régebbi?
Létre van hozva 5 * 15 virtuális gomb a touch-on (PC billentyűzet emuláció)
Most mind a 75-re kellene 1 Ilye függvény? De fogalmam sincs épen melyik gomb aktív?
Ép azt kellene pontosan megállapítani!

Bocsi de nagyon nem értem ?
:roll:
A hozzászólást 2 alkalommal szerkesztették, utoljára kapu48 2012. július 1. vasárnap, 8:34-kor.
Avatar
winnerbt
Elektronbűvölő
Hozzászólások: 907
Csatlakozott: 2007. március 25. vasárnap, 6:00

Hozzászólás Szerző: winnerbt »

Csak a partszélről belevau:
Nem néztem, hogyan csinálod (másfelé van most az agyam), de
mi lenne, ha mérés előtt csak azt néznéd meg, hogy hozzányúltak-e. Tehát X+=Vcc, Y-=GND, mérés a másik 2 valamelyikén.
Ha "szakadt", akkor eleve eljössz, ha van kontakt, akkor
mondjuk egy bit bebillent, hogy a következő ránézéskor (én tipikusan 7-14Hz-el nézegetem a gombokat meg ilyeneket) ADC meg a többi szűréses micsoda. ADC-zés előtt mindig ránéz még, hogy szakadt-e, akkor nem mérünk (felengedés).
Lehet, hogy így csinálod, akkor bocs.
A fene sem gondolta volna, ilyen vacakolás van ezzel is...
JAni
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Szerintem is ez a 8 Bites Proci nem fogja megfelelő sebességgel elvégezni azt a sok Wordos szorzást és összeadást! Végül olyan nagy számok keletkeznek, amik már el sem férnek a 1 WORD-ba.

De azért érdekel a téma. Ha már ennyire dicsérik. Jó lenne megérteni!
Majd használható lenne az ARM projectekben.
:)

Ezt még nem próbáltam: "Ha "szakadt", akkor eleve eljössz, ha van kontakt, akkor mondjuk egy bit bebillent, "

Megnézem! Valahogyan csak hibamentesnek kellene leni a beolvasott helyzetnek.
8)
Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

Hozzászólás Szerző: kovacsna »

Ne hülyéskedj már...
Amit mi építettünk eszközt, abba Nano van. Azon meg ugye egy mega328 csücsül. Gond nélkül megy!
Az IIR szűrőnél elég egyetlen tag!!!(elsőfok) Amúgy sem lehet ennél a típusnál a fokszámot növelni büntetlenül.(lásd leírás)

Csináld meg és jó lesz!
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Csinálnám én! Csak nem értem mit?

Const Konvhossz = 16
Dim M(konvhossz) As Word ' minta vektor
Dim A(konvhossz) As Word 'együttható vektor
Dim Eredm(konvhossz) As Word 'előző eredményekből álló vektor
Dim B(konvhossz) As Word 'együttható vektor a visszacsatoláshoz

M = Az egymás után beolvasott 16 ADC érték
A = 'együttható vektor EZ Mi legyen?
Eredm = 'előző eredményekből álló vektor. Mi köze az előző M gombnak a mostani X-hez?
B = 'együttható vektor a visszacsatoláshoz. Hát ezt sem tudom, minek vegyem?

:? :oops: :cry:
Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

Hozzászólás Szerző: kovacsna »

http://e-oktat.pmmf.hu/kepeshang_5_fejezet

Összeszedek neked majd még pár dolgot.
Az együtthatók számításához találsz a neten programokat!

A konkrét problémádra is megpróbálom a leírást megadni. Ok?

Csak most el vagyok havazva.

Na ez tuti hasznos:

http://ez.analog.com/thread/2351

Ha elfogadsz egy jó tanácsot!
Elsőként a szűrő működését értsd meg. Vonatkoztass el az áramkörödtől!
Mikor én találkoztam elsőként ezzel, akkor ugyanígy nem értettem!

Olyan ez, mint a karnaugh minimalizálás. Egyszer beugrik és és kész.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Hozzászólás Szerző: kapu48 »

Hát?
Az említet oldalakon, Frekvenciákra vannak számítások.

Viszont nekem (vegyünk egyszerűbb alkalmazás) 3 oszlopos 5 soros mátrix.
Aminek az alábbi értékek a határai:

Kód: Egész kijelölése

'----------------------- Dekodolás 3 Oszlop / 5 Sor -----------------------------------------------------------
Sub Touch3x5()
   ' Oszlopok szelektálása
   Select Case Touch_xp                                     ' For the x value
            Case 160 To 375 : Touchx_col = 1                '
            Case 376 To 595 : Touchx_col = 2                '
            Case 596 To 820 : Touchx_col = 3

            Case Else Touchx_col = 0
   End Select
     ' Sorok szelektálása
   Select Case Touch_yp                                     ' For the y value
            Case 300 To 360 : Touchy_row = 1                '
            Case 361 To 450 : Touchy_row = 2                '
            Case 451 To 560 : Touchy_row = 3
            Case 561 To 650 : Touchy_row = 4                '
            Case 651 To 690 : Touchy_row = 5

            Case Else Touchy_row = 0
   End Select
End Sub
Erre kellene valami példa!
:?:
Avatar
kovacsna
Pákabűvész
Hozzászólások: 208
Csatlakozott: 2008. június 3. kedd, 6:00

Hozzászólás Szerző: kovacsna »

Persze! Az alapja az egésznek, hiszen mintavételezés történik.

Vonatkoztassunk most el a problémádtól! Hagyjuk a mátrixot, egyebeket!

Mikor megnyomod a panelt, egy analóg jel áll elő. Igaz? Ez a jel ideális esetben azonnal beállna, annak megfelelően, ahol megnyomtad a panelt.
Viszont ez nem így van. Zajos lesz, a panel miatt, a nyák miatt, az ADC miatt, stb. Na ezeket a szemeteket kell kiszedni. Azt pedig ne felejtsd el, hogy közben telik az idő és megy a mintavételezés! Minden időpillanatban, más értéket kapsz!

Megnyomod 1 sec-ig a panelt, és ezen idő alatt veszel 100 000 mintát (fiktív számok).A minta 85-től 120-ig változik. Ezt a minta mennyiséget, egy szűrőn átengedve, a végén kapsz 60 000 mintát. Ami mondjuk 100-tól 102-ig változik. Ez fogja neked megmutatni az eredeti jelet, de a szemét nélkül. Tehát mindegy hol nyomod a kijelzőt. A kapott érték úgymond a "tiszta" jel lesz.
Itt kell eldönteni, hogy a szűrőt , hogyan paraméterezed. Mennyire szűrjön, legyen gyors, stb.

Aztán a kapott számot már feldolgozod, és itt rendeled a mátrixodhoz, egyebek.

http://www.puskas.hu/r_tanfolyam/digita ... lgozas.pdf

Az 5. oldaltól nézd a jelalakokat, és megérted! Azt is, hogy mi okozza a hibát, és mit tesz a szűrő vele.

Remélem sikerült jól leírnom és segített.
Válasz küldése