Sari la conținut
ELFORUM - Forumul electronistilor

Termostat programabil cu Pic16F870


Postări Recomandate

Mi-e teama ca este un pic mai mult. Condensatorii de la quartz sunt pusi la masa? Nu prea se vede asta.

 

P.S. Fiind cam chior abia acum avazut ca sunt la masa insa pinul 19 (GND) nu imi dau seama daca este la masa! Si decupleaza pinii de alimentare ai PIC-ului cu un condensator de 100nF.

Link spre comentariu

Hm, din cate tin eu minte, de cate ori aveam toti digitii de pe ecran aprinsi total, era contrastul prost reglat. Ai potentiometru/semireglabil de reglare a contrastului? Se intampla ceva cand rasucesti de el?

Da aprinde maxim patratelele si micsoreaza luminozitatea pana le stinge dar fara nici o cifra .

Link spre comentariu

Salut,

 

Ai incercat totusi, sa compari hex-ul initial cu cel citit de tine din PIC dupa ce l-ai programat? Eventual posteaza aici ce ai citit din PIC.

Incearca sa il programezi din XP, daca ai posibilitatea.

Incearca sa descarci MPLAB IDE v8.92, de aici: http://www.microchip.com/pagehandler/en-us/devtools/dev-tools-parts.html si sa incarci hex-ul original pentru a-i insera cuvantul de configurare. Il salvezi si il programezi din nou.

Mai poti schimba si PIC-ul, daca mai ai unul.

Programatorul este OK? Ai mai programat cu el si au mers de prima data? Calculatorul este acelasi?

Editat de Mihai Popa
Link spre comentariu

Am incarcat hexul in MPLAB IDE v8.91 si am configurat bitii --  _XT_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_ON ---  dupa care am salvat bitii sunt 3FF1

Am incarcat hexul salvat in programator si am scris picul - apar doua randuri de digiti aprinse  fara cifre si bipaie cand apesi pe setari

Am 2 pic 16F870 -I/SP  , cu programatorul am scris un pic 16F84a un montaj cu 8 leduri si merge ,deci cred ca e bun.

Nu am alt calculator sa incerc , am un laptop Asus mai vechi care merge cu XP

Nu mai stiu ce sa-i fac :mort

untitled 2.rar

Link spre comentariu

Esti sigur ca ai pinul 5 al afisorului la masa? Din fotografii nu prea rezulta asta.

Da am un mic strap pe pinii 1si 5 ai LCD-ului si minusul montajului

Lucrez electronica ca hobby de peste 35 de ani e posibil sa gresesc sau "ochelarii sa nu vada bine" dar am verificat  montajul asta de 20de ori si e ca in schema

Am dezlipit in mers pinul 6 de la LCD si afisajul s-a umplut de 33333333333333333 care baleiau pana au disparut toti.

Dupa ce l-am lipit la loc s-au aprins 2 randuri de patratele si atat

Vad ca folosesti RB3 pentru comanda ecranului. Dezactiveaza LVP (low voltage programming LVP_OFF) in bitii de configurare si mai incearca o data. Ar trebui sa iasa 3F71

MERGEEEEEEEEE !!!!!!!!!!! :aplauze

MULTUMESC TUTUROR COLEGILOR CARE M-AU AJUTAT !!! :aplauze

Am dezactivat LVP (low voltage programming LVP_OFF) in bitii de configurare si a iesit 3F71 si merge.

Acum o sa montez si releul sa vad daca face servici

Multumesc inca o data @ Liviu M  care si-a dat seama unde este greseala

post-187413-0-53734900-1429528173_thumb.jpg

post-187413-0-97322700-1429529084_thumb.jpg

Link spre comentariu
Vizitator mihail.stoica

E clar ca LCD-ul nu este programat. Unele LCD-uri sunt mai lente. Urmatorul cod functioneaza f. bine. In exemplu am utilizat PORTD din PIC16F877, dar poate fi schimbat

 

LCD.h

 

ifndef LCD_H#define  LCD_H#define _XTAL_FREQ 4000000#define DATA_PORT PORTDextern void strobe_instr(char val_ch);extern void strobe_data(char val_ch);extern void init_lcd(void);extern void write_instruction(char val_char);extern void write_data(char val_char);extern void write_string(char *string);extern void build_cust_char(unsigned char loc, unsigned char *cust_char);extern void lcd_goto(unsigned char pos);#endif  /* LCD_H */

 

LCD.C

 

// b0 -> D4// b1 -> D5// b2 -> D6// b3 -> D7// b4 -> RS// b5 -> EN#include <htc.h>#include "lcd.h"void strobe_instr(char val_ch){   DATA_PORT = (val_ch | 0b00100000) & 0b11101111; // EN=1,RS=0   __delay_us(40);   DATA_PORT = val_ch & 0b11001111; // EN=0,RS=0}void strobe_data(char val_ch){   DATA_PORT = val_ch | 0b00110000; // EN=1,RS=1   __delay_us(40);   DATA_PORT = val_ch & 0b11011111; // EN=0,RS=1}void init_lcd(void){ __delay_ms(100);   strobe_instr(0x03);   __delay_ms(5);   strobe_instr(0x03);   __delay_us(200);   strobe_instr(0x03);   __delay_us(200);   strobe_instr(0x02);   __delay_ms(2);   write_instruction(0x28);   write_instruction(0x0C);   write_instruction(0x01);   __delay_ms(2);   write_instruction(0x06);}void write_instruction(char val_char){   strobe_instr((val_char >> 4) & 0x0F);   strobe_instr(val_char & 0x0F);}void write_data(char val_char){   strobe_data((val_char >> 4) & 0x0F);   strobe_data(val_char & 0x0F);}void write_string(char *string){   while(*string)   write_data(*string++);}void build_cust_char(unsigned char loc, unsigned char *cust_char){   write_instruction(0x40+(loc*8));   while(*cust_char){   write_data(*cust_char++);   }}void lcd_goto(unsigned char pos){  write_instruction(0x80+pos);} 

Codul il compilez cu MPLAB X si XC8

 

Exemplu de utilizare

 

#include <htc.h>#include <stdio.h>#include <string.h>#include "config.h"#include "lcd.h"

 

int main(void) {   TRISD = 0x00; // output for LCD   init_lcd();

  lcd_goto(0x40);   write_string("Test");

}

Link spre comentariu
  • 4 săptămâni mai târziu...

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări