Sari la conținut
ELFORUM - Forumul electronistilor

Cum sa programez un PIC


Postări Recomandate

  • Răspunsuri 602
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Top autori în acest subiect

Imagini postate

Din ce am vazut proiectul exista la http://www.micro-examples.com/public/mi ... -dcf-clock , unde are si fisier HEX si ASM ...tie iti trebuie doar hex-ul . Acuma poti sa incerci sa scrii alt hex in el , si dupa aia poate va merge scris si acesta. Scheme de programatoare sunt cu gramada. Toate depind de driverele sistemului de operare. Astfel un JDM Programer pe port COM la mine a mers ok in windows 98 cu IC Prog , dar niciodata pe win xp ... iar acum mi-am facut un "PIC Pocket Programmer (PP-Prog)" pe LPT1 a mers din prima pe win98 si win 7(!) culmea cu acelasi winpic800(are viteza mai mare de programare). Cum am mai zis t o t u l depinde de SO si de placa de baza a calculatorului in cazul programatoarelor pe COM sau LPT ...(testate 12f675 si 16f88).

Link spre comentariu

1. Nu stiu cum l-ai programat dar opreste-te la un soft si la o schema.2. Intrebarea ta este la general. Nu este la concret si de aceea nu primesti raspunsuri.Eu te-as intreba: la ce vrei o mana de ajutor? la programator sau la schema? Dupa cum suna titlu se pare ca vrei o mana de ajutor la programator?3. Daca asa stau lucrurile atunci trebuie sa vezi daca ai programatorul bun. Cu ce soft l-ai programat, sper ca nu cu MPLAB?

Link spre comentariu
Vizitator CristiST

Salutare tuturor si multumesc mult pentru intrebari, Puiu

Situatia in care ma aflu este urmatoarea:

- am gasit schema unui ceas cu un PIC16F84A care mi s-a parut interesant si pe care m-am grabit sa il construiesc, sarind peste etapa “cum dracu o sa il programez?”. Schema acestuia am atasat-o mesajului.

- am gasit si schema unui programator pentru PIC-ul in cauza, pe care si in acest caz m-am grabit sa il construiesc, de aceasta data sarind peste etapa “cu ce drac de software lucreaza asta?”. Si schema acestuia am atasat-o mesajului.

- am un program pentru ceasul acesta, insa sub forma de text care nici macar nu stiu daca este scris corect si mai am si o serie de softuri de scriere/compilare/editare (Icprog, MPLAB in doua variante, MPASM, MikroC, FlexHex, Hex Editor, WinPic) descarcate de pe net

Cam asta am in momentul de fata, pe langa o mare nebuloasa cu privire la controlere. Ce nu stiu sint urmatoarele (nu stiu mai nimic, ar spune unii...):

- cum transform programul acela din format text intr-un hex sau intr-un format care poate fi incarcat in PIC cu ajutorul programatorului pe care l-am facut

- cu ce soft as putea face operatiunea de mai sus

- care sint setarile concrete ale controlerului/programului de scriere pentru a putea incarca programul respectiv in PIC.

Inca o data multumesc mult si anticipat celor care ma vor putea ajuta.

Programul in format text este urmatorul:

 

'******************************************************************************

' PIC16F84A ALARM CLOCK

'******************************************************************************

'

' feel free to use this code at your own risks

'

' target : PIC16F84A, 16 Mhz crystal

' HS clock, no watchdog.

'

' Author : Bruno Gavand, September 2007

' see more details on http://www.micro-examples.com/

'

'******************************************************************************

 

program alarmClock

 

'

' if you are using COMMON CATHODE LED display, uncomment this definition.

' if you are using COMMON ANODE LED display, comment this definition.

'

'#define CATHODE_COMMUNE

 

symbol LUNDI = 0 ' monday

symbol MARDI = 1 ' thuesday

symbol MERCREDI = 2 ' wednesday

symbol JEUDI = 3 ' thursday

symbol VENDREDI = 4 ' friday

symbol SAMEDI = 5 ' saturday

symbol DIMANCHE = 6 ' sunday

symbol LMMJV = 7 ' from monday to friday included

 

'

' alarm definitions, to be changed on your needs

'

symbol NBALARM = 16 ' number of programmed alarms

 

const alarmTable as byte[NBALARM * 4] = (

' JOUR HEURE MINUTE DUREE (secondes, 59 maxi)

' DAY HOUR MINUTE DURATION (in seconds, max is 59)

LUNDI, 8, 30, 10,

LUNDI, 12, 30, 10,

LUNDI, 14, 00, 10,

LUNDI, 16, 30, 10,

MARDI, 8, 30, 10,

MARDI, 12, 30, 10,

MARDI, 14, 00, 10,

MARDI, 16, 30, 10,

JEUDI, 8, 30, 10,

JEUDI, 12, 30, 10,

JEUDI, 14, 00, 10,

JEUDI, 16, 30, 10,

VENDREDI, 8, 30, 10,

VENDREDI, 12, 30, 10,

VENDREDI, 14, 00, 10,

VENDREDI, 16, 30, 10

)

 

dim maxcount as word ' number of TMR0 overflow per second

dim scaler as word ' RTC scaler

dim jj as byte ' day of week, 0 is monday

dim hh as byte ' hour

dim mn as byte ' min

dim ss as byte ' sec

dim digiled as byte[4] ' 4 x 7 segment table

dim digit as byte ' number of current digit to be displayed

dim dp as byte ' decimal point

dim key as byte ' key code

dim alarm as byte ' alarm flag

 

'

' the ISR works as real time clock

'

sub procedure interrupt

dim i as byte

 

'

' count time

'

scaler = scaler + 1

if scaler > maxcount

then

scaler = 0

 

inc(ss)

if ss = 60

then

ss = 0

inc(mn)

if mn = 60

then

mn = 0

inc(hh)

if hh = 24

then

hh = 0

inc(jj)

if jj = 8

then

jj = 1

end if

end if

end if

end if

end if

 

'

' LED display

'

#ifdef CATHODE_COMMUNE

PORTA = PORTA and $f0

TRISA = $0f

key = PORTA

TRISA = 0

PORTB = 0

#else

PORTA = PORTA or $0f

TRISA = $0f

key = PORTA

key = not(key)

TRISA = 0

PORTB = $ff

#endif

key = key and $07

 

digit = digit + 1

 

if digit > 3

then

digit = 0

i = $01

else

i = $01 << digit

end if

 

#ifdef CATHODE_COMMUNE

PORTB = digiled[digit]

PORTA = PORTA or i

#else

PORTB = digiled[digit]

PORTB = not(PORTB)

PORTA = PORTA and not(i)

#endif

 

INTCON.T0IF = 0

end sub

 

'

' converts digit to 7 segment

'

sub function intTo7seg(dim n as byte) as byte

select case n

case 0 result = $3F

case 1 result = $06

case 2 result = $5B

case 3 result = $4F

case 4 result = $66

case 5 result = $6D

case 6 result = $7D

case 7 result = $07

case 8 result = $7F

case 9 result = $6F

end select

end sub

 

'

' select a value with keys

' value is pointed to by v, display char s as header, maximum value is max

'

sub procedure setValue(dim v as ^byte, dim s as byte, dim max as byte)

digiled[0] = s

digiled[1] = 0

 

while 1

if key.0

then

inc(v^)

if(v^ > max)

then

v^ = 0

end if

end if

 

if key.1

then

if(v^ = 0)

then

v^ = max

else

dec(v^)

end if

end if

 

if key.2

then

Delay_ms(50)

while key.2

wend

Delay_ms(50)

scaler = 0

ss = 0

return

end if

 

digiled[2] = intTo7seg(v^ / 10)

digiled[3] = intTo7seg(v^ mod 10)

 

delay_ms(300)

wend

end sub

 

'

' program entry

'

main:

dim i as byte

 

'

' init variables

'

dp = 0

 

hh = 0

mn = 0

ss = 0

jj = 0

 

maxcount = 15625

 

'

' init I/O

'

PORTA = %00010000

TRISA = %00000000

 

PORTB = 0

TRISB = $00

 

'

' init interrupts

'

INTCON = %10100000

OPTION_REG = %11011000

 

Delay_ms(50)

 

'

' clock adjustment

'

setValue(@hh, 116, 23)

setValue(@mn, 55, 59)

setValue(@jj, 14, 6)

 

'

' forever loop

'

while true

if key

then

'

' display day and seconds (what for ? don't remember !)

'

digiled[0] = intTo7seg(jj)

digiled[1] = 0

digiled[2] = intTo7seg(ss / 10)

digiled[3] = intTo7seg(ss mod 10)

else

'

' display hours and minutes

'

if hh < 10

then

digiled[0] = 0

digiled[1] = intTo7seg(hh)

else

digiled[0] = intTo7seg(hh / 10)

digiled[1] = intTo7seg(hh mod 10)

end if

digiled[2] = intTo7seg(mn / 10)

digiled[3] = intTo7seg(mn mod 10)

end if

 

'

' blinks semicolon (or decimal point)

'

if scaler > maxcount / 2

then

dp.1 = 1

else

dp.1 = 0

end if

 

'

' set decimal points

'

digiled[0].7 = dp.0

digiled[1].7 = dp.1

digiled[2].7 = dp.2

digiled[3].7 = dp.3

 

'

' check for alarm condition

'

alarm = 0

for i = 0 to (NBALARM - 1) * 4

if ((alarmTable = jj) or ((alarmTable = LMMJV) and (jj < SAMEDI)))

and (alarmTable[i + 1] = hh)

and (alarmTable[i + 2] = mn)

and (alarmTable[i + 3] > ss)

then

inc(alarm)

end if

next i

 

if alarm

then

'

' set alarm

'

dp.3 = 1

PORTA.4 = 0

else

'

' clear alarm

'

dp.3 = 0

PORTA.4 = 1

end if

wend

end.

Link spre comentariu

Salutare la toti !

Sunt incepator. Vreau sa programez un PIC 16F877A pentru schema din imagine. Am cumparat un programator de aici http://www.adelaida.ro/product_info.php ... ucts_id=96 . Acum ceea ce trebuie sa fac este sa alimentez programatorul, sa-l conectez la portul serial al PC-ului si pe CD mi-au: UN DRIVER, 2 SOFTURI (IcProg si Poniprog). Spuneti-mi ce trebuie sa fac mai departe! Va multumesc!

Link spre comentariu

1. Pentru @CristiST:- Este bine ca acum ti-ai dat seama ce etape ai sarit ca ulterior sa nu mai faci aceasi greseala.- Vezi raspunsul lui @Sofian, deoarece nu esti in MPLAB, sau mai corect spus ASM, nu te pot ajuta pe partea de soft.2. Pentru @marik2500: Eu lucrez momentan, (ca programatoare) cu PICSTART Plus (vechi) si cu MPLAB-ICD2 produse de Microchip asa ca nu ma stiu la produsele adelaida si in consecinta nu ma bag(este poate cineva care a mai cumparat asemenea produse de la adelaida).

Link spre comentariu

Incearca intai si alimenteaza programatorul cu tensiunea de 12-16vcc.Instaleaza un soft din cele 2, cupleaza programatorul cu PIC-ul introdus in soclu, la serialul calculatorului.Prin deschiderea softului pentru programare, trebuie sa-ti vada programatorul si inclusiv PIC-ul.La urma incerci sa scrii PIC-ul, dupa ce "vede" calcul, atat programatorul cat si PIC-ul.Bafta.

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