Home
Accesso / Registrazione
 di 

non funziona programmazione pic

6 risposte [Ultimo post]
ritratto di OPGUIDO
Offline
Titolo: User++
Utente++
Ultima visita:
1 anno 40 settimane fa
Utente dal: 11/06/2011
Messaggi: 58

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
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF

//OSC = HS Impostato per lavorare ad alta frequenza
//WDT = OFF Disabilitato il Watchdog Timer
//LVT = OFF Disabilitato programmazione LVT
//PBADEN = OFF Disabilitato gli ingrassi analogici

void main (void) {

//Imposto PORTA tutti ingrrssi

LATA = 0x00;
TRISA = 0xFF;

//Imposto PORTB tutti ingrrssi

LATB = 0x00;
TRISB = 0xFF;

//Imposto PORTC tutti ingressi

LATC = 0x00;
TRISC = 0xFF;

//Imposto PORTD tutte uscite

LATD = 0x00;
TRISD = 0b00000000;

//Imposto PORTE tutti ingrrssi

LATE = 0x00;
TRISE = 0xFF;

while (1) { //Ciclo infinito
LATDbits.LATD0 = ~ LATDbits.LATD0 ; // Lampeggia Led
}
}

Grazie

ritratto di Emanuele
Offline
Titolo: Moderator
Moderatore
Ultima visita:
30 min 5 sec fa
Utente dal: 28/07/2007
Messaggi: 1022
Utente PREMIUM
Simulatori.....

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

ritratto di fuzzzy
Offline
Titolo: User+
Utente+
Ultima visita:
2 settimane 3 giorni fa
Utente dal: 20/11/2008
Messaggi: 17
Utente PREMIUM
Ciao Guido, ciao Emanuele, è

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

ritratto di OPGUIDO
Offline
Titolo: User++
Utente++
Ultima visita:
1 anno 40 settimane fa
Utente dal: 11/06/2011
Messaggi: 58
Che strano, se il codice lo

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

ritratto di OPGUIDO
Offline
Titolo: User++
Utente++
Ultima visita:
1 anno 40 settimane fa
Utente dal: 11/06/2011
Messaggi: 58
OK, celo fatta, con MPLABX

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

ritratto di Emanuele
Offline
Titolo: Moderator
Moderatore
Ultima visita:
30 min 5 sec fa
Utente dal: 28/07/2007
Messaggi: 1022
Utente PREMIUM
Libreria Delay

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)

ritratto di OPGUIDO
Offline
Titolo: User++
Utente++
Ultima visita:
1 anno 40 settimane fa
Utente dal: 11/06/2011
Messaggi: 58
grazie per il suggerimento,

grazie per il suggerimento, lo faccio.

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ultimi Commenti