Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

errori in MPLAB

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[31] Re: errori in MPLAB

Messaggioda Foto Utenteandrew93 » 26 mar 2012, 19:16

Grazie mille, allora userò SUBLW o SUBWF che mi viene più facile..
Grazie ancora :ok: :ok: :ok:

Andrew
Avatar utente
Foto Utenteandrew93
5 1 5
Frequentatore
Frequentatore
 
Messaggi: 104
Iscritto il: 8 gen 2011, 18:58
Località: castelmarte

0
voti

[32] Re: errori in MPLAB

Messaggioda Foto Utenteandrew93 » 16 apr 2012, 19:54

Dopop notevoli sforzi sono riuscito a caricare il programma sul PIC però non gira bene..... :(
perché il devitore che mo fa passare dalla folle alla prima funziona come deve, però nel momento in cui premo il pulsante il pulsantino per passare in seconda mi va in sesta, appena lo lascio torna in prima. Non riesco a capire cosa diavolo possa essere, qualcuno ha qualche idea??? Che sia il clock da 4MHz troppo veloce, nel senso che il pulsantino non faccia in tempo a staccare che il programma è già arrivato in fondo???

Andrew
Avatar utente
Foto Utenteandrew93
5 1 5
Frequentatore
Frequentatore
 
Messaggi: 104
Iscritto il: 8 gen 2011, 18:58
Località: castelmarte

0
voti

[33] Re: errori in MPLAB

Messaggioda Foto Utenteandrew93 » 1 mag 2012, 17:11

Tornando al problema con la conversione in digitale, per provare se il convertitore funziona correttamente ho provato ad editare il listato dato dai datasheet, ma non funziona. :( :( :(
L'ingresso analogico variabile l'ho fatto con un trimmer, mentre la combinazione d'uscita è realizzata con 10 I/O con altrettanti transistor che comandano altrettanti led. Questo per non sovraccaricare il PIC.
qui di seguito ecco il listato:
Codice: Seleziona tutto
main:
      BANKSEL      TRISD
      CLRF      TRISD
      BANKSEL      TRISB
      CLRF      TRISB
      BANKSEL      ADCON1
      MOVLW      B'10000000'
      MOVWF      ADCON1
      BANKSEL      TRISA
      BSF         TRISA,0
      BANKSEL      ANSEL
      BSF         ANSEL,0
      BANKSEL      ADCON0
      MOVLW      B'01000001'
      MOVWF      ADCON0
      BANKSEL      30H
      MOVLW      0FH
      MOVWF      30H
      DECFSZ      30H
      GOTO      $-1
      BSF         ADCON0,GO
      BTFSC      ADCON0,GO
      GOTO      $-1
      BANKSEL      ADRESH
      MOVF      ADRESH,W
      MOVWF      PORTD
      BANKSEL      ADRESL
      MOVF      ADRESL,W
      MOVWF      PORTB
      END                     ; directive 'end of program'


E' senza commenti perché l'ho fatto di fretta...
Qualcuno sa dirmi perche anche se l'ho copiato dai datasheet il programma non funziona??? Può essere il PIC bruciato???

Grazie per la disponibilità

Andrew
Ultima modifica di Foto Utenteadmin il 23 ago 2012, 10:24, modificato 1 volta in totale.
Motivazione: inserito il codice assembly tra i tag code e segnalati i punti di domanda di troppo.
Avatar utente
Foto Utenteandrew93
5 1 5
Frequentatore
Frequentatore
 
Messaggi: 104
Iscritto il: 8 gen 2011, 18:58
Località: castelmarte

0
voti

[34] Re: errori in MPLAB

Messaggioda Foto Utenteandrew93 » 7 mag 2012, 16:58

Foto UtentePaolino mi disiace scomodarti ancora, ma avrei bisogno del tuo aiuto visto che non rieso ad uscire dal problema del convertitore A/D. Il fatto è che penso non vada il convertitore perché dopo la conversione il programma deve fare il confronto con il metodo che mi avevi consigliato tu della sottrazione e questo funziona, come funziona la parte successiva e cioè l'accensione di 4 led secondo una data sequenza. Dico che non va il convertitore perché se è sopra una certa soglia devono accendersi secondo una sequenza, mentre se è sotto secondo la sequenza è l'esatto opposto. sinceramente io è una settimana che ci sbatto la test ma non sono ancora arrivato ad una, spero tu possa aiutarmi a risolvere questo dannato problema........
Ecco il listato corretto e rivisto ma funzionante per metà:

Codice: Seleziona tutto
   BANKSEL      PORTE
      CLRF              PORTE         ; inizializzazione porte
      BANKSEL      ANSEL
      CLRF              ANSEL         
      BANKSEL      TRISE
      CLRF              TRISE         ; portE uscita
      BSF         TRISE,RE2      ; RE2 impostato come ingresso
      BANKSEL      ANSELH
      CLRF              ANSELH         ; canali analogici da 8 a 14 come digitali
      BANKSEL      ANSEL
      CLRF              ANSEL         ; canali analogici da 0 a 7 come digitali
      BSF         ANSEL,ANS7      ; ingresso analogico= ANS7
      BANKSEL      ADCON0
      MOVLW      B'00011100'      ; selezione canale ANS7
      MOVWF      ADCON0
      BANKSEL      ADCON0         
      BSF         ADCON0,ADCS0   ; selezione divisore di frequenza: Fosc/8
      BANKSEL      ADCON0
      BSF         ADCON0,ADON      ; abilitazione ADC
      BANKSEL      ADCON1
      BSF         ADCON1,ADFM      ; risultato giustificato a destra
      BANKSEL      20H
      MOVLW      15H
      MOVWF      20H
      DECFSZ      20H,F         
      GOTO      $-1            ; loop di ritardo per acquisizione 20uS
      BANKSEL      ADCON0
      BSF         ADCON0,GO      ; avvia la conversione
      BANKSEL      ADCON0
      BTFSC      ADCON0,GO      ; attendi la fine della conversione
      GOTO      $-1
      BANKSEL      ADRESH
      MOVF      ADRESH,W
      MOVWF      110H         ; sposta la parte alta della conversione in 110h
      BANKSEL      ADRESL
      MOVF      ADRESL,W
      MOVWF      190H         ; sposta la parte bessa della conversione in 190h   
comp   
      BANKSEL      110H
      MOVLW      00H
      SUBWF      110H    ; confronto tra il risultato dell'ADC e la parte alta della soglia
      BANKSEL      STATUS
      BTFSS      STATUS,C      ; test C: se 0 vai a sopra, se 1 vai a sotto
      GOTO      sopra
      GOTO      sotto
sotto
      BANKSEL      190H
      MOVLW      1FH
      SUBWF      190H         ; confronto tra risultato ADC e parte bassa soglia
      BANKSEL      STATUS
      BTFSS      STATUS,C      ; test C: se 0 vai a sopra1, se 1 vai a sotto1
      GOTO      sopra
      GOTO      sotto1   
sotto1
      BANKSEL      PORTD
      CLRF              PORTD      
      BANKSEL      TRISD
      CLRF              TRISD         ; portd impostato come uscita
      BANKSEL      PORTD
      BCF         PORTD,RD4      ; uscita bassa
      BSF         PORTD,RD2      ; uscita alta
      BSF         PORTD,RD6      ; uscita alta
      CALL              ritardo
      BANKSEL      PORTD
      CLRF              PORTD
      BANKSEL      PORTD
      BCF         PORTD,RD2      ; uscita bassa
      BSF         PORTD,RD0      ; uscita alta
      BSF         PORTD,RD6      ; uscita alta
      CALL              ritardo
      BANKSEL      PORTD
      CLRF              PORTD
      BANKSEL      PORTD
      BCF         PORTD,RD6      ; uscita bassa
      BSF         PORTD,RD0      ; uscita alta
      BSF         PORTD,RD4      ; uscita alta
      CALL              ritardo
      BANKSEL      PORTD
      CLRF              PORTD
      BANKSEL      PORTD
      BCF         PORTD,RD0      ; uscita bassa
      BSF         PORTD,RD2      ; uscita alta
      BSF         PORTD,RD4      ; uscita alta
      CALL              ritardo
      BANKSEL      40H
      INCF              40H,F         ; incrementa registro 40h
      MOVLW      64H            
      XORWF      40H,W         ; confronto tra registro 40h e accumulatore
      BTFSS      STATUS,Z      ; test Z: se 0 vai a sotto1, se 1 vai a main
      GOTO      sotto1
      GOTO      main
sopra
      BANKSEL      190H
      MOVLW      1FH
      SUBWF      190H         ; confronto tra parte bassa risultato ADC e soglia
      BANKSEL      STATUS
      BTFSS      STATUS,C      ; test C: se 0 vai a sotto, se 1 vai a sotto1
      GOTO      sotto
      GOTO      sopra1
sopra1
      BANKSEL       PORTD
      CLRF              PORTD
      BANKSEL      TRISD
      CLRF              TRISD         ; portd impostato come uscita
      BANKSEL      PORTD
      BCF         PORTD,RD6      ; uscita bassa
      BSF         PORTD,RD2      ; uscita alta
      BSF         PORTD,RD4      ; uscita alta
      CALL              ritardo1
      BANKSEL      PORTD
      CLRF              PORTD
      BANKSEL      PORTD
      BCF         PORTD,RD2      ; uscita bassa
      BSF         PORTD,RD0      ; uscita alta
      BSF         PORTD,RD4      ; uscita alta
      CALL              ritardo1
      BANKSEL      PORTD
      CLRF              PORTD
      BANKSEL      PORTD
      BCF         PORTD,RD4      ; uscita bassa      
      BSF         PORTD,RD0      ; uscita alta
      BSF         PORTD,RD6      ; uscita alta
      CALL              ritardo1
      BANKSEL      PORTD
      CLRF              PORTD
      BANKSEL      PORTD
      BCF         PORTD,RD0      ; uscita bassa
      BSF         PORTD,RD2      ; uscita alta
      BSF         PORTD,RD6      ; uscita alta
      CALL              ritardo1
      BANKSEL      50H
      INCF              50H,F         ; incemente registro 50h
      MOVLW      64H
      XORWF      50H,W         ; confronto tra registro 50h e accumulatore
      BTFSS      STATUS,Z      ; test Z: se 0 vai a a sopra1, se 1 vai a main
      GOTO      sopra1
      GOTO      main            
ritardo            ; subroutine di ritardo per visualizzare la combinazione d'uscita
      BANKSEL      30H
      MOVLW      0FFH
      MOVWF      31H
rit1           MOVWF             30H
      DECFSZ      30H,F
      GOTO      $-1
      DECFSZ      31H,F
      GOTO      rit1
      RETURN   
ritardo         ; subroutine di ritardo per visualizzare la combinazione d'uscita
      BANKSEL      60H
      MOVLW      0FFH
      MOVWF      61H
rit2           MOVWF      60H
      DECFSZ      60H,F
      GOTO      $-1
      DECFSZ      61H,F
      GOTO      rit2
      RETURN   
      END                        ; fine programma   


Grazie mille per la disponibilità dimostrata fino ad ora e per gli ottimi consigli datimi, spero tu possa farlo anche in questo caso... :D :D :D

Andrew
Avatar utente
Foto Utenteandrew93
5 1 5
Frequentatore
Frequentatore
 
Messaggi: 104
Iscritto il: 8 gen 2011, 18:58
Località: castelmarte

0
voti

[35] Re: errori in MPLAB

Messaggioda Foto UtentePaolino » 7 mag 2012, 19:49

Il codice è piuttosto lungo, mi ci vuole un po' per leggerlo e questa settimana sono davvero preso.
Tieni conto che qui c'è una guida sulla conversione A/D. Con in mano il datasheet del tuo PIC e con la guida che ti ho suggerito, verifica se le impostazioni del convertitore sono corrette.

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

[36] Re: errori in MPLAB

Messaggioda Foto Utenteandrew93 » 7 mag 2012, 19:52

La guida l'ho già letta e seguita passo passo, con i datasheet in mano eppure l'ADC continua a non andare... :( :( :( :(
Attendo tanto non c'è problema, appena riesci a dargli un occhi fammi sapere qualcosa.

Grazie mille della tua disponibilità :-) :-)

Andrew
Avatar utente
Foto Utenteandrew93
5 1 5
Frequentatore
Frequentatore
 
Messaggi: 104
Iscritto il: 8 gen 2011, 18:58
Località: castelmarte

0
voti

[37] Re: errori in MPLAB

Messaggioda Foto UtentePaolino » 7 mag 2012, 19:55

Prova ad utilizzare MPLAB SIM, nel frattempo. Provi a simulare con dei valori analogici che puoi inserire tu a mano.

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

[38] Re: errori in MPLAB

Messaggioda Foto Utenteandrew93 » 7 mag 2012, 19:58

si possono inserire dei valori analogico??????? :shock: :shock: :shock:
Come si fa?????
Ultima modifica di Foto Utenteadmin il 23 ago 2012, 10:26, modificato 1 volta in totale.
Motivazione: E' in genere sufficiente un punto di domanda.
Avatar utente
Foto Utenteandrew93
5 1 5
Frequentatore
Frequentatore
 
Messaggi: 104
Iscritto il: 8 gen 2011, 18:58
Località: castelmarte

1
voti

[39] Re: errori in MPLAB

Messaggioda Foto UtentePaolino » 8 mag 2012, 8:06

Ma lo sai usare MPLAB SIM?

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

[40] Re: errori in MPLAB

Messaggioda Foto Utenteandrew93 » 8 mag 2012, 14:56

Certo che lo so usare, è solo che non sapevo si potesse inserire un valore analogco. Ancora adesso non capisco come fare per dargli un ingresso da convertire. Ho solo provato a caricare i registri di quello che dovrebbe essere il risultato della conversione e il resto del programma gira perfettamente. Ora, non so se è questo che intendevi tu, se no potresti illustrarmi brevemente come fare??? Ovviamente se hai tempo per farlo... ;-) ;-)

Grazie mille

Andrew
Avatar utente
Foto Utenteandrew93
5 1 5
Frequentatore
Frequentatore
 
Messaggi: 104
Iscritto il: 8 gen 2011, 18:58
Località: castelmarte

PrecedenteProssimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti