Fórum témák
» Több friss téma |
A proci 8MHz belső órajelen ketyeg.
Az időzítésre én is gondoltam ezért bekapcsoláskor csinálok egy 500ms-os LED be-ki kapcsolást, hogy az LCD tuti magához térjen (ezért mondtam, hogy hozzáigazítottam a programot a környezetemhez. Az lcd.c include file-hoz hozzá lehet férni, de nem találok semmi olyat benne ami a hibát okozná. Az lcd_init() szubrutin nem tartalmaz semmi olyat ami megállást, vagy végtelen ciklust okozna... de csatolom. Én inkább hardware-el foglalkozom és nem tanultam c programozást.. amit tudok azt magamtól szedtem össze és most nem tudom, hogy mi akaszt meg..??!!
Az az lcd init nem lesz jó... Megnézted amit Kissi linkelt? Ha 4 bitben használod, akkor a 42, 46. oldal. A Te lcd init stringed jóval kevesebb attól... Nem rágtam át magam a kódodon...
Bekapcsolás után milyen üzemmódban van az LCD - 4 vagy 8 bites parancsot vár elsőre ?
Az a tervem, hogy saját init programot írok, még ha hosszabb is mint a Ccs rutinja, csak értsem, hogy mi történik.
Na akkor most megint nem értek valamit-a HD44780 adatlapban találtam amit a linkről töltöttem le:
"An internal reset circuit automatically initializes the HD44780U when the power is turned on. The following instructions are executed during the initialization. The busy flag (BF) is kept in the busy state until the initialization ends (BF = 1). The busy state lasts for 10 ms after VCC rises to 4.5 V. 1. Display clear 2. Function set: DL = 1; 8-bit interface data N = 0; 1-line display F = 0; 5 ´ 8 dot character font 3. Display on/off control: D = 0; Display off C = 0; Cursor off B = 0; Blinking off 4. Entry mode set: I/D = 1; Increment by 1 S = 0; No shift " Ez szerint meg 8 bites üzemmódba kerül a belső reset mechanizmus miatt..!!??? Közben találtam egy még egyszerűbb programot (https://www.gadgetronicx.com/programming-lcd-4-8-bit-mode-8051/) , de ez sem küld ki semmit- pedíg a 10ms időzítés miatt most szépen látszik, hogy az adatvonalakat rángatja a program ahogy kell.. A kijelző továbbra is üres marad. Csatolom a két file-t...
Ezzel kapcsolatban gondoltam :
Idézet: „Azt tudja valaki, hogy bekapcsoláskor 4 vagy 8 bites üzemmódba áll fel az LCD rendszere - én a 4 bitesre saccolok, de nincs infóm róla.”
Nem értek a C nyelvhez de az RS kimenet miért b és nem 1 ?
Idézet: „output_bit(RS,b); //0 for command and 1 for data output_bit(EN,1); delay_ms(12); output_bit(EN,0); delay_ms(15);” A hozzászólás módosítva: Máj 29, 2022
Itt szerintem nem LCD inicialzálással lesz a baj, hanem az órajellel. Nem értek teljesen az általad használt CSS fejlesztő környezethez. Azonban a program feltöltésekor megadott, hogy belső órajelet használjon a PIC?
A 4 MHz felett már illik külső oszcillátort hasznàlni. A képen látható panelden van kvarc. Hány MHz-es? Add meg a kódban a külső oszcillátort: #fuses XT A hozzászólás módosítva: Máj 29, 2022
As RS értéke kívűről érkezik a szubrutinba és azt dönti el, hogy a vezérlő, vagy az adatregiszterbe menjen az adat ...
lcd(0x38,0); : itt a vezérlő regiszterbe kerül a 0x38. for(i=0;i<=11;i++) { lcd(txt[i],1); : itt meg az adatregiszterbe a txt[i] delay_ms(20); } Amit külső quartz-nak látsz az egy másik PIC-re csatlakozik - a forrasztási oldalon van - és 32768Hz, vagy 65536Hz külső órajelet állít elő (látható a kék DIP kapcsoló amivel választható) a külső órakquartz szimulálásához - ez egy oktató környezet. A main.h tartalmazza, hogy milyen belső órajelet használok : #use delay(internal=8MHz) és ez a sor mondja meg a fordítónak, hogy a delay_ms() utasításnál hogyan rakja össze a késleltető rutint, hogy az 1ms valóban 1ms legyen. Különben a Csc C 5.104-es fordítóját használom.. Ezek a kontrollerek már nem igényelnek egyáltalán külső órajelet, mert 64MHz-ig állítható belső oscillátorral rendelkeznek.
Ja én azt hittem 16F877A használsz, mint a megadott példádban.
![]()
Nálam így működik.
lcdut= %00111000 '8 bites 2 soros beállítás 3-szor gosub ulcd gosub ulcd gosub ulcd lcdut= %00000001 'display clear adat gosub ulcd lcdut= %00001100 'display be, cursor ki, villog ki gosub ulcd ulcd: RS=0 lcdut érték az lcd 8 bitre EN=1 szünet nem tudom, talán 20ms EN=0 Ezek utasításbevitelek, adatbevitelnél az RS=1 legyen.
Hát ez sem javított a helyzeten.
Üres képernyő ... Most még betettem minden egyes utasítás után egy 20ms időzítést is, de továbbra is csak a háttérvilágítás, vagy a teljes kontraszt feltekerésnél kockák a második sorba ..
Pic lábak kimenetre állítva (tris)? Oszcilloszkóp segíthet.
A hozzászólás módosítva: Máj 29, 2022
Azt szintén a fordító csinálja a main.h -ból :
#use FIXED_IO( B_outputs=PIN_B5,PIN_B2 ) #use FIXED_IO( D_outputs=PIN_D7,PIN_D6,PIN_D5,PIN_D4,PIN_D3,PIN_D2,PIN_D1,PIN_D0 ) #use FIXED_IO( C_outputs=PIN_C7 ) #use FIXED_IO( E_outputs=PIN_E2 ) És ha nem lennének kimenetre állítva, nem látnám, hogy dolgozik, mert a kimenetekre kapcsolt LED-ed sem működnének..
Ha jól emlékszem a 16F877-nek van nyitott kollektoros(draines) kimenete, amihez felhúzó ellenállás kell. Hátha ilyenre csatlakozik valamelyik lcd láb.
Topi vonatkozó cikkeit nézted már? Tételesen elmondja a beüzemelés lépéseit, esetleg segíthet.
Bővebben: Link Bővebben: Link
Nem ezeknél már nincs ilyen láb és a 16F877-nél sem tudok ilyenről - mindegyik TP kimenet.
Egy kivétel van - a Mclr láb - de az sem OC kimenet, hanem csak bemenetnek használható, mert hatástalan a TRIS bitje, pont azért ha elszúrnál valamilyen fuse bitet ne tudd lezárni végérvényesen a tokot - ez régen elég gáz volt az Atmel vezérlőknél ha kizártad magad, mert akkor dobhattad ki az IC-t. Ez így van minden PIC esetén, de az enyémnél (18F47Q10) ez a láb az RE3. Megnézem a linkeket .. köszi.
Az hogy nem tudsz róla, attól még a 877-en az RA4 open drain kimenetű (mondjuk ez jelen helyzetben lényegtelen).
Én a helyedben beállítanám 4 bites módra az átvitelt (a kijelzőn ekkor a D0..D3 lábat GND-re szokták kötni), majd a 3 vezérlőlábra és a 4 adatlábra rákötnék egy pár dolláros 8 csatornás logikai analizátort. A mérésből és a kijelző adatlapból (a sötétben tapogatózás helyett) ki lehetne végre következtetni, hogy mi a hiba.
Hát szerintem elhasználom az LCD-imet virágalátétnek annak még talán jók lesznek.
Nem tudok zöldágra vergődni velük sehogy se.. Megpróbáltam szép hosszú időzítésekkel és közben egy TTL szintmérővel ellenőrizgettem az adatvonalakat, a RS, R/W meg az ENG vonalat és minden jel úgy jön ahogy kell. A kijelző(k) - 4db LCD 3 típus - ennek ellenére üresek. Feladom ... pedíg nem tűnt túl bonyolultnak a dolog .. megy az egész a kukába mert nem sikerül ami kellene... na mindegy köszönöm a segítséget.
A 4 bites módon is túl vagyok már.
Sőt a 3 vezérlő vonalat is áttettem a D0-D3 vonalakra, hátha az zavarja meg, hogy más porton vannak a vezérlő jelek. Sajna ez sem hozott megoldást..
Esetleg megpróbálhatnád vezérlő nélkül gombokkal piszkálgatni a bementeit, ahogy Topi csinálta anno. Kiderülne hogy egyáltalán jók-e az lcd-k. Benyomogatod az init szekvenciát, és kiíratsz vele egy karaktert. Hátha megmozdulna végre!
Ezt ellenőriztem a hosszú időzítésekkel a bemeneteken meg a TTL szintmérővel.
És minden ment a bemenő jelek közül aminek menni kellett és úgy ahogy elő volt írva... Azt nem értem, hogy mind a 4 LCD hibás lenne - 2 tök új tehát nem hinném..
De ne időzítgetésekkel, hanem fapadosan gombokkal! Elvileg ugyanannak kellene lennie, gyakorlatban lehet hogy kizárnál egy hardveres hibát.
Ha meg szeretnél róla bizonyosodni arról, hogy a kijelző vagy a fejlesztői oldal a rossz, akkor használj egy másik rendszert, praktikusan egy Arduino-t. Több, milliószor kipróbált könyvtár van LCD kijelzőhöz, kizárólag a bekötésnél hibázhatsz.
Hogy az a ....
Megvan a hiba. Az ENG vezeték valahol belül szakadt volt a szigetelés alatt és hol érintkezett hol nem attól függően, hogyan állt a külső panel. Egy ellenőrző méréskor derült ki a dolog ... Ezzel szívtam eddig ... Köszi a segítséget. Mindegyik LCD műkszik, bár az egyiknél más karakterek jönnek mint akarom, de ez szerintem a karaktertáblával kell majd beállítani... Köszi mégegyszer...
Magamat idézem:
Idézet: „kizárólag a bekötésnél hibázhatsz” ![]()
Nem a bekötés jó volt.. csak a vezeték gyártó nem gondoskodott a folyamatos ügymenetről a szigetelés alatt....
Semmi nem látszott a hibából kívül..
Nekem is volt már ilyen kedves vezetékem. Kedves, mert megtanított imádkozni. Gondosan kidobtam, nehogy véletlenül visszajusson. Lényeg hogy meglett a hiba!
![]()
Sokkal viccesebb ingyen vihetőben elajándékozni.
![]() |
Bejelentkezés
Hirdetés |