|
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Érintőkijelző programozás Sziasztok!
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! void DrawClockBar(const DS3231_Time *t) {
char buf[32];
// --- Óra erc középen, felül ---
// Középre 480 px szélességhez, nagy betűméret (3)
sprintf(buf, "%02u:%02u", ido_most.hour, ido_most.min);
// Szöveg kb. 6×8×3 = 144 px széles, ezért (480-144)/2 ≈ 168 px
TFT_DrawString(168, 45, buf, COLOR_WHITE, COLOR_BLACK, 3);
// --- Dátum (Év Hónap Nap) ---
uint8_t m = (ido_most.month >= 1 && ido_most.month <= 12) ? (ido_most.month - 1) : 0;
const char *month[] = {
"Január","Február","Március","Április","Május","Június",
"Július", "Augusztus", "Szeptember", "Október", "November", "December"
};
// formátum: "2025 Március 15"
sprintf(buf, "%04u %s %02u", ido_most.year, month[m], ido_most.day);
// 2-es méret → kb. 8×16 px/karakter, szélesség kb. 200–220 px
TFT_DrawString(140, 80, buf, COLOR_WHITE, COLOR_BLACK, 2);
// --- Hét napja (a dátum mellett, jobbra) ---
const char *days[] = {"Hétfő","Kedd","Szerda","Csütörtök","Péntek","Szombat","Vasárnap"};
uint8_t di = (t->dayOfWeek >= 1 && t->dayOfWeek <= 7) ? (t->dayOfWeek - 1) : 0;
// kis betűméret (1), a dátum mellett, kissé jobbra eltolva
TFT_DrawString(340, 80, days[di], COLOR_WHITE, COLOR_BLACK, 2);
}
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.
|
|