Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 22 luglio 14, 13:30   #1 (permalink)  Top
Adv Moderator
 
L'avatar di romoloman
 
Data registr.: 15-08-2007
Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.070
Citazione:
Originalmente inviato da trabo Visualizza messaggio
ti ringrazio...
il comparatore dovrei averli disabilitati, con cmcon=7
quindi tolgo il quarzo da 4mhz?
Attendo notizie
avevo visto l'ultima copia del sorgente e crcom non c'era...
non è che puoi postare il codice che effettivamente stai usando ?

Inoltre per debuggare il programma ti consiglio un ottimo programma che si chiama pic simulator ide. che simula anche l'hardware attorno (ingressi pulsanti etc)
__________________
Vivere in qeusto mondo e molto belo belo e vale la pena starci ma a volte in questa UNICA vita che ci apartiene posono succedere cose brute brute alora mi chiedo perche siete incazziati domani pole esere anche lultimo
Grazie "TRANQUILLO"
FAI 15766
romoloman non è collegato   Rispondi citando
Vecchio 22 luglio 14, 13:40   #2 (permalink)  Top
User
 
Data registr.: 19-07-2014
Messaggi: 17
Citazione:
Originalmente inviato da romoloman Visualizza messaggio
avevo visto l'ultima copia del sorgente e crcom non c'era...
non è che puoi postare il codice che effettivamente stai usando ?

Inoltre per debuggare il programma ti consiglio un ottimo programma che si chiama pic simulator ide. che simula anche l'hardware attorno (ingressi pulsanti etc)

allora questo è quello che ho scritto da 0... con soli 2 effetti e funziona.
Se aggiungo il 3 effetto lo salta:

[program Lampeggioled



main:


while TRUE
trisio.1=0
trisio.2=0
trisio.0=1

gpio.1=1
gpio.2=1
cmcon=7



delay_ms(2000)

while gpio.0=0
gpio.1=1
delay_ms(1000)
gpio.1=0
delay_ms(1000)
wend



while gpio.0=0
delay_ms(2000)
gpio.2=0
delay_ms(2000)
wend



wend


Mentre questo è il primo in assoluto che ho realizzato...
Solo che ogni volta che premo il pulsante, mi va random:

program MyProject


main:
TRISIO.1=0
TRISIO.2=0
TRISIO.0=1
cmcon=7
IF gpio.0=0 THEN
GOTO fissa
end if

fissa:
TRISIO.1=0
TRISIO.2=0
TRISIO.0=1
cmcon=7
while true
gpio.1=1
gpio.2=1
if gpio.0=1 then
goto inizio
end if
wend


inizio:
delay_ms(100)
TRISIO.1=0
TRISIO.2=0
TRISIO.0=1
cmcon=7

while true
if gpio.0=1 then
goto mezzo
end if
GPIO.1=1
gpio.2=1
delay_us(50)
GPIO.2=0
gpio.1=0
delay_us(50)
IF GPIO.0=1 THEN
GOTO mezzo
end if
wend


mezzo:
delay_ms(100)
TRISIO.1=0
TRISIO.2=0
TRISIO.0=1
cmcon=7

while true
if gpio.0=1 then
goto strobo
end if
gpio.2=1
delay_ms(500)
gpio.2=0
delay_ms(500)
gpio.1=1
delay_ms(500)
gpio.1=0
delay_ms(500)
if gpio.0=1 then
goto strobo
end if
wend

strobo:
delay_ms(100)
TRISIO.1=0
TRISIO.2=0
TRISIO.0=1
cmcon=7
while true
if gpio.0=1 then
goto fissa
end if
gpio.1=1
gpio.2=1
delay_ms(50)
gpio.1=0
gpio.2=0
delay_ms(50)
if gpio.0=1 then
goto fissa
end if
wend
end.


INFINE, questo è quello che ho provato inserendo la variabile K ed eliminando i goto.
Questo si blocca al secondo effetto e da li non si muove:


program Lampeggioled

const tasto as byte[4]=(0,1,2,3)
dim K as byte
dim premuto as byte

main:
gpio.0=0
gpio.1=0
gpio.2=0
K=0
premuto=0
trisio.1=0
trisio.2=0
trisio.0=1
cmcon=7
while true
if gpio.0=0 then
premuto=0
end if

if (gpio.0=1)and (K<3) and (premuto=0) then
K=K+1
premuto=1
end if

if(gpio.0=1) and (K=3)and(premuto=0)then
K=0
end if

if K=0 then
gpio.1=1
gpio.2=1
end if

if K=1 then
gpio.1=1
gpio.2=1
delay_us(50)
gpio.1=0
gpio.2=0
delay_us(50)
end if

if K=2 then
gpio.1=1
delay_ms(500)
gpio.1=0
delay_ms(500)
gpio.2=1
delay_ms(500)
gpio.2=0
delay_ms(500)
end if

if K=3 then
gpio.1=1
gpio.2=1
delay_ms(50)
gpio.1=0
gpio.2=0
delay_ms(50)
end if
wend
end.

Ora tutti e 3 hanno dei problemi, e fino ad ora, l'unico che cambia perfettamente è quello con i soli while, ma non legge (se lo aggiungo ) il 3o effetto[/COLOR]
trabo non è collegato   Rispondi citando
Vecchio 23 luglio 14, 17:09   #3 (permalink)  Top
User
 
L'avatar di MSchiepp
 
Data registr.: 21-01-2004
Residenza: Milano
Messaggi: 989
Citazione:
Originalmente inviato da trabo Visualizza messaggio
allora questo è quello che ho scritto da 0... con soli 2 effetti e funziona.
Se aggiungo il 3 effetto lo salta:
Supponendo che non ci siano problemi nell'hardware, c'è sicuramente un problema sui rimbalzi dell'interruttore e su come lo utilizzi.
In pratica hai due cicli while uno dietro l'altro con la condizione di ripetizione data dallo stato del pulsante.
Adesso immagina di essere nel primo while: fino a che l'ingresso è zero continua ad eseguire il codice contenuto nel while, ma quando l'ingresso diventa 1 esegue l'istruzione while, trova l'ingresso a 1 ed esegue subito l'istruzione seguente il wend, che è un altro while e se l'ingresso è ancora a 1 lo salta ed esce subito al wend...
In pratica il cambio dell'effetto lo fa sui rimbalzi del pulsante e sfruttando i ritardi dei vari effetti.
Prova a mettere la condizione in fondo all'effetto, invece che all'inizio: non uso il mikrobasic, ma dovresti avere una struttura do ... while(condizione); in questo caso tra quando trova il pulsante chiuso e quando lo va a testare la volta successiva hai il tutto il tempo di ritardo dell'effetto che dovrebbe annullarti i rimbalzi.

Michele
__________________
__________________________________________________
The worst day flying is better than the best day working.
MSchiepp non è collegato   Rispondi citando
Vecchio 30 luglio 14, 12:39   #4 (permalink)  Top
User
 
Data registr.: 19-07-2014
Messaggi: 17
Citazione:
Originalmente inviato da MSchiepp Visualizza messaggio
Supponendo che non ci siano problemi nell'hardware, c'è sicuramente un problema sui rimbalzi dell'interruttore e su come lo utilizzi.
In pratica hai due cicli while uno dietro l'altro con la condizione di ripetizione data dallo stato del pulsante.
Adesso immagina di essere nel primo while: fino a che l'ingresso è zero continua ad eseguire il codice contenuto nel while, ma quando l'ingresso diventa 1 esegue l'istruzione while, trova l'ingresso a 1 ed esegue subito l'istruzione seguente il wend, che è un altro while e se l'ingresso è ancora a 1 lo salta ed esce subito al wend...
In pratica il cambio dell'effetto lo fa sui rimbalzi del pulsante e sfruttando i ritardi dei vari effetti.
Prova a mettere la condizione in fondo all'effetto, invece che all'inizio: non uso il mikrobasic, ma dovresti avere una struttura do ... while(condizione); in questo caso tra quando trova il pulsante chiuso e quando lo va a testare la volta successiva hai il tutto il tempo di ritardo dell'effetto che dovrebbe annullarti i rimbalzi.

Michele
Niente di niente...
A questo punto credo sia lo schema...
POSTO lo schema qui... se potete vedere se ho errato qualcosa
Image - TinyPic - Servizio di hosting d'immagini, condivisione immagini & hosting di video gratuito


Grazie ancora
trabo non è collegato   Rispondi citando
Vecchio 30 luglio 14, 16:16   #5 (permalink)  Top
User
 
L'avatar di MSchiepp
 
Data registr.: 21-01-2004
Residenza: Milano
Messaggi: 989
qualche ritocco sull'hardware si può fare...

- aggiungi un condensatore elettrolitico 10uF 16V all'uscita del regolatore
- aggiungi un condensatore di filtro da 47 nF tra il pin 1 e il pin 8 del micro
- il condensatore C1 non serve a molto... se vuoi filtrare il pulsante devi mettere anche una resistenza in serie (t=RC, ma se R=0...)

visto che hai già messo i transistor, lasciali, ma puoi pilotare direttamente i led dai pin del micro (con la dovuta resistenza) con correnti fino a 20mA.

Michele
__________________
__________________________________________________
The worst day flying is better than the best day working.
MSchiepp non è collegato   Rispondi citando
Vecchio 30 luglio 14, 16:37   #6 (permalink)  Top
User
 
Data registr.: 19-07-2014
Messaggi: 17
Citazione:
Originalmente inviato da MSchiepp Visualizza messaggio
qualche ritocco sull'hardware si può fare...

- aggiungi un condensatore elettrolitico 10uF 16V all'uscita del regolatore
- aggiungi un condensatore di filtro da 47 nF tra il pin 1 e il pin 8 del micro
- il condensatore C1 non serve a molto... se vuoi filtrare il pulsante devi mettere anche una resistenza in serie (t=RC, ma se R=0...)

visto che hai già messo i transistor, lasciali, ma puoi pilotare direttamente i led dai pin del micro (con la dovuta resistenza) con correnti fino a 20mA.

Michele
quindi... con queste modifiche che mi dici, credi che riesca a risolvere il problema?
E tra i programmi che ho scritto.... quale dunque mi consigli di utilizzare?
Aggiungo la resistenza??

Grazie
trabo non è collegato   Rispondi citando
Vecchio 30 luglio 14, 17:13   #7 (permalink)  Top
Adv Moderator
 
L'avatar di romoloman
 
Data registr.: 15-08-2007
Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.070
Citazione:
Originalmente inviato da MSchiepp Visualizza messaggio
qualche ritocco sull'hardware si può fare...

- aggiungi un condensatore elettrolitico 10uF 16V all'uscita del regolatore
- aggiungi un condensatore di filtro da 47 nF tra il pin 1 e il pin 8 del micro
- il condensatore C1 non serve a molto... se vuoi filtrare il pulsante devi mettere anche una resistenza in serie (t=RC, ma se R=0...)

visto che hai già messo i transistor, lasciali, ma puoi pilotare direttamente i led dai pin del micro (con la dovuta resistenza) con correnti fino a 20mA.

Michele
già che uno c'è per non complicarsi la vita può ben pensare di rimuovere il quarzo, i due condensatori e usare l'oscillatore interno. in questo caso ricordarsi di caricare la calibrazione di fabbrica dell'oscillatore interno nell'apposito registro:

asm
{
bsf _status,RP0
call 0x3FF
movwf _osccal
bcf _status,RP0
}

Il grosso vantaggio è che si liberano ben due piedini di I/O
__________________
Vivere in qeusto mondo e molto belo belo e vale la pena starci ma a volte in questa UNICA vita che ci apartiene posono succedere cose brute brute alora mi chiedo perche siete incazziati domani pole esere anche lultimo
Grazie "TRANQUILLO"
FAI 15766
romoloman non è collegato   Rispondi citando
Vecchio 30 luglio 14, 17:18   #8 (permalink)  Top
User
 
Data registr.: 19-07-2014
Messaggi: 17
Citazione:
Originalmente inviato da romoloman Visualizza messaggio
già che uno c'è per non complicarsi la vita può ben pensare di rimuovere il quarzo, i due condensatori e usare l'oscillatore interno. in questo caso ricordarsi di caricare la calibrazione di fabbrica dell'oscillatore interno nell'apposito registro:

asm
{
bsf _status,RP0
call 0x3FF
movwf _osccal
bcf _status,RP0
}

Il grosso vantaggio è che si liberano ben due piedini di I/O
credi che il quarzo esterno dia problemi?
E poi? come dovrei rifare la calibrazione... scusa sono alle prima armi
trabo non è collegato   Rispondi citando
Rispondi

Bookmarks



Strumenti discussione
Visualizzazione

Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


Discussioni simili
Discussione Autore discussione Forum Commenti Ultimo Messaggio
pic 12F629 faustog_2 Circuiti Elettronici 2 07 ottobre 13 11:52
ESC con PIC Italia Circuiti Elettronici 4 23 marzo 13 16:27
Problema con programma MPX per aggiornamento Royal PRO picman Radiocomandi 0 29 agosto 10 20:27
Programma facile per pic Orso82 Circuiti Elettronici 20 27 febbraio 05 16:44
Regolatore con PIC rapis Circuiti Elettronici 1 26 novembre 01 11:15



Tutti gli orari sono GMT +2. Adesso sono le 06:33.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2026
www.baronerosso.it - www.toymagazine.it