non funziona programmazione pic
- Login o registrati per inviare commenti
Ciao, ho trovato una bella differenza passare da un simulatore (PROTEUS) al vero, ho montato su una bredboard il PIC 18f4550 e grazie hai vostri consigli lo fatto riconoscere al programmatore pickit2 ora faccio il debag ma non riesco a far lampeggiare il led, qualche consiglio?
Mi è venuto un dubbio, dEvo mettere ugualmente una resistenza limitatrice di corrente all'uscita di RD0 per far lavorare il led?
Ecco il codice:
#include #pragma config FOSC = HS //OSC = HS Impostato per lavorare ad alta frequenza void main (void) { //Imposto PORTA tutti ingrrssi LATA = 0x00; //Imposto PORTB tutti ingrrssi LATB = 0x00; //Imposto PORTC tutti ingressi LATC = 0x00; //Imposto PORTD tutte uscite LATD = 0x00; //Imposto PORTE tutti ingrrssi LATE = 0x00; while (1) { //Ciclo infinito Grazie
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF
//WDT = OFF Disabilitato il Watchdog Timer
//LVT = OFF Disabilitato programmazione LVT
//PBADEN = OFF Disabilitato gli ingrassi analogici
TRISA = 0xFF;
TRISB = 0xFF;
TRISC = 0xFF;
TRISD = 0b00000000;
TRISE = 0xFF;
LATDbits.LATD0 = ~ LATDbits.LATD0 ; // Lampeggia Led
}
}
Ciao Guido, ciao Emanuele,
è vero che necessita di un minimo di delay tra le operazioni del ciclo infinito in modo da poter distinguere i cambiamenti ma dalla mia esperienza ciclando il led ON/OFF anche se moto velocemente, si dovrebbe vedere un minimo di luminosità(come un PWM con duty 50%)
Mi viene il dubbio che il clock non stia funzionando.
Io di solito prima di entrare nel ciclo infinito inserisco qualche istruzione che mi fa capire che il pic è almeno arrivato a quel punto del codice.
Secondo me per vedere se tutto funziona, inveec di far lampeggiare il led, ti conviene solo accenderlo. Se si accende allora puoi provare anche farlo lampeggiare. Se non si accende potrebbe essere n problema di inizializzazione o di FUSE.
Hai provato con il clock interno del PIC?
Facci sapere
Ciao
Che strano, se il codice lo testo con MPLAB 8.80 quando schiaccio il tasto di reset il led si spegne e non si riaccende piu, se il debug lo faccio con MPLABX premendo il tasto di reset funziona si accende e si spegne tutte le volte che voglio, ho provato a uscire dal compilatore lasciando il programmer inserito e funziona, non esegue il codice (non si accende il led) quando levo il progemmer e lo alimento con una pila e opportuno circuito (5V).
Qualche consiglio?
Grazie
OK, celo fatta, con MPLABX una volta fatto il bebug bisogna salvarlo col comando MAKE AND PROGRAM DEVICE, LO stacco metto l'alimentazione esterna e funziona.
Per vedre lampeggiare il led metto questo comando:
while (1) { //Ciclo infinito
LATDbits.LATD0 = ~ LATDbits.LATD0 ;
Delay100TCYx(1000);
}
il problema è che se metto uno zero in piu oppure in meno il led rimane acceso, come faccio per variare il lampeggio?
Premetto sono tutti esperimenti che faccio per testare il corretto funzionamento del pic.
Grazie
Verifica la capacità della libreria Delay.....
Secondo me ti conviene sempre utilizzare la soluzione separata.
Led_on
Delay
Led_off
Delay
Cosi gestisci meglio il duty cycle (variazione del lampeggio)
grazie per il suggerimento, lo faccio.
- Login o registrati per inviare commenti


















7 ore 37 min fa
Ho giocato un po con la versione demo di Proteus tempo fa, molto utile per sperimentare alcune cose, ma la realtà è comunque sempre ben diversa :)
Spesso le cose cambiano col passaggio dal laboratorio al funzionamento sul campo, figurati dal simulatore alla scheda reale.....
Comunque mi sembra di carpire al volo 2 errori:
1) la resistenza sul led ci va! (ma proteus funzionava senza?)
2) a che velicità hai intenzione di far lampeggiare il led..... ci vorrebbe un Delay nel loop infinito (oppure un occhio bionico :)
pin = 1
Delay ON
pin = 0
Delay OFF
I due delay possono essere uguali e cosi hai anche il controllo sia degli stati on-off del led, sia del duty cycle