Home Forum MICROCONTROLLORI non funziona programmazione pic

Questo argomento contiene 6 risposte, ha 3 partecipanti, ed è stato aggiornato da  OPGUIDO 2 anni, 10 mesi fa.

Stai vedendo 7 articoli - dal 1 a 7 (di 7 totali)
  • Autore
    Articoli
  • #58652

    OPGUIDO
    Membro

    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

    #71052

    Emanuele
    Keymaster

    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

    #71061

    fuzzzy
    Membro

    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

    #71068

    OPGUIDO
    Membro

    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

    #71069

    OPGUIDO
    Membro

    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

    #71079

    Emanuele
    Keymaster

    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)

    #71093

    OPGUIDO
    Membro

    grazie per il suggerimento, lo faccio.

Stai vedendo 7 articoli - dal 1 a 7 (di 7 totali)

Devi aver eseguito l’accesso per poter rispondere a questa discussione.