Fórum témák
» Több friss téma |
Érintőkijelző programozásSziasztok!Két kérdésem lenne, az egyik elméleti, a másik gyakorlati. 1. Adott egy rezisztív érintőképernyő (ILI 9488+XPT2046), egy DS3231 RTC óra és egy PIC18F25K22. A kijelző és érintés SPI-vel, az óra I2C-vel kommunikál a PIC-cel. DE ha az órát másodpercenként kiíratjuk, az SPI-vel történik és ha eközben történik egy érintés is, azt hogy látja a mikrokontroller? Szinte folyamatosan foglalja a TFT a SPI vonalat. Pláne, ha még a századmásodperceket is kijeleznénk? Mi az elméleti megoldás erre? Mert nálam az érzékelést nem látja. Azt gondoltam azért, mert folyamatosan frissítettem a képernyőt (mindig újrarajzolt), de ezt megszüntettem. De az időkijelzést nem tudom megszüntetni, mert az mindig frissül. Sajnos a NYÁK úgy készült, hogy a T_IRQ kivezetés nincs kihuzalozva.) 2. Az óra kijelzése valami miatt el van csúszva: az óra helyén a perc jelenik meg, a perc helyén a másodperc. A dátum jól nézett ki. De vártam vele egy napot, a nap valóban ugrott egyet, de a hónap is. Valami nagyon szét van esve, nem tudom ezt mi okozza. Tudtok ebben segíteni? Mellékelem az óra header és c fájlját és ide beszúrom a kiírást is. Köszönöm szépen!
Szerintem nem túl szerencsés egy gyakorlatilag RAM nélküli és DMA lehetőséget is nélkülöző mikrovezérlőre ekkora felbontású és színmélységű kijelzőt kötni. Ha mégis meg akarsz küzdeni vele, akkor fel kell bontani a megjelenítést rövidebb idő alatt lefutó részekre (pl, egyszerre, csak egy betűt kirajzolni), utána lehet a touchscreen-t lekérdezni. A másik dolog, hogy csak a megváltozott karaktereket kellene kiiratni, nem pedig az egész szöveget.
// formátum: "2025 Március 15"
Ez egyébként így fest helyesen: 2025. március 15.
Igen, ezt megcsináltam. Most már jó az érintés. De az óra továbbra sem működik. Mintha mindig szemetet írna ki egy-egy újrarajzolás után. PIC18F25K22 mikrovezérlőt használok. A képernyő rajzolás, érintés SPI kommunikációval megy az óra I2C-vel. Lehet, hogy ezek összeakadnak? Bár itt két MSSP modul van és a hardveres verziót használom. Az egyiken a SPI-t, a másikon az I2C-t. De lehet, hogy ennek ellenére összeakadnak? Nagyon sokszor lefagy az óra itt: while(!PIR3bits.SSP2IF). (I2C Read). Egyszerűen nem tudom, hogy mi a baj. Tudnátok ebben segíteni? Köszönöm!
Erre a kérdésre így nem lehet válaszolni. Mit tartalmaz az I2C read rutin? Nálam ez jól működik:
Nálam így néz ki:
Itt inkább az volna a kérdés, hogy a két kommunikáció zavarja-e egymást, vagy elvannak egymástól függetlenül. Mert ha nem zavarják egymást, akkor más irányba megyek el a hibakereséssel.
Biztos, hogy nem zavarja egymást, legalábbis logikailag. Ha olyan a NYÁK és/vagy a vezetékezés, akkor zavarhatják egymást, leginkápp az SPI zavarhatja az I2C-t. Utóbbi jóval érzékenyebb jószág. Oszcilloszkóppal ellenőrizhető. Felhúzó ellenállások értékei az I2C vezetékeken?
Sziasztok !
Esetleg ezt próbáld ki : ( Beszúrva egy flag törlést ) 3. I2C_Wait(); PIR3bits.SSP2IF = 0; 4. SSP2CON2bits.RCEN = 1; A hozzászólás módosítva: Kedd, 8:53
Az SDA-n és az SCL-n is 4k7 ellenállás van. Szkópon az látszik, hogy az inicializálás (általában ) rendben lefut (cím: 0x68; 0x0E--0x04; 0x0F--0x00), mindig van ACK válasz. De néha az időolvasásnál (nagyon ritkán az inicializálásnál) az SDA vonal 0 V-on ragad. Ekkor mindent lekapcsolok és direktben adok az SDA lábra 3,3 V-t. Ekkor észhez tér és egy darabig működik, majd megint beakad. A NYÁK nyomvonalvezetéssel hol lehet gond? Ha közel megy a SPI adatforgalomhoz az SDA vonal? De ott is mit jelent a közel? Erre is érzékeny lehet?
Szia!
Amit javasolt István_2 az sem árt,de be kellene tenned 1 flag-et a
után,hogy tudd,hogy jött-e tényleg valami,mert így nem tudod,hogy a timer limit,vagy az IF járt le,vagy váltott.Talán ez segít:
És ezt a flag-et figyelve láthatod,hogy tényleg megjött -e a jó adat. Bár az I2C nem a kedvencem,de talán tudtam segíteni.
Köszönöm! Ezzel most az összeomlás (eddig) megszűnt. És mintha az adatok is a helyére kerültek volna. Csak nem frissít valami miatt. De ez már más miatt lehet.
Köszönöm szépen!
Sziv SN !
![]() "Csak nem frissít valami miatt" -> Esetleg a DS3231-nek az oszcillátora nincs-e letiltva ?
A cím biztos "0x68" ? Nem 0xD0 , vagy 0xD1 ?
A címzés képe az előző hozzászólásnál. A hozzászólás módosítva: Kedd, 14:40
Kérjük az MSN szleng használatát mellőzni!
Igen, minden rendbe jött! Frissítette magát, csak én nem frissítettem, hogy írja is ki ezt az új időt.
Köszönöm! És azóta nem is akadt meg!
Abban tudtok segíteni, hogy hogyan lehet gyorsabban képernyőt frissíteni? Mivel pixelenként rajzolja át a színeket, így nagyon lassú. Kb. 5-6 másodpercig tart. Nincs erre egy gyorsabb függvény?
PIC18F25K22 mikrovezérlőt használok és egy rezisztív érintőképernyőt (ILI 9488+XPT2046, 320x480). Jelenleg így színezem át a képernyőt:
Kontrollert 64 MHz-en járatni, SPI-t felhúzni annyira, amennyire a kijelző engedi.
Esetleg más kijelzőt használni, ameliyk nem foglalja le ennyire a kontrollert, pl. Nextion valamelyik változata. Egyszerűen ehhez a kijelzőhöz kevés az a PIC, amelyiket használnod, lásd itt: Bővebben: Link. A hozzászólás módosítva: Sze, 10:04
A teljes képernyő újrarajzolásához 320*480*24 = 3686400 bitet kell a kijelzőre írni (sajnos az ILI9488 nem tud SPI módban 16 bites színmélységben működni, pedig azzal lehetne gyorsítani egy kicsit). Ha 5-6 másodpercig tart a feltöltés, akkor az SPI-t 700000 bit/sec sebességgel járatod. Ez mehet feljebb, szerintem a kijelző tudni fogja azt amire ez a PIC maximális sebességgel képes. Ha ez is kevés, akkor nem marad más lehetőség, mint másik mikrovezérlővel megoldani. Menet közben már nem kell az egész képernyőt irogatni, elegendő csak a megváltozott karaktereket.
|
Bejelentkezés
Hirdetés |




erc középen, felül ---








