Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Usare PIC

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[11] Re: usare PIC

Messaggioda Foto Utentelelerelele » 14 nov 2013, 12:55

la prima cosa da impostare su un micro è la "configuration word" che setta il micro a fare il lavoro che ti servirà, ADc, comparatori, PWM, porte ecc.

primo di tutti dovrà configurare ìl tipo di clock!

se ritieni che il micro usi il suo clock devi appunto configurarlo, in mancanza di clock puoi stare certo che nulla farà.

E' ciò che hai ottenuto settando quei parametri.

Forza che chi l'ha dura la vince.
Avatar utente
Foto Utentelelerelele
4.899 3 7 9
Master
Master
 
Messaggi: 5505
Iscritto il: 8 giu 2011, 8:57
Località: Reggio Emilia

0
voti

[12] Re: usare PIC

Messaggioda Foto Utentezacarov » 15 nov 2013, 21:15

salve:
eccomi alle prese con il mio listato, con un simulatore software funziona, quando scrivo il PIC e lo metto operativo nulla, vedo e rivedo il config word ma nulla, il listato prevede tramite le porte rb0 rb1 rb2 dei livelli alti a seconda dei casi, di conseguenza sulle porte rb6 rb7 si dovranno avere dei livelli alti o bassi a seconda dei casi, ma questi casi,......!!! quali sono direte, sono sensori luce, umidità e pioggia e dovranno interagire con le uscite appunto rb6-rb7, interponendo delle pause ( che nel sorgente sono settate in pochi secondi), posto il sorgente, sperando che qualcuno possa darmi una dritta su come settare i config word tenedo presente che utilizzo il oscillatore interno del 16f628a, essendo piccole pause.
Alcuni settaggi, ho dedotto dal datasheet a cosa servono e ho agito nel settarli, i cp- e -cpd, ma altri non riesco a digerirli, sembra che uno faccia l'opposto di un altro o interferisca con altri, si rammenti che opero con il mikrobasic ed il pckit2 clone
grazie della vostra gentilezza ed ecco il listato:

Codice: Seleziona tutto
program centrx

'definizione variabili
dim stato as byte
dim k as byte

main:
portb=0                                              ' azzera pora b
trisb=%00000111                                      'rb8,7,6,5,4,3=out 2,1,0=in

ciclo:                                               ' etichetta di sequenza
if portb.2=0 then                                    ' pioggia = off
portb.7=0                                            ' led pioggia = off
end if                                               ' prossima istruzione
if portb.2=1 then                                    ' pioggia = on
portb.7=1 and portb.6=0                              ' led/pioggia= on e pompa =off
end if                                               ' prossima istruz
'---------------processo 1 condizione------------- luce/secco = off
if (portb.0=0) and (portb.1=0) then
stato =1
end if
'--------------processo 2 condizione--------------- luce/umido = off
if (portb.0=0) and (portb.1=1) then
stato =2
end if
'--------------processo 3 condizione--------------  buio/umido = off
if (portb.0=1) and (portb.1=1) then
stato =3
end if
'--------------processo 4 condizione---------------  buio/secco = on
if (portb.0=1) and (portb.1=0) then
stato =4
end if
'++++++++++++++processa le 4 condizioni++++++++++++
select case stato                                  ' seleziona il caso
case 1
portb.6=0                                          ' pompa/led off
case 2
portb.6=0                                          ' pompa/led off
case 3
portb.6=0                                          ' pompa/led off
case 4
portb.6=1                                          ' pompa/led on
end select
if (stato =4) and (portb.2=0)then                  ' luce=1 terra=0 e pioggia=0
portb.7=0                                          'led/pioggia =0
for k =1 to 2 step 1                               ' conta 2 cilcli
delay_ms (5000)                                   ' x 5''= 10''
next k
end if                                             'prossima isturzione
portb.6=0                                          'dopo pompa =0
delay_ms (5000)                                    ' attendi 5''
if (stato =4) and (portb.2=1) then                 'luce=01 terra=0 pioggia=1
portb.6=0                                          'pompa =0
portb.7=1                                          'led/pioggia=1
end if                                             'prossima istruzione
if (stato < 4) and (portb.2=0) or(portb.2=1) then  'sensori no on -pioggia=0/1
delay_ms (10000)                                   'attendi 10''
goto ciclo                                         'ricomincia ciclo verifica
end if                                             'prossima istruzione
goto main                                          'torna inizio
end.
Ultima modifica di Foto UtentePaolino il 17 nov 2013, 9:12, modificato 1 volta in totale.
Motivazione: Edit: il codice sorgente va messo tra i tag [code] e [/code], come già segnalato, usando il pulsante in alto a sinistra!
Avatar utente
Foto Utentezacarov
30 3
 
Messaggi: 40
Iscritto il: 2 lug 2013, 11:36

0
voti

[13] Re: usare PIC

Messaggioda Foto Utentelelerelele » 15 nov 2013, 21:33

per il listato ho difficoltà ad aiutarti, uso il C.

per i settaggi della config word dovresti postare qualcosa che ne indichi lo stato, può essere che il difetto sia qua,

il fatto che il simulatore funzioni, può anche essere il motivo che non ha bisogno del clock, visto che i simulatori non sempre sono coerenti con la realtà.


fondamentale è assicurarsi che il clock sia settato INTOSC; studiati le pagine 96 del datasheets e successive.

non capisco perché il goto main.....vai a settare di nuovo le uscite a zero!

magari prova prima con un semplice programma con due righe per accendere e spegnere un led uscita; giusto per verificare se il clock funziona.....poi passi al tuo software sapendo che gira.
Avatar utente
Foto Utentelelerelele
4.899 3 7 9
Master
Master
 
Messaggi: 5505
Iscritto il: 8 giu 2011, 8:57
Località: Reggio Emilia

0
voti

[14] Re: usare PIC

Messaggioda Foto Utentezacarov » 16 nov 2013, 20:12

grande, seguirò il tuo consiglio,infatti ho provato prima un semplice codice che accende un led ma senza clock,
poi ho provato lo stesso aggiungendo un clok e settando intosc_osc noclockout, il risultato quando alimento il circuito si accende subito il led su uscita e rimane acceso ho settato un tempo di 5 sec ma niente, riguardo il datasheet, essendo in inglese mah!! cercherò di intuire al meglio,
aggiorno in seguito e grazie
Avatar utente
Foto Utentezacarov
30 3
 
Messaggi: 40
Iscritto il: 2 lug 2013, 11:36

1
voti

[15] Re: usare PIC

Messaggioda Foto UtentePaolino » 17 nov 2013, 9:19

Un paio di domande: riesci a scrivere un programmino per far lampeggiare un LED in modo che sia ON per 1 secondo e OFF per 1 secondo, in continuazione?

Secondo: quando scrivi:
Codice: Seleziona tutto
if (stato < 4) and (portb.2=0) or(portb.2=1) then  'sensori no on -pioggia=0/1
delay_ms (10000)                                   'attendi 10''
goto ciclo                                         'ricomincia ciclo verifica
end if                                             'prossima istruzione
goto main                                          'torna inizio
end.


non capisco perché il goto ciclo è all'interno del corpo "if". Prova con:

Codice: Seleziona tutto
if (stato < 4) and (portb.2=0) or(portb.2=1) then  'sensori no on -pioggia=0/1
delay_ms (10000)                                   'attendi 10''
end if                                             'prossima istruzione
goto ciclo                                         'ricomincia ciclo verifica
goto main                                          'torna inizio (PROBABILMENTE NON SERVE A NULLA QUESTA RIGA)
end.


Ciao.

Paolo
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[16] Re: Usare PIC

Messaggioda Foto UtenteDryden » 18 nov 2013, 13:45

Innanzitutto lascia perdere i simulatori se non per provare cose banali.
Inverti le istruzioni:
Portb=0
Trisb=xxxx

Non puoi azzerare una porta e poi definirla! Al supermercato prima paghi e poi prendi la roba dagli scaffali?!?!?!?!

Che versione di mikrobasic usi? Io programmo con mikrobasic Pro 6.0

Non usare la istruzione GOTO, la stessa Mikroe ne sconsiglia l'uso. Usa l'istruzione WHILE oppure DO!

cosa deve fare questa parte di codice?
Codice: Seleziona tutto
if (stato < 4) and (portb.2=0) or(portb.2=1) then  'sensori no on -pioggia=0/1
delay_ms (10000)                                   'attendi 10''
goto ciclo                                         'ricomincia ciclo verifica
end if
goto main                                          'torna inizio
end.


scritta così potresti avere dei risultati imprevisti, senza contare che se l'istruzione è vera salta alla label CICLO, altrimenti salta alla label MAIN ripartendo tutto da zero.

POSTA LA CONFIG_WORD e LA CONFIGURAZIONE con cui intendi usare il PIC

Descrivi ACCURATAMENTE cosa deve fare il programma altrimenti non ti si può aiutare.

buona giornata.
Avatar utente
Foto UtenteDryden
20 4
New entry
New entry
 
Messaggi: 97
Iscritto il: 1 gen 2011, 14:37
Località: Bolzano

0
voti

[17] Re: Usare PIC

Messaggioda Foto Utentezacarov » 18 nov 2013, 19:30

salve: è vero + controllo il codice e verifico passaggi e + vado in palla.
io uso un demo di mikrobasic v7.0.0.2 permette piccolo listato giuso giusto il mio,
spiegarti cosa deve fare? cercherò di riassumere: tramite dei sensori, luce umidità, e pioggia deve comandare l'irrigazione del mio orto sul balcone,

questo è il codice
Codice: Seleziona tutto
'definizione variabili
dim stato as byte
dim k as byte

main:
trisb=%00000111                           'rb8,7,6,5,4,3=out 2,1,0=in
portb=0                                   ' azzera portb

ciclo:                                               ' etichetta di sequenza
if portb.2=0 then                                    ' pioggia = off
portb.7=0                                            ' led pioggia = off
end if                                               ' prossima istruzione
if portb.2=1 then                                    ' pioggia = on
portb.7=1 and portb.6=0                              ' led/pioggia= on e pompa =off
end if                                               ' prossima istruz
'---------------processo 1 condizione------------- luce/secco = off
if (portb.0=0) and (portb.1=0) then
stato =1
end if
'--------------processo 2 condizione--------------- luce/umido = off
if (portb.0=0) and (portb.1=1) then
stato =2
end if
'--------------processo 3 condizione--------------  buio/umido = off
if (portb.0=1) and (portb.1=1) then
stato =3
end if
'--------------processo 4 condizione---------------  buio/secco = on
if (portb.0=1) and (portb.1=0) then
stato =4
end if
'++++++++++++++processa le 4 condizioni++++++++++++
select case stato                                  ' seleziona il caso
case 1
portb.6=0                                          ' pompa/led off
case 2
portb.6=0                                          ' pompa/led off
case 3
portb.6=0                                          ' pompa/led off
case 4
portb.6=1                                          ' pompa/led on
end select
if (stato =4) and (portb.2=0)then                  ' luce=1 terra=0 e pioggia=0
portb.7=0                                          'led/pioggia =0
for k =1 to 3 step 1                               ' conta 3 cilcli
delay_ms (20000)                                  ' x 20''= 1'
next k
end if                                             'prossima isturzione
portb.6=0                                          'dopo pompa =0
delay_ms (5000)                                    ' attendi 5''
if (stato =4) and (portb.2=1) then                 'luce=01 terra=0 pioggia=1
portb.6=0                                          'pompa =0
portb.7=1                                          'led/pioggia=1
end if                                             'prossima istruzione
if (stato < 4) and (portb.2=0) or(portb.2=1) then  'sensori no on -pioggia=0/1
delay_ms (20000)                                   'attendi 20''
end if
goto ciclo                                         'ricomincia ciclo verifica

per quanto rigurda la parte che mi hai chiesto cosa fa che riporto
Codice: Seleziona tutto
if (stato < 4) and (portb.2=0) or(portb.2=1) then  'sensori no on -pioggia=0/1
delay_ms (20000)                                   'attendi 20''
end if
goto ciclo                                         'ricomincia ciclo verifica

dovrebbe!!! verificare se lo stato è minore di 4 attendere 20 sec e ritornare all'inizio
Per quanto rigurda il config word sto diventando matto! non ci riesco a capire nelle immagini del datasheet
e comunque io ho settato come figura che allego:
Beh ho capito come postare il codice con il pulsante e come inserire le immagini :D :D

Ma tornando al codice la strada mi sembra molto in salita, se ti dico che sono 2 mesi che un paio di ore al giorno ci lavoro sopra non ci crederai ma iniziando da zero, solo per il fatto che qualcuno mi dia delle dritte è confortante.
la saga continua!!!!!!
Allegati
conf2.JPG
conf2.JPG (24.97 KiB) Osservato 6698 volte
Conf1.JPG
Conf1.JPG (27.44 KiB) Osservato 6698 volte
Avatar utente
Foto Utentezacarov
30 3
 
Messaggi: 40
Iscritto il: 2 lug 2013, 11:36

0
voti

[18] Re: Usare PIC

Messaggioda Foto Utentezacarov » 18 nov 2013, 19:42

rispondo a Paolo:
Nei precedenti post, come avevo detto ho ricominciato scrivendo un semplice codice per lampeggio led, per verificare poi, cosa avevo sbagliato nel mio, il lampeggio è un po' più di 1 secondo, sono 5 ma funzionava, ultimamente ho riprovato e non funziona +, devo rivedere cosa è sucesso, forse ho toccato il config word, facendo prove su prove su prove......... ma riuscendo nel concetto, avevo preso spunto per il mio ora sono arenato.

Ps. nonostante l'alimentazione del PIC proveninteda alimentatore 5v in effetti risulta 5,07 può incidere sul non funzionamento del PIC stesso in quanto con pckit2 clone, lo scrivo con 5 v?
Mi è sorto questo dubbio

Comunque grazie a voi tutti per l'aiuto che mi stato offrendo
Avatar utente
Foto Utentezacarov
30 3
 
Messaggi: 40
Iscritto il: 2 lug 2013, 11:36

0
voti

[19] Re: Usare PIC

Messaggioda Foto Utentelelerelele » 19 nov 2013, 9:55

zacarov ha scritto:l'alimentazione del PIC proveninteda alimentatore 5 V in effetti risulta 5,07 può incidere sul non funzionamento del PIC stesso in quanto con pckit2 clone, lo scrivo con 5 v?


No.
basta che stai sotto al limite elettrico del micro (dovrebbero essere intorno ad i 5.5V) il funzionamento non cambia.

tra l'altro la programmazione in flash è a 12V, ottenuti tramite pickit sul pin MCLR/Vpp.
Avatar utente
Foto Utentelelerelele
4.899 3 7 9
Master
Master
 
Messaggi: 5505
Iscritto il: 8 giu 2011, 8:57
Località: Reggio Emilia

2
voti

[20] Re: Usare PIC

Messaggioda Foto UtentePaolino » 19 nov 2013, 10:29

Urca, Foto Utentezacarov, vedo solo ora una cosa che mi lascia un po' perplesso!

Quando scegli la tipologia dell'oscillatore non puoi andare a selezionare tre modalità contemporaneamente! Nella pagina di configuration bit, devi scegliere solamente una modalità. Nel seguito, prova solamente con quella cerchiata in rosso, le altre vanno de-selezionate:

Config2.jpg
Config2.jpg (27.88 KiB) Osservato 6684 volte


Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,6k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4226
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

PrecedenteProssimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti