Sari la conținut
ELFORUM - Forumul electronistilor

Ceas PIC 16F84A


Postări Recomandate

Vizitator Danco

(in manualul digitilor sunt numai dimensiunile fizice si ce reprezinta pinii)

Fisierul pdf de pe acest SITE este "KW4-301.pdf" si in el gasesti marimile de tensiune si curent pentru alimentarea LED-urilor din segmente

Atasez un extras din acest pdf

post-22087-139829420544_thumb.png

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

Top autori în acest subiect

Top autori în acest subiect

Imagini postate

am reusit sa termin placa am modificat asm-ul cu MPLAB ide am salvat, am facut hex am pus hex in pic, pic pe placa si nu face nimic .... e totul stins... am masurat la iesirea stabilizatorului am 5 volti la fel am tensiunea asta pe pinii de la PIC.... pentru segmente am rezistente de 250 ohmi iar in baza la tranzistoare am de 1 k iar aia intre pinul 14 si 4 e de 10k ( asa e si in schema mea asa e si la bogdi)... ceva idei? ... primul meu montaj cu PIC se pare ca a fost/este o mare buleala....acum mai da si softul de programare eroare Fail to install wp800io.sys ...ahhhhhh ma pun cu ciocanu pe ele....

Link spre comentariu

...am reusit sa fac Winpic sa mearga iar fara erori ... am sters picu am incarcat un hex pentru 16f84A de pe pagina lui bogdi si vad ca se aprind niste segmente cam aiurea da se aprind la fel cand apas pe butoane se aprind alte segmente... deci picu nu e troznit (parerea mea de incepator) si buleala e undeva in soft/ eventual placa ... Rog frumos persoanele care se pricep la PIC-uri sa ma ajute si pe mine cu minunea asta de ceas.cam asa sunt cu montajul pana acum

Link spre comentariu

Ar trebui sa verifici mai intai ca partea de afisare merge OK.Pentru asta ar trebui sa scrii,compilezi, incarci un program simplu care sa aprinda 1 segment pe un digit.Dupa aia programel care sa aprinda toate cifrele pe acelasi digit.Din pacate nu am experienta in asm ca sa iti dau exact instructiunile, ceva de genul : MOVLW B'00000001' ;SEGMENT 01MOVWF PORTAMOVLW B'10000001' ;0MOVWF PORTBCauta pe net orice tutorial de PIC si asm toate vor avea aprinsul unui led pe pin, aici trebuie sa "aprinzi" simultan un tranzistor care sa-ti activeze digitul PORTA + segmentele necesare afisarii cifrei pe PORTB.PS. Inainte de soft poti face un debug al electronicii in sensul ca :1. scoti pic-ul din soclu si i-l pui deoparte, vei folosi doar montajul, fara PIC2. pe soclu pui +5V pe pinul 2 -> activeaza digit 13. pe soclu pui pinul 13 la masa-> activeaza Segmentul G2 si 3 simultan iti vor aprinde pinul G al digitului 1.Si tot asa pentru toti cei 4 digiti (pini 2,1,18,17) si toate segmentele (pini 7->13)

Link spre comentariu

am facut treaba asta cum spunea colegul mai sus se aprind toate segmentele de la toti 4 digitii, deci nu cred ca e eroare de placa... fara un ajutor exact pe problema nu cred ca mai pot avansa... plus ca de maine sunt plecat 3 zile la o lucrare in tara ...Multumesc inca o data celor care ma ajuta sau ma vor ajuta.

Link spre comentariu

am gasit pe un site ca asa ar fi cifrele (pentru anod comun) :Nr. Segments Hex0 1100 0000 $C01 1111 1001 $F92 1010 0100 $A43 1011 0000 $B04 1001 1001 $995 1001 0010 $926 1000 0010 $827 1111 1000 $F88 1000 0000 $809 1001 1000 $98vad ca difera un pic de ce zicea colegul ( sa schim unde gasesc 0 sa pun 1)iar initial arata asa (pentru catod comun)RETLW B'10000001' ;0 RETLW B'11110011' ;1RETLW B'01001001' ;2RETLW B'01100001' ;3RETLW B'00110011' ;4RETLW B'00100101' ;5RETLW B'00000101' ;6RETLW B'11110001' ;7RETLW B'00000001' ;8RETLW B'00100001' ;9orice sfat e binevenitam modificat in asm original doar treaba de mai ss si acum am pe digiti 4 litera G intoarge care stau aprinse nu palpaie nimic

Link spre comentariu

ooo ajutor ms ms plecasem dupa ciocan da am dat de mancare si a scapat montajul acum torn hexul in pic si revin cu informatii

 

 

cautand am dat de un ceas (un francez parca da si ala a testat numai cu catod comun da cica a facut si soft si pentru anod da zice sa comentez pentru anod) nu ma pricep fratilor ce sa fac in soft

asta e softul poate ajuta cu ceva:

 

 

******************************************************************************

' 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

deci am pus hex si acum am ceva activitate si anume- la pornire apar 0000- ledul care trebuia sa fie cu secundele sta aprins permanent- cand apas pe butonul de reset se stinge tot si vine la 0000 - pot sa setez minutele doar pana la 09 dupa care se face 00- minutele le setez printr-o apasare simpla de buton pe cand la ore trebuie sa tin lung apasatla fel cand ajunge la 09 la urmatoarea apasare se face 00- am lasat de la 0000 sa mearga singur si vad ca a schimbat in 0001 dupa 1 minut cu ochii pe ceas deci ceva face el acoloLE: am 3 minute si vad ca merge dupa ceasul real pana acum am 0003daca nu se reseta dupa 09 pffff

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