Zilele acestea am primit mai multe mail-uri in legatura cu acest subiect, multi nu au stiut cum pot programa un microcontroler. Programarea unui microcontroler este destul de simpla, necesita putina atentie si cunostinte minime in electronica si informatica. Am folosit pentru acest tutorial un microcontroler destul de renumit care poate fi gasit cu usurinta in orice magazin de specialitate, este vorba despre PIC16F84. Pentru inceput este recomandat a se citi foaia de lucru (datasheet-ul) microcontrolerului.
Mai jos este o diagramă care arată pini microcontrolerului. Voi incerca sa explic rolul fiecarui pin.
De la RA0 la RA4
RA este un port bidirecţional. Asta poate fi configurat ca o intrare sau ca o ieşire. Următorul număr dupa “RA” este numărul de biţi (0-4). Deci, avem un port cu 5 biţi direcţionali unde fiecare bit poate fi configurat ca bit de intrare sau de ieşire.
De la RB0 la RB7
RB este un al doilea port bidirecţional. Se comportă în exact acelaşi mod ca RA, cu excepţia ca există 8 biţi.
VSS si VDD
Acestia sunt pinii de alimentare. VDD este borna pozitiva, şi VSS este borna negativa, sau 0V. Tensiunea de alimentare maximă pe care o puteţi folosi este 6V, iar cea minimă este de 2V.
OSC1/CLK IN şi OSC2/CLKOUT
Aici conectam un ceas extern, astfel încât microcontrolerul are un fel de sincronizare.
MCLR
Acest pin este folosit pentru a şterge locatii de memorie din interiorul PIC (adică atunci când vrem să-l re-program). În condiţii normale de utilizare este conectat la linia de alimentare pozitiv.
INT
Acesta este un pin de intrare care poate fi folosit pentru monitorizare. Dacă PIN-ul primeste tensiune programul se poate reporni, opri sau orice altă funcţie dorim. Nu vom folosi asta foarte mult.
TOCK1
Acesta este un alt ceas de intrare, care opereaza un temporizator intern. Acesta funcţionează în independent fata de ceasul microcontrolerului. Din nou, nu vom folosi aceasta functie foarte mult.
Sa presupunem ca dupa cele spuse mai sus am realizat o schema ca in modelul prezentat mai jos:
Pentru a introduce programul in microcontroler avem nevoie de doua programe, unul este MPLAB IDE si PonyProg.
Deschidem MPLAB IDE selectam microcontrolerul.
Dupa ce am selectat microcontrolerul creem un proiect nou si incepem editarea programului.
;****************************************************************** ; * ; Nume proiect: 16F84A.asm * ; Data: 19/05/2011 * ; Autor: Gramada Ciprian * ; www.electrodb.ro * ; * ;********************************************************************** ; * ; Note: * ; 1. PIC 16F84A datasheet-ul poate fi gasit la: * ; http://ww1.microchip.com/downloads/en/DeviceDoc/35007b.pdf * ; * ; * ; PENTRU A PROGRAMA MICROCONTROLERUL * ; ------------------------------ * ; Instaleaza MPLAB IDE * ; Deschide acest fisier in programul MPLAB IDEO * ; din meniul de sus alege: Configure - Select Device * ; in casuta 'device' selecteaza PIC16F84A, si apoi "Ok" * ; din meniul de sus alege: Project - Quickbuild 16F84A.asm * ; * ; In acelas director ca si cel in care se gaseste acest fisier * ; vei gasi un fisier cu numele 16F84A.HEX * ; Acesta trebuie deschis cu programul in care se face programarea * ; si introdusa in microcontroler * ; * ;********************************************************************** list p=16F84A ; Directiva 'list' defineste numele procesorului ; #include <p16F84A.inc> ; include <fisier> este o directiva standard ; defineste specificatiile procesorului ;------------------------------------------------------------------------------------ ; directiva '__CONFIG' este folosita pentru configurarea microcontrolerului. ; Tabelul cu configurarea este afisat in fisierul '.inc' respectiv. ; Sau poate fi gasit si in foaia de lucru a microcontrolerului(datasheet). ; __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC ; Aici setam biti de configurare ; Code protect off ; Watch Dog timer off ; Power-up timer delay on ; Setam tipul de oscilator in HS - High speed crystal/resonator >3.5Mhz ; schimba in _RC_OSC pentru rezistor/capacitor ; schimba in _XT_OSC pentru cristal/rezonator <3.5Mhz ;------------------------------------------------------------------------------------ ; definim variabilele in 'General Purpose Register' (GPR) ; nota: memoria GPR a 16F84A incepe la 0x0C dar in alte PIC-uri incepe la 0x20 ; Aici folosim 0x20 pentru compatibilitate cu noile PIC-uri cblock 0x20 copiePORTB ; variabila pentru a copia PORTB ltime ; folosit pentru functia de intarziere dtime ; folosit pentru functia de intarziere endc ;------------------------------------------------------------------------------------ ; Definim selectarea bankului #define bank0 bcf STATUS,RP0 ; Sel Bank 0 #define bank1 bsf STATUS,RP0 ; Sel Bank 1 ;----------------------------------------------------------------------------------- ; Definim o constanta pentru bit-ul din partea stanga si alta pentru bit-ul din dreapta BitStanga equ 7 ;|_______________PORTB BitDreapta equ 0 ;_______________|PORTB ; ---------------------------------------------------------------------------------- ; Programul incepe aici RESET_VECTOR org 0x000 ; In aceasta sectiune initializam porturile I/O si variabilele ; START bank1 ; selectam registrul bank 1 ; asta este o pseudoinstructiune definita mai sus clrf TRISB ; setam PORTB ca iesire bank0 ; selectam registrul bank 0 ; asta este o pseudoinstructiune definita mai sus movlw 7<<BitDreapta ; insereaza in W, 7(111) in dreapta movwf copiePORTB ; apoi initializez variabila ;------------------------------------------------------------------------------------- ; Codul principal MUTASTANGA clrc rlf copiePORTB,F ; roteste variabila spre stanga call OUTPUT ; apeleaza functia de afisare call DELAY ; apeleaza functia de intarziere btfss copiePORTB, BitStanga ; verifica daca s-a ajuns la bit-ul din stanga goto MUTASTANGA ; daca nu se intoarce la eticheta MUTASTANGA MUTADREAPTA clrc rrf copiePORTB,F ; roteste varibila spre dreapta call OUTPUT ; apeleaza functia de afisare call DELAY ; apeleaza functia de intarziere btfss copiePORTB, BitDreapta ; verifica daca s-a ajuns la bit-ul din dreapta goto MUTADREAPTA ; daca nu se intoarce la eticheta MUTADREAPTA goto MUTASTANGA ; altfel se intoarce inapoi la MUTASTANGA ;--------------------------------------------------------------------------------- ;Functia OUTPUT OUTPUT movfw copiePORTB ; adauga aceasta variabila in registrul W movwf PORTB ; si scrie din W in iesirea portului B return ; apoi se intoarce ;-------------------------------------------------------------------------------------- ;functia DELAY DELAY movlw .1 ; Aceasta valoare este timpul de intarziere de 100mS ;(pentru 4Mhz) ; numarul trebuie sa fie intre 1 si 255 goto _Ldelay _Delay movwf dtime ; Apelare pentru W x 1mS __Dcall call __1mS decfsz dtime,F goto __Dcall __DlyEnd return _Ldelay movwf ltime ; Apelare pentru W x 100mS __Dlcall movlw d'100' call _Delay decfsz ltime,F goto __Dlcall return __1mS movlw 0xC6 _next nop addlw 0xFF btfss STATUS,Z goto _next nop nop nop return end
Programul in format ASM si HEX le gasiti aici.
Dupa ce a fost scris, programul trebuie asamblat (in MPLAB IDE) si apoi introdus in microcontroler, pentru asta putem folosi PonyProg.
dar placa de dezvoltare ?de unde o iau ?
Pai cred ca gasesti in orice magazin de electronice 🙂
S-or găsi la orice magazin dar mi se par slabe. Îs scumpe, merg prost, necesită port serial, care astăzi printre USB şi Firewire, nu mai există. Cumpără un PICKIT. Sau măcar o clonă Pickit.
Salut.Am o întrebare cu privire la copierea programului dintr-un microcontroler PIC-18F2525-I/SP,dacă acest lucru este posibil.Am un detector de metale puls induction Mikron,made in Bulgaria și aș dori să-l „clonez” pentru că montajul electronic este relativ simplu de reprodus,dar fără softul din microcontroler nu are nici o valoare.
Nu stiu sigur daca il poti copia, e posibil sa fie protejat la scriere. Dar ai putea sa incerci.
salut. programatorul ala merge adaptat si pentru portul paralel? La laptop am numai paralel si nu as vrea sa renunt la programator.
Va salut, va rog sa imi spuneti si mie de unde pot sa descarc programele MPLAB IDE v8.43 si Pony Prog.
Va multumesc.
Pentru MPLAB 8 IDE gasiti aici un link: http://www.microchip.com/forums/m568375.aspx
Pentru Pony Prog gasiti aici: http://www.lancos.com/ppwin95.html
dar din cate vad site-ul celor de la mplab ide e cazut 🙁
Merci mult pentru link-uri.
eu am un fisier in notepad si ce este in el este :0111110000…:10001100…
cum il fac fisier hex? ce program trebuie sa folosesc?
desi el este salvat xxx.hex .
va multumesc.
Draga Ciprian,
Te rog sa ma contactezi la marianpetre1@yahoo.com. Vreau sa-mi programezi si mie contra cost un microcontroler PIC.
Ai putea sa imi trimiti acel fisier si incerc sa te ajut.
V-am trimis un e-mail!
Salutare,
Un ajutor in a programa un PIC si sa faca cateceva, mai exact:
Eu am ales PIC16f84, si vreau sa-l configurez sa aibe 8 iesiri, care sa-mi comande 8 leduri.
Exemplu:
Cand primeste comanda de pe RS232. 5ON – sa mi se aprinda ledul, iar cand 5OFF ledul sa mi se stinga. Ledurile sa nu fie conditionate, starea unuia pentru celelalte. Adica daca 5 e aprins, sa le mai pot aprinde si pe celelalte.
Astept un raspuns va rog
Pentru asta trebuie sa folositi portul A ca port de intrare pentru RS232 si B port de iesire.
O sugestie ar fi:
RA0 RA1 RA2 RA3
1 0 0 0 – RB0=1
0 0 0 0 – RB0=0
1 0 0 1 – RB1=1
0 0 0 1 – RB1=0
…
1 1 1 1 – RB7=1
0 1 1 1 – RB7=0
Deci in functie de comanda primita pe portul A (RS232) trebuie setat portul B. Primul bit din A este valoarea de ON sau OFF.
Buna ziua
M-ar interesa daca ar fi posibil de realizat un montaj de termometru dual cu PIC care sa afiseze simultan ambele temperaturi cu doi senzori diferiti si sa se poata programa separat,bineinteles cu elemente (relee) de executie diferite. Important ar fi sa fie un singur afisaj.
Multumesc
Salut Ciprian, m-ar interesa sa ma ajuti sa programez un pic 18f46k20..contra cost desigur..e un programel foarte foarte simplu..daca esti interesat, da-mi un mail..vlad.pecingina@yahoo.com. Salut
Caut urgent un electronist care este dispus a realiza un montaj electronic privind un “amplificator pentru casti audio”. Multumesc ! Mailul meu : g_pandrea@yahoo.com
cum?
Ciprian,soarta m-a adus in Spania,unde locuiesc de ceva timp·In acest moment lucrez la o firma care inchiriaza echipamente pentru spectacole de muzica si lumina,cum ar fi amplificatoare audio,mese de mixaj,spoturi luminoase,etc,toate comandate digital·Unele dintre acaste spoturi sunt echipate,printre alta CI-uri,cu PIC18F242·Ti-as fi profund indatorat daca ai putea sa-mi trimiti la aceasta adresa de mail cat mai multe informatii despre acest circuit,preferabil in limba romana·Am observat cu satisfactie ca esti bine informat in domeniu·In ceea ce ma priveste,sunt un elecronist de hard,de moda veche·Cand vine vorba de soft ma cam pierd·De aceea iti cer sprijinul·Unul din defectele cele mai ciudate pe care le-am intalnit la aceste proiectoare mobile consta in incurcarea comenzilor-ii ceri sa schimbe culoarea si actioneaza irisul sau vrei sa corectezi focalizarea si in loc de asta masina incepe o rotatie in jurul propriei axe,etc·Eu banui ca este vorba de un defect la aceste microcontrolere·Multumesc anticipat,Jan·
Ati putea sa imi spuneti ce fel de dmx folositi? Cel mai probabil adresele nu sunt setate corect, verificati fiecare aparat sa fie configurat corect. Varianta cu incurcatul comenzilor o exclud. Am sa scriu un tutorial in legatura cu acest subiect.
In aceste masinasinarii au umblat si persoane care nu au nici o legatura cu electronica·Este posibil sa fi inversat intre ele microcontrolerele·Problema mea este ca seful meu nu vrea sa cumpere un copiator sau un programator de PIC-uri·Nu stiu cum voi putea rezolva aceasta problema,dar,Ciprian,iti raman dator si pentru atat·
Cu stima,Jan·
Se pare ca nu ne intelegem prea bine….
VERIFICATI DACA ADRESELE APARATELOR SUNT CONFIGURATE CORECT!
E posibil ca adresa sa fie decalata cu o pozitie si atunci apar aceste probleme spuse de dnv. mai sus. Deci inainte sa desfaceti bietele aparatele incercati totusi sa va asigurati ca problema nu e din cauza unei setari…
Salutare tuturor.Si eu ma chinui sa programez un PIC 16F88,care face parte dintr-un proiect de vu-metru cu afisaj LCD.Am realizat un programator JDM pe serial si pauza.Am citit in datasheet-ul microcontrolerului ca suporta LVP(low voltage programming),dar imi da eroare cand citeste dupa programare la o adresa 000h.Nu mai stiu ce sa mai fac.Cred ca ar trebui sa realizez un programator cu alimentare externa.Programatorul l-am realizat de la bobtech.Multumiri anticipate.
Salut. La multi ani!!!
Am asamblat un vu-metru cu PIC16F88, care trebuie programat.
Ma poate ajuta cineva sa-mi programeze pic-ul contracost???
Pe site-ul de unde am luat schema sunt toate instructiunile de programare si fisierele necesare.
Astept un raspuns.
Multumesc f mult
gaby_nicula@yahoo.com
Doresc sa te intreb cum fac sa pun in functiune un pin la un compiuter de masina (ecu)
Masina nu era prevazuta cu turbo asa ca eu am adaugat unul dar problema este ca tre buie sa activez un pin pentru un senzor cum fac ?
Va salut domnule Ciprian Gramada. Ma confrunt cu o problema de cateva saptamani. Am un circuit de comanda a unui motor de CC, ce foloseste un PIC16F690. Acest Microchip actioneaza 2 relee si fac ca motorul sa aiba un sens de rotatie sau celalat sens. E putin mai complicat sa va explic aici pe site (scris). Am sa va las adresa mea de mail si poate ma puteti ajuta in programarea PIC-ului pas cu pas. Binenteles nu gratis. Va multumesc.
GFP Master a inceput saptamana (28.07.2016) asta cursuri de microcontrolere. Daca esti interesast poti veni si tu.
in afara de asta poate te pot ajuta si cu proiectul tau sa-l termini. Suntem fani procesoare nu afaceristi. ( am facut si porti si bariere cu 16F690 si merg).
Stefan Martin 0722207997 sau stefan.martin@radacini.ro sau pe site-ul GFPMASTER
Din 15 ianuarie 2016 incepe serie noua de “Electronist aparate si echipamente de automatizari”;
Aceasta este denumirea oficiala de pe diploma ; in realitate incepem cu familiarizarea cu principalele componente electronice; rezistente; condensatori; diode; tranzistori; si intram in UTILIZARE si programare microcontrolere PIC. Este un curs de 5 luni cu inplicare puternica in latura practica NU TEORIE fara aplicatii directe.De multe ori in scoala de dragul de a se da mare sau ca sa ne dovedeasca nivelul stiintific al unui curs , profesorii s-au pierdut in teoria “chibritului” pierzind esenta: utilizarea in practica a cunostiintelor transmise.
In final (pe linga o diploma recunoscuta european) veti avea capacitatea si sprijinul dea realiza o schema de reglaj; actionare; etc cu un “PIC” avand in interior propriul dumneavoastra program.
Nu uitati Lucrurile complicate sunt facute din mai multe lucruri simple”
Va astept
Stefan Martin 0722207997 sau stefan.martin@radacini.ro sau pe site-ul GFPMASTER
Va salut , cum generez fisierul .asm , am un fisier scris in micro.C , cum fac sa-l scriu in microcontroler ?,
trebuie generat fisieru hex dar cum ? multumesc
Daca e scris in micro.C va trebui compilat cu mikroC Compilers iar ulterior, fisierul HEX generat il veti incarca in PIC.
Buna ziua,
numele meu este Elena, fac din pasiune felicitari si alte lucrari din hartie, anul trecut am lucrat cateva felicitari de Craciun cu leduri, dar dincolo de a lipi ledurile de banda de cupru nu am trecut. Vreau sa progresez si sa invat sa programez microcontrolere ca sa obtin efecte luminoase la lucrarile mele din hartie. Ma descurc in programare , nu am cunostinte de electronica, stiu doar ce inseamna un circuit electric, dar voi invata.
Ma puteti indruma putin, va rog? Sa imi spuneti doar ce fel de microcontrolere as putea folosi si de unde pot sa invat .
Multumesc!
Nu-ti trebuieste PICuri pt efecte luminoase …. mai usor este sa le faci cu niste PROMuri si decodoare daca ai ajuns la vreun rezultat poate-mi spui si mie, daca nu, poate te mai lamuresc (si) eu … Sorin. 0723 319 553.
Va multumesc pentru raspuns! Chiar nu ma asteptam sa imi raspunda cineva. Nu stiu nici ce sunt acelea PROMuri… m-am uitat pe niste filmulete pe youtube si asa am invatat, in SUA sunt la moda felicitarile (ei le numesc cards) si chiar produc leduri pe stickere (Chibit Electronics), doar le lipesti pe circuit si gata..
As fi interesata sa imi predati cateva lectii, ca sa invat ce pot sa fac cu acele PROMuri, contra cost, desigur. Astept raspunsul dvs.
Multumesc!
Buna ziua,
acest model de programator e potrivit ?
https://www.adelaida.ro/programator-usb-avr-isp-interface-avr-isp-mk2.html
Banuiesc ca nu imi trebuie ceva care bate peste 400-500 de lei dar sa aiba si tot ce ii trebuie
Multumesc!
Elena, nu-ti mai bate capul cu PIC-uri sau PROM-uri. Sunt greoaie.
Daca tot vrei sa inveti sa programezi microcontrolere cauta pe net tot ce tine de ARDUINO. Nu trebuie sa cumperi programator. Microcontrolerul ATMEGA328 vine gata asamblat pe o placuta prevazuta cu port USB – astfel poate fi cuplat la computer si programat.
Uite aici un site romanesc cu o gramada de proiecte faine:
http://nicuflorica.blogspot.com/
Succes
Tony
buna ziua! ati programat vreodata un microcontroler pentru ploter?as dori sa vorbesc cu d-voastra in privat. valentin_elect@yahoo.ro
O schema bloc pentru aceasta?
Cu acest program “MPLAB IDE si PonyProg”,se pot coda și calculatoarele mașinii (ECU) ?
Mulțumesc!
Buna ziua,
Am un microcontroler PIC16F876 functional, programat. Vreau sa citesc programul de pe el si sa-l rescriu in alte doua cipuri noi neprogramate. Ma poate ajuta cineva contracost.