MatyC Postat Octombrie 9, 2011 Partajează Postat Octombrie 9, 2011 Foloseste lcd_init() inainte de while (1). Initializarea afisajului o faci o singura data in program si asta dupa stabilizarea tensiuni de alimentare. Link spre comentariu
Liviu M Postat Octombrie 9, 2011 Partajează Postat Octombrie 9, 2011 pspsuceava: la ce frecventa lucreaza montajul? Ai adaptat? #ifndef _XTAL_FREQ // Unless specified elsewhere, 4MHz system frequency is assumed #define _XTAL_FREQ 4000000#endif Link spre comentariu
pspsuceava Postat Octombrie 9, 2011 Autor Partajează Postat Octombrie 9, 2011 MatyC , cred ca asta era problema , de fapt nu neaparat asta , ci toata structura de initializare + scriere + restul , care se repetau la nesfarsit in loc sa se execute o singura data . Am rescris programul si merge bine acuma : #include <htc.h>#include "lcd.h"voidmain(void){ lcd_init(); lcd_goto(0); lcd_puts("-Esti bou?"); lcd_goto(0x40); lcd_puts("-Da !"); while (RA1=0){ lcd_clear();}} Liviu - E de 4Mhz , evident , nu sunt chiar atat de incepator Multumesc tuturor ,, inca odata m-ati luminat ! Link spre comentariu
MatyC Postat Octombrie 10, 2011 Partajează Postat Octombrie 10, 2011 Eu ma asteptam sa faci ceva de genul asta: #include <htc.h>#include "lcd.h"voidmain(void){ lcd_init(); //Aici faci initializarea afisajului while (1){ lcd_goto(0); lcd_puts(" Bine ai venit"); lcd_goto(0x40); lcd_puts(" pe elforum !"); if (RA1=0){ lcd_clear();}}} Link spre comentariu
francezu Postat Octombrie 10, 2011 Partajează Postat Octombrie 10, 2011 MatyC, in codul tau daca RA1=0 atunci textul este scris si apoi sters la fiecare executie a buclei while. Corect cred ca ar fi asa: #include <htc.h>#include "lcd.h"voidmain(void){ lcd_init(); //Aici faci initializarea afisajuluiwhile (1) { if (RA1=1) { lcd_goto(0); lcd_puts(" Bine ai venit"); lcd_goto(0x40); lcd_puts(" pe elforum !"); } else { lcd_clear(); }}} Link spre comentariu
MatyC Postat Octombrie 10, 2011 Partajează Postat Octombrie 10, 2011 Eu am pus accent pe pozitia functiei lcd_init(). Trebuie apelata doar o singura data si asta inaintea buclei infinite while(). Restul ramane la optiunea lui pspsuceava ce introduce in bucla.Oricum la "if (RA1=1){}" este valida pana la apasarea butonului. RA1 este pe 1 din cauza rezistentei de pull-up. Nu shtiu ce schema utilizeaza dar eu asa vad treburile. Eu am modificat varianta prezentata la inceputul topicului si efectul butonului este doar faptul ca sterge afisajul (lcd_clear() cand apesi butonul deoarece RA1=0) in restul timpului afiseaza aceleasi mesaj in permanenta. Ideea mea este ca in genereal initializarea afisajului se face inainte de intrarea in bucla infinita. Link spre comentariu
Liviu M Postat Octombrie 10, 2011 Partajează Postat Octombrie 10, 2011 Daca ma uit mai bine constat ca ati gresit toti trei. Corect e cu ==, nu cu = #include <htc.h>#include "lcd.h"voidmain(void){ lcd_init(); //Aici faci initializarea afisajului while (1) { if (RA1==1) { lcd_goto(0); lcd_puts(" Bine ai venit"); lcd_goto(0x40); lcd_puts(" pe elforum !"); } else { lcd_clear(); } } //while(1)} //main() Link spre comentariu
francezu Postat Octombrie 10, 2011 Partajează Postat Octombrie 10, 2011 @MatyC corect, initializarea lcd-ului se face doar o data, la inceput; mai departe intradevar ar trebui definit comportamentul. Sunt cazuri mai speciale cand pe parcursul functionarii initializarea lcd-ului se poate face de mai multe ori; am facut candva o aplicatie cu lcd "hot-plug", unde trebuia sa detectez cuplarea lcd-ului, sa-l initializez, etc.@Liviu corect, == pt interogare, si = pt atribuire ; eu sunt departe de a programa in C Link spre comentariu
pspsuceava Postat Octombrie 10, 2011 Autor Partajează Postat Octombrie 10, 2011 Multumesc foarte mult tuturor !Am invatat datorita voua sa fac si permanenta stergerea/scrierea , ca in exemplul lui Liviu :)Inca ceva pentru cei care stiti , programez in PICC ( High-Tech C ) , cum fac configuratia ? Ca nu merge ca in ASM cu __CONFIG si dupa toate insiruite am incercat si cu ( XT & etc ) si tot nu merge , am citit in datasheet dar nu stiu sa transform , daca imi puteti explica , ca as vrea sa inteleg nu sa copii direct pentru WDT off , PWR off , XT ... Link spre comentariu
Liviu M Postat Octombrie 11, 2011 Partajează Postat Octombrie 11, 2011 Felicitari pentru reusite!Referitor la partea de configurare, in directorul ../Program Files/HI-TECH Software/PICC/9.80/include gasesti fisierele .h cu definitiile diverselor porturi/functii ale fiecarui tip/familie de procesor. La sfarsitul fisierului ai sectiunea pentru configurare. De ex. pentru 16f877 arata asa #define CONFIG_ADDR 0x2007/*osc configurations*/#define RC 0x3FFF // resistor/capacitor#define HS 0x3FFE // high speed crystal/resonator#define XT 0x3FFD // crystal/resonator#define LP 0x3FFC // low power crystal/resonator/*watchdog*/#define WDTEN 0x3FFF // enable watchdog timer#define WDTDIS 0x3FFB // disable watchdog timer/*power up timer*/#define PWRTEN 0x3FF7 // enable power up timer#define PWRTDIS 0x3FFF // disable power up timer/*brown out reset*/#define BOREN 0x3FFF // enable brown out reset#define BORDIS 0x3FBF // disable brown out reset/*Low Voltage Programmable*/#define LVPEN 0x3FFF // low voltage programming enabled#define LVPDIS 0x3F7F // low voltage programming disabled/*data code protected*/#define DP 0x3EFF // protect data code// alternately#define DPROT 0x3EFF // use DP#define DUNPROT 0x3FFF // use UNPROTECT/* Flash memory write enable/protect */#define WRTEN 0x3FFF /* flash memory write enabled */#define WRTDIS 0x3DFF /* flash memory write protected/disabled *//*debug option*/#define DEBUGEN 0x37FF // debugger enabled#define DEBUGDIS 0x3FFF // debugger disabled/*code protection*/#define PROTECT 0x0FCF /* protect program code */#define UNPROTECT 0x3FFF /* do not protect the code */#if !defined(_16F870) && !defined(_16F871)#define PROTECT_TOP 0x2FEF /* protects top 256 bytes, 1F00h to 1FFFh */#define PROTECT50 0x1FDF /* protects upper half of address space */ /* 1000h to 1FFFh (pic16f887/876) */ /* 0800h to 0FFFh (pic16f874/873) */#endifCuvantul de configurare se "construieste" cu directiva __CONFIG();, in paranteze fiind un and (&) intre mai multi parametri care fac 0 cate un bit din cei x (14 ?) biti. Pun mai jos un exemplu dintr-un proiect de-al meu; daca te uiti la #define-urile din fisier si la codul meu, o sa poti calcula singur valoarea pe care ti-o arata si mplab printr-o fereastra de configurare.__CONFIG(WDTDIS // WD disable & HS // 20 Mhz crystal oscillator & DUNPROT // Data read EE unprotected & LVPEN // Low Voltage Programming enable & UNPROTECT // Flash Write Pritection Off & BORDIS // Brown out disable & PWRTEN); // Power up timer enable Link spre comentariu
pspsuceava Postat Octombrie 11, 2011 Autor Partajează Postat Octombrie 11, 2011 Mersi , am inteles si reusit ! Link spre comentariu
TECH_FUN Postat Octombrie 14, 2011 Partajează Postat Octombrie 14, 2011 pentru ca am vazut ca la inceputul subiectului erau neclaritati in functionarea LCD-ului, recomand incepatorilor un simulator de LCD care merge direct din browser; garantez ca in juma' de ora esti esti expert... http://www.dinceraydin.com/djlcdsim/djlcdsim.html Link spre comentariu
pauly Postat Aprilie 25, 2021 Partajează Postat Aprilie 25, 2021 Cine imi poate spune si mie dacă este sau nu normal ca displayul LCD 1602 sa se incălzească atât de tare. Este vorba despre Convertorul de tensiune AIBAZ 7660 care se incălzeste excesiv (nu poti ține mâna pe el). În rest, funcționează perfect. Am incercat cu un mic radiator, dar tot de geaba. Este normal (am văzut că suportă până la 70 gade. Dacă nu, atunci ce pot face? Link spre comentariu
Liviu M Postat Aprilie 25, 2021 Partajează Postat Aprilie 25, 2021 (editat) Ai un pinout pentru lcd? Editat Aprilie 25, 2021 de Liviu M Link spre comentariu
modoran Postat Aprilie 25, 2021 Partajează Postat Aprilie 25, 2021 Cred ca-i contrafacut sau montat incorect. La ce se foloseste ICL7660 pe un display 1602, alea din China nu au asa ceva prin ele si nici pomeneala sa se incalzeasca ceva prin ele. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum