Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Da pic16f690 a pic18f45k22

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Da pic16f690 a pic18f45k22

Messaggioda Foto Utentegyruss » 27 gen 2012, 2:53

Ciao a tutti.
Volendo complicarmi, non poco, la vita ho acquistato una demo board easy PIC v7 di mikroe.
La stessa monta a bordo in origine il pic18f45k22 che dal datasheet mi è sembrato un micro piuttosto completo a livello di I/O, timer e quant' altro. Prima della "easy" utilizzavo il pickit2 con annesso pic16f690.
Vengo direttamente al problema.
Non riesco ad adattare un programmino funzionante per il 16f690 sul 18f45k22. Si tratta di far accendere 8 led sulle uscite RB0...RB7 e farli spegnere tenendo premuti contemporaneamente 2 pulsanti rispettivamente su RC6 e RC7 trascorsi circa 3 secondi.
Utilizzando l' assembler in mplab, funziona correttamente con mplab sim il simulatore integrato. Quando carico il programma nel pic18, si comporta in maniera strana, praticamente i led si spengono da soli dopo 3 secondi ignorando lo stato degli ingressi dove sono collegati i pulsanti. Il codice è questo:
Codice: Seleziona tutto
;*****************************************************************************************************************
            #include       <P18F45K22.INC>
   
                 org          00h
;*****************************************************************************************************************         
;Ciclo di delay pari a 3 sec.  0,33 Hz
;*****************************************************************************************************************
            
TEM         equ         50
TEM1         equ         51
TEM2         equ         52


            
            movlw         b'11111111'
            movwf         TRISA
            movlw         b'00000000'
            movwf         TRISB
            movlw         b'11000000'
            movwf         TRISC
            
            clrf            PORTB
            
            clrf            ANSELA
            clrf            ANSELB
            clrf            ANSELC

            
            movlw         b'11111111'
            movwf         PORTB


            
START:

            btfss         PORTC,6
            call            DELAY         
            btfss         PORTC,7
            call            DELAY         
            goto         FINE
               
            

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;*********************************************************************************************************************
;            DELAY PARI A 3 Sec.
;*********************************************************************************************************************
DELAY:            
            
            
            movlw         b'01111111'         
            movwf         TEM2
CHARGE1
            movlw         b'11111111'         
            movwf         TEM1
CHARGE
            movlw         b'11111111'         
            movwf         TEM

            btfsc         PORTC,7            ;Controllo che RC7 sia ancora premuto
            bra            START
            btfsc         PORTC,6
            bra            START               ;Controllo che RC6 sia ancora premuto
            
DELAY1            
            decfsz          TEM, F
            goto         DELAY1
            decfsz          TEM1, F
            goto         CHARGE
            decfsz         TEM2,F
            goto         CHARGE1
            

            
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX            
         
            

            movlw         b'00000000'
            movwf         PORTB            

FINE:
            goto         START

            end

Per programmare il pic18 creo prima il file.hex con mplab e lo importo in MicroProg Suite for PIC di mikroe. Credo di aver sistemato correttamente tutti i jumper della board e di aver configurato adeguatamente i fuses in MicroProg.
Grazie, Marco.
Avatar utente
Foto Utentegyruss
50 1 3
New entry
New entry
 
Messaggi: 75
Iscritto il: 26 mar 2010, 13:01
Località: Torino

0
voti

[2] Re: Da pic16f690 a pic18f45k22

Messaggioda Foto Utentegyruss » 27 gen 2012, 3:15

Chido scusa, il codice che utilizzo è questo.
Codice: Seleziona tutto
;*****************************************************************************************************************
            #include       <P18F45K22.INC>
   
                 org          00h
;*****************************************************************************************************************         
;Ciclo di delay pari a 3 sec.  0,33 Hz con quarzo da 8MHz e PLL x4
;*****************************************************************************************************************
            
TEM         equ         50
TEM1         equ         51
TEM2         equ         52


            
            movlw         b'11111111'
            movwf         TRISA
            movlw         b'00000000'
            movwf         TRISB
            movlw         b'11000000'
            movwf         TRISC
            
            clrf            PORTB
            
            clrf            ANSELA
            clrf            ANSELB
            clrf            ANSELC

            
            movlw         b'11111111'
            movwf         PORTB


            
START:

            btfsc         PORTC,6
            goto         FINE         
            btfsC         PORTC,7
                  
            goto         FINE
               
            

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;*********************************************************************************************************************
;            DELAY PARI A 3 Sec.
;*********************************************************************************************************************
DELAY:            
            
            
            movlw         b'01111111'         
            movwf         TEM2
CHARGE1
            movlw         b'11111111'         
            movwf         TEM1
CHARGE
            movlw         b'11111111'         
            movwf         TEM

            btfsc         PORTC,7            ;Controllo che RC7 sia ancora premuto
            goto         START
            btfsc         PORTC,6
            goto         START               ;Controllo che RC6 sia ancora premuto
            
DELAY1            
            decfsz          TEM, F
            goto         DELAY1
            decfsz          TEM1, F
            goto         CHARGE
            decfsz         TEM2,F
            goto         CHARGE1
            

            
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX            
         
            

            movlw         b'00000000'
            movwf         PORTB            

FINE:
            goto         START

            end


Aggiungo che il micro ha collegato un quarzo da 8 MHz. :oops:
Ciao, Marco.
Avatar utente
Foto Utentegyruss
50 1 3
New entry
New entry
 
Messaggi: 75
Iscritto il: 26 mar 2010, 13:01
Località: Torino

0
voti

[3] Re: Da pic16f690 a pic18f45k22

Messaggioda Foto Utentesimo85 » 27 gen 2012, 3:31

gyruss ha scritto:Non riesco ad adattare un programmino funzionante per il 16f690 sul 18f45k22.

:-M
funziona correttamente con mplab sim il simulatore integrato.

Non ho mai usato quel simulatore, ma in ogni caso non sono mai affidabili al 100%.

Ciao
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[4] Re: Da pic16f690 a pic18f45k22

Messaggioda Foto Utentegyruss » 27 gen 2012, 3:36

Grazie Gohan.
Mi sono sempre affidato al simulatore di mplab perché in precedenza non ho avuto problemi, mi è sembrato un simulatore affidabile.
Ciao, Marco.
Avatar utente
Foto Utentegyruss
50 1 3
New entry
New entry
 
Messaggi: 75
Iscritto il: 26 mar 2010, 13:01
Località: Torino

0
voti

[5] Re: Da pic16f690 a pic18f45k22

Messaggioda Foto Utentesimo85 » 27 gen 2012, 3:40

Non ho osservato il datasheet di quel 18F, ma quello che mi insospettisce è
gyruss ha scritto:Non riesco ad adattare un programmino funzionante per il 16f690 sul 18f45k22.

Il che non sembra poi così strano :-)
Riscrivi il codice facendo riferimento al datasheet del PIC con il quale vuoi lavorare.

O_/
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[6] Re: Da pic16f690 a pic18f45k22

Messaggioda Foto Utentegyruss » 27 gen 2012, 3:45

Credevo di averlo già fatto. :(
Il programma che ho inserito precedentemente dovrebbe averne tenuto conto.
Non ho preso quello del pic16 così come era e caricato nel pic18.
Lo ho adattato.
Avatar utente
Foto Utentegyruss
50 1 3
New entry
New entry
 
Messaggi: 75
Iscritto il: 26 mar 2010, 13:01
Località: Torino

0
voti

[7] Re: Da pic16f690 a pic18f45k22

Messaggioda Foto Utentesimo85 » 27 gen 2012, 4:39

OK. Una domanda.. I bit di configurazione li hai settati in MPLAB vero?
Nonostante l'ora ho osservato il tuo codice e se ho capito bene bene, si tratta di spegnerli definitivamente dopo i 3s, ed a quanto vedo non richiami un ritardo per i rimbalzi dei pulsanti o almeno così mi sembra di osservare.

Qui hai un codice da cui prendere il ritardo per i rimbalzi (DELAY20ms) e, se lo osservi con attenzione, hai una implementazione di un ritardo di controllo di 2s, vedi ad esempio T2I_LOOP, che fa uso dello stessa implementazione di ritardo per i rimbalzi..
Si tratta di adattare la variabile CNTR per un valore all'incirca uguale a 3s/0.02s, oltre ai pulsanti del PORTC del tuo PIC.

Ciao
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[8] Re: Da pic16f690 a pic18f45k22

Messaggioda Foto UtenteTardoFreak » 27 gen 2012, 11:55

Mi permetto di dare un suggerimento per le migrazioni, qualsiasi esse siano: quando si prova un micro che non si è mai utilizzato il programma deve essere il più semplice possibile.
Io di solito ci metto due istruzioni: una per portare i bit di una porta (o uno solo) a 1 e poi a 0 in un ciclo infinito. Poi controllo con l' oscilloscopio. Ritardi ed altre cose le metto dopo.
L' idea è quella di eliminare il maggior numero di variabili.
IMHO
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[9] Re: Da pic16f690 a pic18f45k22

Messaggioda Foto Utentegyruss » 28 gen 2012, 15:06

Aggiungo alcuni dettagli relativi all' hardware e impostazione dei fuses.
Gli ingressi RC6 e RC7 dove sono presenti i pulsanti, hanno resistenze di pull-up, quindi la loro pressione chiude verso massa.
Tenendo conto che il micro viene programmato non direttamente da mplab ma attraverso MicroProg Suite for PIC, ho fatto diversi tentativi coi fuses. Mplab permette di settarli dal menù Configure - Configuration Bits ma non li rende visibili nel codice. Ho importato il file .Hex in MicroProg ed o lasciato inalterati i fuses impostabili da qui. In un secondo momento ho invece copiato quelli impostati in mplab e, sia prima che dopo, la differenza non ha sortito nessun cambiamento nel comportamento del micro.
Altra cosa, a mio modesto parere, non credo che il problema sia derivante dalla routine di ritardo perché sembrerebbe l' unica cosa funzionante e nemmeno il fatto di prevedere un antirimbazo per i pulsanti che credo non influisca in modo evidente causa tempo di delay piuttosto lungo ma penso sia una "finezza" nel codice.
Ciò che a me sfugge è come mai il micro non tenga conto dello stato dei pulsanti ma lui "da solo" attivi le uscite dei led e dopo 3 secondi le metta a zero sempre "da solo".

Saluti, Marco.
Avatar utente
Foto Utentegyruss
50 1 3
New entry
New entry
 
Messaggi: 75
Iscritto il: 26 mar 2010, 13:01
Località: Torino

0
voti

[10] Re: Da pic16f690 a pic18f45k22

Messaggioda Foto Utentegyruss » 28 gen 2012, 22:58

Ho finalmente risolto il problema ma rimangono alcuni dubbi.
Ora il codice è funzionante. Ho soltanto spostato i 2 pulsanti da RC6 ed RC7 ad RC0 ed RC1.
Questo perché sul datasheet i pin RC0 e RC1 sono gli unici a non essere configurabili come analogici. Nonostante ciò non ho ancora capito come rendere "assolutamente" digitali RC6 e RC7. Probabilmente non ho considerato qualche registro che lo faccia ma voglio approfondire.

Saluti, Marco.
Avatar utente
Foto Utentegyruss
50 1 3
New entry
New entry
 
Messaggi: 75
Iscritto il: 26 mar 2010, 13:01
Località: Torino

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Google [Bot] e 2 ospiti