Domanda MPLAB

Salve a tutti. Ho da poco iniziato a cimentarmi nella programmazione dei PIC, comprando il PicKit 2 comprensivo di MCU 16F690 e DemoBoard con 4 Led, 1 Switch e 1 Trimmer per effettuare semplici simulazioni. Ho scaricato MPLAB IDE versione

8.10 dal sito Microchip per effettuare la compilazione del codice assembler e la generazione del file Hex e fin qui tutto normale. Ho anche fatto semplici programmini perfettamente funzionanti dopo averli programmati direttamente sul PIC in questione, solo che facendo la simulazione con MPLAB SIM mi sono accorto che le cose non vanno come dovrebbero andare. Mi spiego meglio. Ho fatto un semplice programma (non mi prendete in giro ma sono alle prime armi!!!!) in cui premento lo switch si accende un led e ripremento lo stesso switch il led si spegne; il led sta sull'uscita RC0 mentre lo switch sta sull'ingresso RA3; sulla demoboard dopo la programmazione funziona perfettamente, ma nella simulazione ho visto che il registro PORTC dove c'è l'uscita del led, non avviene la commutazione, cioè rimane sempre al valore 0x00 anzichè commutare in 0x01. Ho fatto la prova anche con altri programmi di esempio inclusi nel kit ad esempio led lampeggiante e avviene sempre la stessa strana cosa: sulla demoboard funziona bene, mentre nella simulazione no. Come mai? C'è qualche parametro da cambiare e/o abilitare? Il problema adesso non mi preoccupa, ma se devo iniziare a fare programmi più complessi, con gestione di più uscite, la cosa può risultare fastidiosa se non addirittura ritenersi un problema. Grazie a chi saprà aiutarmi Un saluto Luca
Reply to
LuckyLuke
Loading thread data ...

LuckyLuke ha scritto:

Ciao Luca! Potrebbe essere dovuto al fatto che non hai settato la porta A come digitale. Mi spiego meglio: di default le porte A sono configurate come analogiche. Affinché siano digitali è sufficiente scrivere queste tre righe all'inizio del tuo sorgente:

banksel ADCON1 movlw 0x06 movwf ADCON1

Potrebbe anche essere che non hai messo un circuito antirimbalzo: un pulsante meccanico quando viene chiuso si chiude a balzelli, in un circuito elettrico poco importa, ma il microcontroller interpreta questi balzelli come continue pressioni del pulsante, dandoti quindi un risultato non proprio affidabile. Per questa cosa hai due soluzioni:

1) Dove leggi il pulsante inserisci un piccolo ritardo (diciamo qualche ms) e rileggi ancora; se è nel medesimo stato di premuto allora accendi o spegni il led, altrimenti ignori il segnale precedente. 2) inserisci un condensatore sul pulsante che si "mangi" questi impulsi non voluti, praticamente devi fare una cosa così: [FIDOCAD] MC 55 55 1 0 860 MC 35 40 1 0 080 MC 65 55 0 0 074 MC 35 35 3 0 010 MC 60 60 1 0 170 MC 60 75 0 0 040 LI 35 50 35 55 0 LI 35 55 40 55 0 LI 35 35 35 40 0 LI 55 55 65 55 0 LI 60 60 60 55 0 SA 60 55 0 TY 75 50 4 3 0 0 0 * Al PIC TY 40 40 4 3 0 0 0 * 10K LI 60 70 60 75 0 TY 65 65 4 3 0 0 0 * 100n

Ciao e buon divertimento! ;-)

Stefano

--
Stefano Martini (Italy)
WEB: http://www.lemming.it
Reply to
Stefano Martini

Ciao Stefano, grazie per la risposta. Forse non mi sono spiegato bene. Non funziona la simulazione, ma il circuito si. Dopo aver programmato il PIC con il PicKit2, alimentando la basetta il circuito funziona bene. Lo stesso programma fatto girare in simulazione con MPLAB SIM, dà quel problema delle porte. Ho provato a settare le porte in digitale ma non cambia nulla anche perchè ho visto che di default il PIC 16F690 le ha impostate già in digitale e non in analogico. Lo switch ha già di per se un circuito antirimbalzo con una resistenza ed un condensatore in configurazione tipo filtro passa-basso, quindi non è quello il problema anche perchè ripeto ancora una volta, in reale il curcuito funziona con lo switch. Penso sia da impostare qualche flag su MPLAB, ma non so quale!!!!! Spero in te Stefano e in qualche altra anima pia!!!! Grazie Ciao Luca

"Stefano Martini" ha scritto nel messaggio news:ggk0t4$f1e$ snipped-for-privacy@nnrp.ngi.it...

Reply to
LuckyLuke

LuckyLuke ha scritto:

Per usare i pin di input nel simulatore, devi usare lo "stimulus": Debugger-Stimulus-New Workbook-Async nella finestra clicchi nella prima caseella in alto a destra, scegli il pin che vuoi usare e premi enter. clicca nella seconda colonna accanto alla precedente e scegli il modo in cui verra' usato il pin. Poi cliccando nella colonna fire, vedrai cambiare lo stato del pin in oggetto secondo le tue necessita' e i tuoi settaggi. ciao Angelo

Reply to
marcoangelo.r

Ok quello già lo sapevo fare ma io intendo che non cambia stato l'uscita non l'ingresso!!! Per i pin di ingresso non c'è problema, cambiano stato con lo Stimulus, ma è il registro di uscita che non lo fa, ad esempio PORTC rimane fisso a 0x00 anche se il comportamento esatto dovrebbe essere 0x00->0x01->0x00-> ecc per un programma di accensione e spegnimento led con lo switch. RIPETO: dopo la programmazione sul PIC il comportamento REALE è giusto, funziona; è la SIMULAZIONE che non funziona!!

Ciao Luca

"marcoangelo.r" ha scritto nel messaggio news:492eabd6$0$41656$ snipped-for-privacy@reader4.news.tin.it...

Reply to
LuckyLuke

LuckyLuke ha scritto:

Ciao Luca, a questo punto ti direi di postare il firmware che hai creato, così gli diamo una occhiata.

Ciao!

--
Stefano Martini (Italy)
WEB: http://www.lemming.it
Reply to
Stefano Martini

a non

La simulazione la fai in "animate" ?

Reply to
SergioC

Le simulazioni le faccio passo passo. Cambia qualcosa rispetto ad animate? Il firmware creato è inutile postarlo tanto ho provato anche con altri firmware funzionanti scaricati ed è lo stesso....

"SergioC" ha scritto nel messaggio news: snipped-for-privacy@v4g2000yqa.googlegroups.com... > Ok quello già lo sapevo fare ma io intendo che non cambia stato l'uscita

La simulazione la fai in "animate" ?

Reply to
LuckyLuke

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.