Home Forum MICROCONTROLLORI PWM

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

Stai vedendo 4 articoli - dal 1 a 4 (di 4 totali)
  • Autore
    Articoli
  • #58670

    OPGUIDO
    Membro

    Ciao sto testando la frequenza di questo codice col multimetro settato sulla frequenza, uso un quarzo da 4 MHz con pic timer calculator impostando PRESCALER a 1:16 e POSTSCALER a 1:16 e il periodo a 255 mi da come frequenza 15.625 Hz invece il multimetro collegato al led porta RC1 mi segna quando premo RB4 243 Hz, è giusto oppure sbaglio qualche cosa?
    Ecco il codice:

    # include

    # include # include
    #include

    #pragma config FOSC = HS
    #pragma config WDT = OFF
    #pragma config LVP = OFF
    #pragma config PBADEN = OFF
    #pragma config CCP2MX = ON

    //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
    //CCP2MX = ON il modulo CCP è posto su RC1

    void main (void) {

    int i; //Variabile usata per creare un conteggio fittizio di pausa

    unsigned char period; //Periodo del segnale pwm

    int duty_cycle = 0; //Duty Cycle

    //Imposto PORTA tutti ingrrssi

    LATA = 0x00;
    TRISA = 0xFF;

    //Imposto PORTB tutti ingrrssi

    LATB = 0x00;
    TRISB = 0xFF;

    //Imposto PORTC tutti ingressi ad RC1 come uscita

    LATC = 0x00;
    TRISC = 0b11111101;

    //Imposto PORTD tutte uscite

    LATD = 0x00;
    TRISD = 0x00;

    //Imposto PORTE tutti ingrrssi

    LATE = 0x00;
    TRISE = 0xFF;

    EnablePullups (); //Abilito resistori di pullups

    while (1) { //Ciclo infinito

    if (PORTBbits.RB4 == 0) { //Controllo la pressione di RB4
    for (i=0; i<10000; i++) { //Pausa filtraggio spike
    }

    OpenTimer2 (TIMER_INT_OFF & T2_PS_1_16 & T2_POST_1_16 ); //Apro il timer2 per il pwm

    period = 255; //249Imposto una frequenza di 20KHz

    if (PORTBbits.RB4 == 0) { //Controllo la pressione di RB4

    OpenPWM2(period) ; //Apro il modulo pwm

    LATCbits.LATC1 = 0x01 ; //Accendo il Led 1
    }
    else {

    LATCbits.LATC1 = 0x00 ;

    ClosePWM2 () ; // Chiudo il modulo pwm
    }
    SetDCPWM2 (500); //Aggiorno il duty cycle
    }

    }

    }

    #71118

    Emanuele
    Keymaster

    Ti consiglio di utilizzare un oscilloscopio in quanto puoi vedere realmente come viene generata la forma d’onda ed analizzare anche il duty cycle per poi comprendere bene cosa (eventualmente) non va nel firmware.

    Il debug andrebbe fatto sempre con il supporto dell’oscilloscopio, con il tester la vedo dura ….

    #71121

    OPGUIDO
    Membro

    Con 200 Euro a disposizione mi consigli un oscilloscopio digitale?
    Grazie

    #71138

    LoryD
    Membro

    Per quella cifra ci prendi un Picoscope http://www.picotech.com/
    I migliori nel loro genere e più che sufficienti per un utilizzo hobbistico

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

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