Vai al contenuto
PLC Forum


Pic 16f84 Microcode Studio - verifica codice di programmazione


tgb99

Messaggi consigliati

Buon giorno a tutti

vorrei, per cortesia, sapere se qualcuno usa microcode studio per programmare i pic: se si vorrei inviare un listato (programma) per verificarne la correttezza in qunato ho dei problemi relativi alla comunicazione seriale tra due o più pic.

Mi spiego meglio: ho motorizzato le tapparelle di casa ed ho inserito, per ciascun motore, un pic opportunamente programmato per eseguire varie funzioni. Salita, discesa, fermata, memoria1, memoria2 e trasmissione di un codice (per esempio una "o") per dire agli altri pic (tapparelle) di alzarsi, abbassarsi, fermarsi, andare alla memoria1 o alla memoria2 ecc.

Il problema è che usando lo stesso piedino per ingreso s eriale ed uscita seriale, a volte va in tilt tutto il sistema, anche se è quasi impossibile che due pulsanti di due tapparelle diverse vengano premuti contemporaneamente!!

Questo problema si verifica saltuariamente, ma quando inizia, i relè cominciano a vibrare con il rischi di compromettere il motore della tapparella che non costa proprio poco!

Se qualcuno ha esperienza in questo ed è disponibile, invierei schema elettrico e listato del programma.

Grazie

Ciao TGB

Link al commento
Condividi su altri siti


Il tuo circuitino lo stai provando su una breadboard o lo stai provando già sul campo?perchè potrebbero essere solo dei disturbi da filtrare oportunamente,BYE.

Link al commento
Condividi su altri siti

ciao rfabri

il mio circuito lo sto già provando sul campo: in effeti sul banco prova funziona tutto a meraviglia!!

Ma è possibile che dei disturbi possano far impazzire un pic? Per esempio il motore della tapparella parte da solo oppure il relè cominciano ad azionarsi alternativamente ecc.... ogni volta qualcosa di nuovo ed anche un blocco totale che impedisce qualsiasi comando esterno (sono costretto a resettare).

Questi fatti mi accadono solo se collego il cavetto per la comunicazione seriale tra i pic.

Se non ti scoccia dai un'occhiata al listato:

include "modedefs.bas"

up var PORTA.1 ' pin 18 salita uscita

down var PORTA.0 ' pin 17 discesa uscita

si con 4 ' seriale in ingresso pin 10

so con 4 ' seriale in uscita pin 10

sw1 var PORTA.2 ' pulsante su pin 1 salita

sw2 var PORTA.3 ' pulsante su pin 2 sto

sw3 var PORTA.4 ' pulsante su pin 3 discesa

sw1a var PORTB.0 ' pulsante su pin 6 memoria 1

sw2a var PORTB.1 ' pulsante su pin 7 stop

sw3a var PORTB.2 ' pulsante su pin 8 memoria 2

cnt var PORTB.3 'input conta impulsi su pin 9 (b3)

n var Word 'contatore per impulsi

st var Byte 'stato : 0 = discesa 1 = salita

pos var Word 'posizione in movimento

a var Byte

b0 var Byte

Z var Byte

n1 var Word 'memoria 1

n2 var Word 'memoria 2

a1 var Byte

'read 1,n1.byte0 :read 2,n1.byte1 'in caso di mancanza corrente

'read 3,n2.byte0 :read 4,n2.byte1 'lettura posizione e memoria

'read 5,pos.byte0 :read 6,pos.byte1 '

loop:

Low up: Low down

If sw2 = 0 And sw1 = 0 And sw1a = 0 Then n1 = pos ':write 1,n1.byte0:write 2,n1.byte1:pause 450 ' memoria 01

If sw2 = 0 And sw1 = 0 And sw3a = 0 Then n2 = pos ':write 3,n2.byte0:write 4,n2.byte1:pause 450 ' memoria 03

If sw2a = 0 Then Serout so, n2400, ["o"] 'tx stop generale

If sw2 = 0 Then loop

If sw1 = 0 Then High up: st = 1: Gosub timer 'sw1 premuto

If sw3 = 0 Then High down: st = 0: Gosub timer 'sw3 premuto

If sw1a = 0 Then n = n1: Goto memo1 ' richiamo memo1

If sw3a = 0 Then n = n2: Goto memo1 ' richiamo memo2

Serin si, n2400, 5, loop, b0 'rx comando

If b0 = "s" Then High up: st = 1: Gosub timer 'rx comando per descesa

If b0 = "d" Then High down: st = 0: Gosub timer 'rx comando per salita

If b0 = "o" Then loop

If b0 = "1" Then n = n1: Goto memo1 ' rx comando memo1

If b0 = "2" Then n = n2: Goto memo1 ' rx comando memo2

Goto loop

timer:

'disable interrupt

a1 = cnt

For a = 1 To 25 ' timer 1 unità = 1 secondo

For Z = 1 To 200

If sw1a = 0 And a < 2 Then Serout so, n2400, ["s"] 'tx comando salita

If sw2 = 0 Then Goto loop

If sw3a = 0 And a < 2 Then Serout so, n2400, ["d"] 'tx comando discesa

If cnt <> a1 Then Gosub inc

Serin si, n2400, 5, timer_rx, b0

If b0 = "o" Then loop 'rx comando stop

timer_rx:

Next Z

Next a

If st = 0 Then pos = 10 'riposizionamento del controllo "pos" a zero

Goto loop

memo1:

a1 = cnt

If pos > n Then st = 0: High down

If pos < n Then st = 1: High up

For a = 1 To 25 ' timer 1 secondo = 1 unità

For Z = 1 To 200

If sw1 = 0 And a < 2 Then Serout so, n2400, ["1"] 'tx comando memo1

If sw3 = 0 And a < 2 Then Serout so, n2400, ["2"] 'tx comando memo2

If pos = n And a > 2 Then Goto loop

If sw2 = 0 Then Goto loop

If cnt <> a1 Then Gosub inc

If st = 0 And pos = < n Then Goto loop ' fine memo

If st = 1 And pos = > n Then Goto loop ' fine memo

If sw2a = 0 Then Serout so, n2400, ["o"]

Serin si, n2400, 5, timer_memo1, b0

If b0 = "o" Then Goto loop 'rx comando stop

timer_memo1:

Next Z

Next a

Goto loop

inc:

If st = 1 Then pos = pos + 1 'incremento in salita

If st = 0 Then pos = pos - 1 'decremento in discesa

a1 = cnt

pause 15

Return

Sono quasi intenzionato a mollare tutto!!! boh!

Eppure 3 tapparelle con questo sistema funzionano egrtegiamente ( in verità anche a loro ogni tanto capita di bloccarsi o di fare qualche "bizza" e non so il perchè).

Grazie in anticipo

Link al commento
Condividi su altri siti

CIao Livio

Grazie come al solito per i consigli; in effetti ho trascurato non poco l'hardware del circuito: ho costruito il tutto su una basetta 1000 fori con collegamenti a filo nella facciata inferiore..... puoi immaginare la non professionalità. Tuttavia ritengo che il circuito sia valido: ho inserito dei condensatori da 47000 pF all'ingresso di ogni pulsante, ho usato cavetti schermati per tutti i collegamenti ed ho usato due bc547 per pilotare i due relè.

L'alimentazione proviene da un alimentatore stabilizzato 12v. con conversione mediante Ua 7805 a bordo del circuito.

A quanto pare devo ricominciare da zero.

Provo ad allegare lo schema elettrico.

Ciao e grazie TGB

Link al commento
Condividi su altri siti

Separa l'alimentazione del micro da quella dei relè, ponendo un filtro pigreco (C-L-C) prima del 7805. Metti anche dei filtri soppressori in parallelo alle bobine dei relè e cura che non ci siano accoppiamenti sulle alimentazioni e sulle masse. Tieni due comuni separati: uno 0v per il micro ed un altro per la potenza (relè); poi fai convergere i due zeri in un unico punto di massa.

Sono solo l'ABC ma forse bastano per risolvere i tuoi problemi

Link al commento
Condividi su altri siti

Ancora una volta Grazie Livio

Provvederò a mettere in pratica i tuoi consiglio; penso che ci metterò un po' di tempo perchè, praticamente, devo rivedere tutto lo stampato (posizionamento componenti e piste ramate), tuttavia appena avrò risultati sarà mia premura comunicarlo a tutti i componenti del forum.

Grazie ancora

ciao TGB

Link al commento
Condividi su altri siti

a grandi linee , di dolito si usa separare i circuiti di 24 V proveniente da e per il campo dai circuiti

TTL.Puoi usare degli optoisolatori per tenere separate le masse del circuito dalle masse del campo .

Poi si usa anche filtrare gli ingressi con reti RC per ovviare agli inconvenienti di antirimbalzo dei pulsanti

e disturbi simili .

Per gli optoisolatori devi leggerti i datasheet e verificare le correnti di saturazione , e si usa mettere dei

diodi in serie agli ingressi 24 V e resistenza in parallelo per avere certezza che i foro transistor

all'interno degli optoisoltori non scattino per soglie minime .

Insomma ci sono un sacco di cosucce da fare e verificare , non da grandi scienziati , ma credo da

persone con esperienze e conoscenze abbastanza approfondite.

ciao

walter

Link al commento
Condividi su altri siti

Grazie Walter

per quanto riguarda diodoi e rete rc sui pulanti per i rimbalzi di contatto, ho già provveduto con successo e non ho problemi, mentre per il discorso optoisolatori su ingressi o uscite digitali ho già avuto modo di usarli quindi non penso di avere problemi particolare; una cosa però non ho ancora pensato come risolvere: io uso un piedino del pic come ingresso e uscita seriale (il software lo commua durante il programma in outo oppure in a seconda delle esigenze); come faccio a collegare uno o due optoisolatori (tipo per es. 4n25) su un solo piedino che funziona come in-out? non ci sono "cortocircuiti"?

Ti chiedo un chiarimento: cosa significa "tenere separate le masse del circuito dalle masse del campo" ?

Grazie ancora

CIao tgb

Link al commento
Condividi su altri siti

Ti chiedo un chiarimento: cosa significa "tenere separate le masse del circuito dalle masse del campo" ?
Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

mille grazie Livio

come al solito i tuoi consigli e le tue spiegazioni sono esaurienti!

Ho già messo in pratica quanto mi hai scritto: ho usatoun optoisolatore in ingresso per il segnale proveniente dal motore (nel mio caso mi da la posizione della tapparella) e già cosi il circuito iniziava a funzionare correttamente. In seguito ho isolato le due masse del circuito facendole confluire poi in un solo punto (per provare ho usato un trasformatore toroidale che avevo con due avvolgimenti in uscita: uno a 8 volt che ho usato per alimentare il pic con 5 volt in uscita da un 7805; l'altro avvolgimento da 15 volt che ho usato per pilotare i relè con un 7812 come stabilizzatore.

Per quanto riguarda l'uscita seriale (che è anche un ingresso) non ho seguito il tuo consiglio in quanto ho problemi di spazio (la schedina è posta dentro una scatoletta murata biticino con sei pulsanti sulla mascherina della stessa) ma funziona tutto a dovere! Probabilmente i disturbi arrivavano dall'alimentazione e dall'ingresso di controllo della tapparella.

Per riassumere: ho inserito un optoisolatore in ingresso al segnale di controllo, ho separato le masse delle due alimentazioni e, infine, ho semplicemente schermato con più cura i cavi e curato un po' meglio il cablaggio avendo cura di tenere abbastanza distanti tra loro cavetti che portano il segnale seriale e fili a 220 volt.

Sono molto soddisfatto grazie a tutti per i consigli, ora devo costruire altre 5 schede come questa per completare l'impianto di casa quindi collegare il tutto fra loro!! speriamo bene!

CIao e grazie ancore

Modificato: da tgb99
Link al commento
Condividi su altri siti

Sono felice per teche hai risolto, sembra, i tuoi problemi. Sono anche felice perchè hai postato i risultati del lavoro, purtroppo non sempre accade.

Descrivere i risultati e le modifiche apportate è un'importante forma di trasmissione dell'esperioenze che arricchisce tutti i partecipanti.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...