PDA

View Full Version : [C] PIC, Orologio o timer


gpc
10-08-2005, 17:06
Salve a tutti...
Sto cercando su internet il codice per un orologio o un timer (fondamentalmente devo fare un conto alla rovescia) per pic implementato in C dato che dovrei usarlo all'interno di un altro programma. Non mi interessa che dia l'uscita su un display, mi serve fondamentalmente per impostare dei tempi e fargli eseguire delle azioni passato il tempo impostato.
Avete qualche idea su come farlo o dove reperirlo?
Il problema è che, nel momento in cui gli faccio fare qualche cosa, chiaramente lui smette di contare il tempo e alla lunga può perdere diversi secondi. Come si può risolvere la cosa? Avevo letto in giro che c'erano dei modi per implementare il multitasking sul pic, ma non vorrei andare a fare una roba complicatissima quando la soluzione è invece semplice...

Fenomeno85
12-08-2005, 11:02
allora se usi sempre il pic16f8? ... c'è delay (time) ... se non ricordo male ... quindi con un ciclo te la cavi ... unico problema non è in multi

~§~ Sempre E Solo Lei ~§~

gpc
12-08-2005, 13:31
allora se usi sempre il pic16f8? ... c'è delay (time) ... se non ricordo male ... quindi con un ciclo te la cavi ... unico problema non è in multi

~§~ Sempre E Solo Lei ~§~

Sì, però c'è un problema... io devo fare due applicazioni.
Per prima cosa, un bromografo dove imposto il tempo e lui mi accende la lampada per il tempo impostato. Problema: voglio che compaia il tempo sul display lcd, per cui ogni secondo devo inviare i dati all'lcd perdendo quindi "del tempo", per cui l'uso del delay potrei farlo un po' tarandolo ad occhio, tanto i tempi sono brevi.
Altro discorso per l'altra applicazione, ossia l'innaffiatore automatico: qui dovrei avere un orologio che va per settimane, quindi non potrei perdere anche solo un millisecondo a ciclo perchè alla fine diventerebbe tanto. Ma in questo caso ho una soluzione: c'è un integrato della philips che lavora su un bus I2C e ti dà ora e data. Solo che così devo usare un altro integrato e se riuscivo a fare tutto col pic ero più contento.
Comunque da quello che ho visto è praticamente impossibile... alla fine tenterò solo la prima soluzione senza usare altri componenti.
Volevo chiederti: tu sai usare gli interrupt? Io non li ho mai dovuti usare... ho visto perchè che questa cosa del timer molti la fatto usando un contatore interno e leggendo l'interrupt: in questo modo il pic conta per i fatti suoi e quando ha finito blocca l'esecuzione del programma. Mi sai spiegare un pochino come si dovrebbe fare?

PS: non ti ho più risposto per l'altra cosa, nell'altro thread, perchè non ho più avuto tempo di guardarci :p

Fenomeno85
12-08-2005, 13:42
Sì, però c'è un problema... io devo fare due applicazioni.
Per prima cosa, un bromografo dove imposto il tempo e lui mi accende la lampada per il tempo impostato. Problema: voglio che compaia il tempo sul display lcd, per cui ogni secondo devo inviare i dati all'lcd perdendo quindi "del tempo", per cui l'uso del delay potrei farlo un po' tarandolo ad occhio, tanto i tempi sono brevi.
Altro discorso per l'altra applicazione, ossia l'innaffiatore automatico: qui dovrei avere un orologio che va per settimane, quindi non potrei perdere anche solo un millisecondo a ciclo perchè alla fine diventerebbe tanto. Ma in questo caso ho una soluzione: c'è un integrato della philips che lavora su un bus I2C e ti dà ora e data. Solo che così devo usare un altro integrato e se riuscivo a fare tutto col pic ero più contento.
Comunque da quello che ho visto è praticamente impossibile... alla fine tenterò solo la prima soluzione senza usare altri componenti.
Volevo chiederti: tu sai usare gli interrupt? Io non li ho mai dovuti usare... ho visto perchè che questa cosa del timer molti la fatto usando un contatore interno e leggendo l'interrupt: in questo modo il pic conta per i fatti suoi e quando ha finito blocca l'esecuzione del programma. Mi sai spiegare un pochino come si dovrebbe fare?

PS: non ti ho più risposto per l'altra cosa, nell'altro thread, perchè non ho più avuto tempo di guardarci :p

prova a vedere qui che ti spiega come fare i task

http://stor.altervista.org/pic/page4/pic16f84_4.htm

e guarda qua:

http://www.microchipc.com/Hi-Tech_C_multitask.htm

ps: tranquillo manco mi ricordo che ti avevo chiesto :D

gpc
12-08-2005, 13:43
ps: tranquillo manco mi ricordo che ti avevo chiesto :D

:D No no, ero io che avevo chiesto e tu mi avevi dato una serie di suggerimenti :p
Adesso guardo i link, grazie mille! ;)

Fenomeno85
12-08-2005, 13:57
:D No no, ero io che avevo chiesto e tu mi avevi dato una serie di suggerimenti :p
Adesso guardo i link, grazie mille! ;)

ah ok :D

~§~ Sempre E Solo Lei ~§~

Passy
18-08-2005, 14:46
Vi seguo

Fenomeno85
18-08-2005, 14:48
Vi seguo

sei già in scia ? :D

~§~ Sempre E Solo Lei ~§~

Passy
18-08-2005, 15:40
sei già in scia ? :D

~§~ Sempre E Solo Lei ~§~

:D :D Vi voglio passare all'ultima curva :D

Fenomeno85
18-08-2005, 15:40
:D :D Vi voglio passare all'ultima curva :D

ok :D

~§~ Sempre E Solo Lei ~§~

gpc
18-08-2005, 18:37
Allora, il discorso timer l'ho risolto, ho fatto un delay da 999 ms per tenere conto dell'aggiornamento del display e tutto il resto e mi sembra che abbia una buona precisione.
Così il circuito per il bromografo è finito :cool:
L'unica cosa ho dovuto rinunciare a mettergli dei programmi preimpostati di durata dell'accensione dei neon perchè sono arrivato al 100% della memoria.
A questo proposito, mi chiedevo: c'è un PIC con le stesse uscite del 16F84 ma con più spazio in memoria?
Comunque, ora resta il discorso orologio per l'innaffiatore, ma ci guardo quanto torno a casa prendendo quell'integrato della Philips che fa da orologio indipendente e trasmette su i2c.
Piuttosto, voi sapete se c'è un programmatore *umano* (non come il ProPic2 che ho visto...) per pic più lunghi dei 18 pin del 16f84? Ho dei bellissimi 40 pin ma non so come programmarli, e mi farebbero tanto comodo altre 16 uscite... con pwm e A/D incorporato :sbav:

Kajok
18-08-2005, 22:03
bhe per programmare i 40 pin e' la stessa cosa dei 18.
i pin di programmazione sono i soliti 3 o 4 (ora non ricordo, sono 5 anni che non uso piu' i pic).
dovresti portare le linee del programmatore dei 18 pin ai corrispondenti piedini del 40 pin. (si capisce? :mbe: )

gpc
18-08-2005, 22:12
bhe per programmare i 40 pin e' la stessa cosa dei 18.
i pin di programmazione sono i soliti 3 o 4 (ora non ricordo, sono 5 anni che non uso piu' i pic).
dovresti portare le linee del programmatore dei 18 pin ai corrispondenti piedini del 40 pin. (si capisce? :mbe: )

L'avevo immaginato anche io, a dire il vero, però ho visto che i programmatori semplici fanno solo il 16f84 e pochi altri, e tra l'altro l'unico che usi la porta seriale che ho trovato (e che uso attualmente) è il JDM.
Gli altri che ho visto che fanno altri PIC sono tutti su porta parallela e hanno parecchia altra roba attorno. Faccio vedere due foto, per paragone:
JDM Programmer

http://www.jdm.homepage.dk/newpic82.jpg

ProPic2

http://se-ed.net/mpu51/propic/propic2.jpg

Fenomeno85
19-08-2005, 09:51
allora sul pic16f84 ci puoi anche mettere se non ricordo male la memoria esterna

~§~ Sempre E Solo Lei ~§~

gpc
19-08-2005, 17:36
allora sul pic16f84 ci puoi anche mettere se non ricordo male la memoria esterna

~§~ Sempre E Solo Lei ~§~

Beh su ogni pic puoi collegarci delle memorie tipo 24cxxx, ma servono per i dati non per il programma. A me servono pic con più spazio per il programma...

Fenomeno85
19-08-2005, 21:20
Beh su ogni pic puoi collegarci delle memorie tipo 24cxxx, ma servono per i dati non per il programma. A me servono pic con più spazio per il programma...

sei sicuro che non puoi eseguire programmi sulla memoria esterna?


~§~ Sempre E Solo Lei ~§~

gpc
19-08-2005, 21:22
sei sicuro che non puoi eseguire programmi sulla memoria esterna?


Abbastanza :p

Fenomeno85
19-08-2005, 23:05
Abbastanza :p

che palle però

~§~ Sempre E Solo Lei ~§~

gpc
19-08-2005, 23:10
che palle però


Ill fatto è che in casa ne ho un paio da 2K di memoria invece che da 1K come il 16f84, però uno ha meno porte perchè alcuni pin sono destinati ad altre funzioni e un altro è quello lungo che quindi non riesco a programmare... :stordita:

Fenomeno85
23-08-2005, 11:03
Ill fatto è che in casa ne ho un paio da 2K di memoria invece che da 1K come il 16f84, però uno ha meno porte perchè alcuni pin sono destinati ad altre funzioni e un altro è quello lungo che quindi non riesco a programmare... :stordita:

lungo che significa che non hai il microprogrammatore?

~§~ Sempre E Solo Lei ~§~

gpc
23-08-2005, 18:21
lungo che significa che non hai il microprogrammatore?


Sì esatto.

Kajok
26-08-2005, 15:03
ciao! se hai voglia di sbatterti un po' a costruirlo ho trovato questo nei miei archivi.. sapevo di averlo!


-->cliccami<-- (http://kajok.altervista.org/Programmatore_PIC.pdf)

fantoibed
26-08-2005, 15:39
Ci sono anche i 16F628 e 16f876 che, se non erro, si dovrebbero programmare con un normale ludupipo. Altrimenti ci sono gli ATMEL AT90S8515 che si trovano abbastanza facilmente nei negozi...

gpc
26-08-2005, 16:42
Grazie a tutti e due ;)

gpc
16-09-2005, 15:47
Hola,
ho finalmente finito il nuovo programmatore... il propic2... quasi, cioè, è in realtà un clone del propic2, un po' più semplice e senza bisogno di doppia faccia. Mi pare che vada bene, ora sento il potere nelle mie mani adesso che posso programmare fino ai 40 pin :sofico:

gpc
16-09-2005, 23:39
Se qualcuno mi trova lo schema "base" per il 16F870 avrà la mia eterna riconoscenza :D
Non capisco dove sbaglio... resistenza di pullup sull'MCLR, quarzo sul clk1 e 2, condensatori sul quarzo, massa, alimentazione e fine, no? Eppure non mi funziona... ma prima di impazzire a capire se ho attaccato male il display vorrei capire se ho attaccato bene il PIC. Secondo voi è corretto?
Voi usate qualche sistema per fare le varie prove? Vi siete fatti una scheda con alcune cose standard già attaccate come il display?
Ah, sapete niente della programmazione ICSP?

gpc
17-09-2005, 13:02
Vi sottopongo un problema...
Ho fatto il circuitino per il 16f870, con il display lcd.
Programmo il pic, tutto ok.
Metto il pic, e iniziano le cose strane. A volte parte, a volte no, a volte parte poi si blocca. Credo che sia problema di clock, ma non ne sono sicuro... ma la cosa strana è un'altra: dopo qualche tentativo di reset, il pic si cancella, due righe sì e due righe no. Tanto per intenderci, io programmo con questo:

0000: 3000 008A 2BD1 0000 100A 108A 110A 0782 .ŠÑ..Š.‚
0008: 3428 340C 3401 3406 100A 108A 110A 0782 (....Š.‚
0010: 340C 3441 3474 3474 3469 3476 346F 3400 .Attivo.
0018: 100A 108A 110A 0782 340C 3441 3474 3474 .Š.‚.Att
0020: 3469 3476 346F 3420 3431 3400 100A 108A ivo.1..Š
0028: 110A 0782 340C 3441 3474 3474 3469 3476 .‚.Attiv
0030: 346F 3420 3432 3400 100A 108A 110A 0782 o.2..Š.‚
0038: 340C 3454 346F 346E 3428 346D 3473 3429 .Ton(ms)
0040: 3400 100A 108A 110A 0782 340C 3454 346F ..Š.‚.To
0048: 3466 3466 3428 346D 3473 3429 3400 100A ff(ms)..
0050: 108A 110A 0782 340C 344E 342E 3443 3469 Š.‚.N.Ci

E quando smette di funzionare e vado a rileggere trovo:

0000: 0000 0000 0000 0000 0000 0000 0000 0000 ........
0008: 0000 0000 0000 0000 0000 0000 0000 0000 ........
0010: 340C 3441 3474 3474 3469 3476 346F 3400 .Attivo.
0018: 100A 108A 110A 0782 340C 3441 3474 3474 .Š.‚.Att
0020: 0000 0000 0000 0000 0000 0000 0000 0000 ........
0028: 0000 0000 0000 0000 0000 0000 0000 0000 ........
0030: 346F 3420 3432 3400 100A 108A 110A 0782 o.2..Š.‚
0038: 340C 3454 346F 346E 3428 346D 3473 3429 .Ton(ms)
0040: 0000 0000 0000 0000 0000 0000 0000 0000 ........
0048: 0000 0000 0000 0000 0000 0000 0000 0000 ........
0050: 108A 110A 0782 340C 344E 342E 3443 3469 Š.‚.N.Ci

Idee, suggerimenti? :doh:

gpc
17-09-2005, 14:56
Dopo ore di sbattimento di testa contro il muro...
Per chi avesse il culo di beccare un bug nei pic come il sottoscritto :rolleyes: :
http://ww1.microchip.com/downloads/en/DeviceDoc/80077b.pdf
Nelle prime release dei modelli 870-871, il dispositivo che permette la programmazione ICSP è abilitato e non è disabilitabile. Così, se uno non mette un pulldown sull'uscita 3 della porta B, il PIC si programma e si sprogramma in maniera casuale mentre sta andando.