Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

PIC16F1829 problema con numeri random

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[11] Re: PIC16F1829 problema con numeri random

Messaggioda Foto UtenteNick01 » 2 giu 2015, 20:57

WALTERmwp ha scritto:Mi pare che nell'ultimo codice inserito nel Post manchi la ri-inizializzazione delle tre variabili di ciclo

Hai ragione me ne ero dimenticato, grazie.

WALTERmwp ha scritto:Non mi piace invece questo (l'uso del break)
Codice: Seleziona tutto
if(RA5 == 0)
{
    break;
}
però, è questione di gusti ...

Sai anche i miei prof dicono che non si dovrebbe uscire in modo così brusco dal ciclo, ma io non riesco ancora a capire il perché.

Domani pomeriggio provo a vedere se funziona poi vi faccio sapere comunque mi sembra strano che salti così il ciclo del controllo dei pulsanti anche alla prima volta che provo il programma senza aver fatto quelle inizializzazioni che mi ha detto.
Avatar utente
Foto UtenteNick01
15 4
 
Messaggi: 31
Iscritto il: 29 mag 2015, 16:13

0
voti

[12] Re: PIC16F1829 problema con numeri random

Messaggioda Foto UtenteWALTERmwp » 2 giu 2015, 21:33

Nick01 ha scritto:grazie
prego, figurati.
Nick01 ha scritto:Sai anche i miei prof dicono che non si dovrebbe uscire in modo così brusco dal ciclo, ma io non riesco ancora a capire il perché.
se non lo capisci, malgrado te lo abbiano spiegato, non fai altro che porre loro di nuovo la questione; invece, se non glie lo hai mai chiesto, poni la questione.

Da parte mia, sempre in merito al "break", per quel che vale, ti posso scrivere che, se non esistono dubbi sullo statement sul quale agisce(che viene limitato), i problemi potrebbero derivare dal fatto di non avere censito le conseguenze di quanto non viene più eseguito: può apparire banale ma non lo è, almeno per me.
Al contrario, in un costrutto proprio come lo switch, dove il suo impiego ne caratterizza per "natura" la sintassi, è un ovvio riferimento.

Per il comportamento del programma non so, invece, sulla base di cosa, sostieni che i loop(s) non vengono mai eseguiti.
A livello di sintassi non c'è motivo apparente per dubitare.
Se escludo qualche "gabola" a livello di compilatore ( ... ma lo ritengo veramente poco probabile) allora una risposta ragionevole sta nel fatto che:
i) a livello hardware qualcosa non funziona
ii) il primo while deve essere/viene eseguito se RA5 corrisponde a 1 (magari è sempre a zero)
iii) il secondo while deve essere/viene eseguito perché le due variabili soddisfano la condizione
iv) per il terzo while vale quanto per il (ii)
v) da "sotto" in poi è una conseguenza
vi) il codice che hai riportato non è esattamente quanto hai compilato: nulla di che, può accadere, per distrazione o approssimazione, ma può accadere.
vii) ... altre varie ...

Potrebbe certamente essermi sfuggito qualcosa ma se trovi modo di verificare ci togliamo delle curiosità.
Buon studio.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
29,4k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8736
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[13] Re: PIC16F1829 problema con numeri random

Messaggioda Foto UtenteNick01 » 2 giu 2015, 21:49

WALTERmwp ha scritto:se non lo capisci, malgrado te lo abbiano spiegato, non fai altro che porre loro di nuovo la questione; invece, se non glie lo hai mai chiesto, poni la questione.

Sono io che non gliel'ho mai chiesto, lo farò il prima possibile.

Per quanto riguarda la parte del "salto del loop": come compilatore uso XC8, ti spiego come dovrebbe teoricamente funzionare il mio progetto. Per prima cosa si preme il pulsante posto su RA5 per dare inizio al tutto. Si accendono poi i led in maniera casuale, questa sequenza viene memorizzata in un vettore, lo stesso accade con la sequenza dei tasti da noi premuti, questi due vettori vengono messi a confronto se il contenuto di questi è uguale si accendono e poi si spengono tutti i led. Se invece abbiamo sbagliato a fare la sequenza si accende e si spegne solo il led collegato a RC0.
Io ho compilato il tutto e inviato al PIC, qui alla pressione del tasto RA5 vengono accesi i led, fin qui tutto funziona correttamente, poi in teoria dovrei premere i pulsanti, ma dopo un certo arco di tempo mi si accende e spegne il led su RC0 indicandomi quindi che la sequenza dei led e quella da noi immessa non coincidono (come non dargli torto, neanche mi fa premere i pulsanti).
Non so come ma secondo me la variabile che tiene conto dei tasti premuti si incrementa in qualche modo anche se dal codice mi sembra strano.
Non so se mi sono spiegato bene, se occurrono ulteriori chiarimenti non esitare a chiedere :D
Grazie ancora
Avatar utente
Foto UtenteNick01
15 4
 
Messaggi: 31
Iscritto il: 29 mag 2015, 16:13

0
voti

[14] Re: PIC16F1829 problema con numeri random

Messaggioda Foto UtenteWALTERmwp » 2 giu 2015, 22:30

Nick01 ha scritto:(...) ti spiego come dovrebbe teoricamente funzionare il mio progetto. (...)
sarebbe stato utile, più che per me, magari per altri utenti che seguono anche questo thread, ma va bene comunque.
Per i Post(s) precedenti, prima di risponderti, avevo dedicato del tempo alla "lettura" del codice.

Un suggerimento: dove puoi dilata i tempi del "delay" in modo tale da concederti più tempo per osservare (fare una sorta di debug) quello che accade o che non accade.
Poi, all'ingresso del loop
Codice: Seleziona tutto
while(contPuls < cont)
per avere la conferma d'avervi acceduto, accendi un led utilizzando un pin tra quelli disponibili, che invece dall'inizio del programma deve risultare spento.
Insomma devi avere certezza del percorso che sta seguendo il tuo program counter.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
29,4k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8736
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[15] Re: PIC16F1829 problema con numeri random

Messaggioda Foto UtenteNick01 » 3 giu 2015, 7:32

WALTERmwp ha scritto:Un suggerimento: dove puoi dilata i tempi del "delay" in modo tale da concederti più tempo per osservare (fare una sorta di debug) quello che accade o che non accade.
Poi, all'ingresso del loop
Codice: Seleziona tutto
while(contPuls < cont)
per avere la conferma d'avervi acceduto, accendi un LED utilizzando un pin tra quelli disponibili, che invece dall'inizio del programma deve risultare spento.
Insomma devi avere certezza del percorso che sta seguendo il tuo program counter.

Ok grazie del consiglio oggi provo a vedere se effettivamente "salta" quel ciclo.
Avatar utente
Foto UtenteNick01
15 4
 
Messaggi: 31
Iscritto il: 29 mag 2015, 16:13

0
voti

[16] Re: PIC16F1829 problema con numeri random

Messaggioda Foto UtenteNick01 » 3 giu 2015, 16:05

Nuove notizie ora funziona :ok:
Allora il problema stava nel fatto che usando la demoboard avevo alcuni pin già collegati a vari componenti, in questo modo uno dei pin da me selezionati come input (tasto) era sempre a massa quindi faceva aumentare la variabile contPuls in modo velocissimo e mi dava una combinazione di tasti premuti che era sempre la stessa ad esempio 1-1-1 così nell'ultimo ciclo quando la sequenza dei led e quella dei pulsanti premuti non era mai la stessa tranne nel caso precedente. Tutto questo è successo perché non ho guardato bene lo schema della demoboard ma ero andato dritto a scrivere il codice e credevo che l'errore fosse contenuto proprio qui, nel codice, fossilizzandomi in cerca di una possibile soluzione.
Lo so che in questo momento vorreste picchiarmi per avervi fatto perdere del tempo ma vi prego non fatelo :oops:
Ringrazio Foto UtenteTardoFreak per avermi aiutato con il codice per i numeri casuali e ringrazio Foto UtenteWALTERmwp per i consigli che mi ha dato e per tutta la pazienza che ha avuto :D
Avatar utente
Foto UtenteNick01
15 4
 
Messaggi: 31
Iscritto il: 29 mag 2015, 16:13

1
voti

[17] Re: PIC16F1829 problema con numeri random

Messaggioda Foto UtenteWALTERmwp » 3 giu 2015, 16:55

Nick01 ha scritto:(...) e ringrazio WALTERmwp (...)
prego, figurati, mi ha fatto piacere.

Comunque si, la prossima volta presta maggiore attenzione perché in tal caso non hai messo a disposizione le informazioni corrette, anzi (vedi appunto tuo schema e "collegamenti vari" demo board ... ).

Però la dama Galadriel mi ha dato in dono il suo bacile ( ... gli altri usano le sfere di cristallo) che funziona ma sono io ancora incapace di utilizzarlo al meglio, anche se ci sono andato molto vicino ...
WALTERmwp ha scritto:i) a livello hardware qualcosa non funziona
ii) il primo while deve essere/viene eseguito se RA5 corrisponde a 1 (magari è sempre a zero)

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
29,4k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8736
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

Precedente

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti