Sari la conținut
ELFORUM - Forumul electronistilor

pic 12f675 pt incepator. Ce are?


Vizitator Georgecpr

Postări Recomandate

Vizitator Georgecpr

Salut! De curand, citind cateva subiecte interesante de pe forum, m-am hotarat sa intru si eu in lumea microcontroloarelor. Cu ajutorul vostru am construit un programator(care merge, cred), am descarcat cateva programe utile, si am cumparat pt. inceput un pic 12F675. Am creeat softul (trimit 1 sau 0 la porturi pt. a stinge si aprinde niste led-uri) in asm, l-am compilat si l-am scris in pic (l-a scris bine). De aici nu stiu ce sa fac.

 

Eu am lasat picul pe plca cu programatorul si l-am alimentat cu 5V (vdd si gnd), dupa care am folosit un aparat de masura sa vad daca se intampla ceva cu pinii picului. Nu sesizeaza nici o schimbare (nici o tensiune). Mai trebuie sa fac ceva? De ce nu este nici o schimbare de tensiune? In simulator merge (PICsimulatorIDE- http://www.oshonsoft.com).

Mentionez ca sunt incepator in asa ceva (1 saptamana).

Link spre comentariu
  • Răspunsuri 17
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Vizitator Georgecpr

iata codul (creeaza un joc de lumini):TIP EQU 20H TIMP EQU 21H SEC EQU 22H CNT EQU 23H ORG 00H GOTO MAIN ORG 04H; INTRERUPERI BTFSS INTCON,0 GOTO RT BCF INTCON,0 BTFSS GPIO,3 GOTO RT CALL INCREMENTREP BTFSC GPIO,3 GOTO REPRT: RETFIE ;RETURNMAIN: BSF STATUS, RP0 BCF OPTION_REG,5 ;OSC INTERN MOVLW B'11111100' MOVWF OSCCAL MOVLW B'00110000' MOVWF ANSEL MOVLW B'00001000';SETAM PINII DE IN SI OUT MOVWF TRISIO MOVLW B'11001000' MOVWF INTCON MOVLW B'00001000' MOVWF IOC BCF STATUS, RP0 MOVLW B'00000011';<<<<<<<<<<<<<< MOVWF SECSTART ;CE TIP FOLOSIM BTFSS TIP,0 CALL TIP1 BTFSS TIP,1 CALL TIP2 BTFSS TIP,2 CALL TIP3 BTFSS TIP,3 CALL TIP4 GOTO STARTTIP1: CLRF GPIO CALL DELAY CLRF GPIO BSF GPIO,0 CALL DELAY CLRF GPIO BSF GPIO,1 CALL DELAY CLRF GPIO BSF GPIO,2 CALL DELAY CLRF GPIO BSF GPIO,4 CALL DELAY CLRF GPIO BSF GPIO,5 CALL DELAY RETURNTIP2: CLRF GPIO CALL DELAY BSF GPIO,0 CALL DELAY MOVLW B'00000011' MOVWF GPIO CALL DELAY MOVLW B'00000111' MOVWF GPIO CALL DELAY MOVLW B'00010111' MOVWF GPIO CALL DELAY MOVLW B'00110111' MOVWF GPIO CALL DELAY RETURNTIP3: CLRF GPIO CALL DELAY BSF GPIO,2 CALL DELAY MOVLW B'00010110' MOVWF GPIO CALL DELAY MOVLW B'00110111' MOVWF GPIO CALL DELAY RETURNTIP4: MOVLW B'00110111' MOVWF GPIO CALL DELAY MOVLW B'00010110' MOVWF GPIO CALL DELAY CLRF GPIO BSF GPIO,2 CALL DELAY CLRF GPIO CALL DELAY RETURN;INCREMENTEAZA REGISTRU TIP, DUPA CARE COMPLETEAZA ZEROURILE DIN URMAINCREMENT: INCF TIP,1 BTFSC TIP,0 MOVLW B'00000001' BTFSC TIP,1 MOVLW B'00000011' BTFSC TIP,2 MOVLW B'00000111' BTFSC TIP,3 MOVLW B'00001111' BTFSC TIP,4 MOVLW B'00000000' MOVWF TIP RETURNDELAY: MOVF SEC,W MOVWF CNTS0 CLRF TIMPS1 INCF TIMP,1 NOP NOP BTFSS TIMP,7 GOTO S1 DECFSZ CNT,1 GOTO S0 RETURN GOTO MAINENDaprinde niste led-uri in 4 moduri deferite. cand se apasa un buton se genereaza o intrerupere si este eliminat un mod de afisare.nu am oscilator extern pt. ca acest pic are unul intern.

Link spre comentariu
Vizitator Georgecpr

cuvantul=3FC4h (asta nu pot sa-l setez din assembler?) Am realizat un program mai simplu (la apasarea unui buton aprinde 2 leduri, celelalte sunt mereu aprinse), si am realizat o placa separata pt. testari. Acum merge. Va multumesc pentru ajutor. Totusi cum pot sa-mi dau seama cate instructiuni trebuie sa execut pentru a realiza un delay de o secunda? Cand vreau sa scriu programul in pic, ICprog imi spune ca "nu exista valoarea oscilatorului de calibrare. doriti sa folositi valoares din fisier (3FFFh)". Eu mereu setez registrul OSCAL, deci de ce ma intreaba asa ceva?

Link spre comentariu
cuvantul=3FC4h (asta nu pot sa-l setez din assembler?)

Sigur, si chiar e recomandat sa fie setat in codul sursa. Sintaxa e cam asa:

#include p16f877a.inc   ;include file with config bit definitions__config _HS_OSC & _WDT_OFF & _LVP_OFF  ;Set oscillator to HS,                                        ;watchdog time off,                                        ;low-voltage prog. off
Numele simbolice (_HS_OSC, _WDT_OFF, etc) sunt definite in header (pxxx.inc), poti sa arunci o privire.

 

Totusi cum pot sa-mi dau seama cate instructiuni trebuie sa execut pentru a realiza un delay de o secunda?

Oscilatorul intern ruleaza la 4Mhz (daca este calibrat), asta inseamna ca fiecare instructiune se executa intr-o microsecunda. Pentru o secunda, trebuie sa se execute un milion de instructiuni.

 

Alternativa: seteaza un timer + intreruperea aferenta, obtii delay-uri mai exacte, si intre timp controllerul poate sa execute si altceva, nu ramane blocat intr-o bucala de asteptare.

 

Cand vreau sa scriu programul in pic, ICprog imi spune ca "nu exista valoarea oscilatorului de calibrare. doriti sa folositi valoares din fisier (3FFFh)". Eu mereu setez registrul OSCAL, deci de ce ma intreaba asa ceva?

MOVLW B'11111100'

MOVWF OSCCAL

 

Aici nu e bine. Valoarea de configurare e scrisa de producator la ultima adresa de memorie, sub forma unei instructiuni retlw si trebuie sa o folosesti pe aceea:

banksel OSCCALcall 0x3FFmovfw OSCCAL
Trebuie sa fii atent sa nu suprascrii locatia 0x3FF din memoria program, si soft-ul de programare trebuie sa o protejeze, din ce ai scris se pare ca IC_Prog stie de treaba asta (n-am probat practic, nu folosesc IC_Prog).
Link spre comentariu
  • 2 săptămâni mai târziu...
Vizitator Georgecpr

Va multumesc mult pt ajutor.

Acum ca am mai avansat un pic, vreau sa realizez un prog care sa controleze un afisaj din telefoanele mobile. Pic-ul va primi semnale de la diferiti senzori si va inregistra / afisa anumite valori. Vreau sa il folosesc la masina. Am citit de pe forum un subiect despre lcd din mobile si mi s-a parut interesant. Vreau sa stiu daca pot sa folosesc orice astfel afisaj?

aici

http://www.phoenix-gsm.ro/magazin/docs/pi886373040.htm

am gasit cateva display-uri, dar nu scrie cate linii pot afisa, si nu stiu de unde sa iau datasheet-uri pt ele (recunosc faptul ca inca nu am cautat). Mie imi trebuie unul care sa poata afisa cel putin 4-5 linii, si sa fie iluminat.

:?

Link spre comentariu
  • 2 săptămâni mai târziu...
Vizitator Georgecpr

Acum ca am aflat mai multe despre LCD-urile din mobile(nu sunt alfanumerice :( ), mai am o problema. Vreau sa creez un ceas. Nu vreau sa cumpar un ceas de timp real (ii mai trebuie si lui cuartz, etc). Vreau sa creez un oscilator de 100Hz, care sa-mi genereze impulsuri de 100 ori pesecunda. Deci eu voi incrementa un contor pt secunde, minute, etc la al 100-lea impuls. Problema este ca nu stiu cum sa fac un asemenea oscilator, mai ales ca trebuie sa fie precis. Ma puteti ajuta?

Link spre comentariu

Este foarte greu sa construiesti un oscilator de precizie la frecvente mici (100Hz).Ai putea folosi ca referinta frecventa retelei 50Hz -> 100 de treceri prin zero. Daca faci un simplu detector de zero conectat la pinul de intrerupere al PIC-ului o sa poti numara aceste treceri. Dar nici aceasta frecventa nu e prea precisa.Daca vrei precizie trebuie sa folosesti un oscilator cu cuartz . Ex: 32,768KHz (acesta se foloseste in majoritatea ceasurilor)Poti sa folosesti cuartz-ul ca oscilator pt PIC. Astfel poti folosi TIMER0 cu prescaler 32 pentru a genera intreruperi la exact o secunda.F oscilator =32.786 kHz => F instructiuni => 32.768Khz/4=8,192kHz => 8192 cicli/secunda => 256*32 => prescaler timer =32

Link spre comentariu
Vizitator Georgecpr

Chestia asta cu ceasul face parte dintr-un proiect mai amplu. Voi folosi un pic16f628 care va afisa diferite informatii (ceas, distanta, combustibil folosit, etc) pe un lcd nokia 3310. Pacat ca nu este alfanumeric, deci trebuie sa mai folosesc un eprom in care sa mamorez caracterele. Cum se face comunicarea intre pic si eprom, nu prea stiu. Eu intentionam sa-l folosesc pic-ul la 20MHz, dar daca voi folosi cuartz-ul acela, cred ca se va misca prea lent. Totusi, as putea folosi un alt cuartz (de frexventa cat mai mica) pe care sa-l conectez la unul din porturile i/o, iar cand este generat un semnal voi incrementa un contor. Astfel as pitea sa stiu cand a trecut o secunda. Credeti ca va merge asa ceva?

Link spre comentariu

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