Home
Accesso / Registrazione
 di 

PWM

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

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
}

}

}

ritratto di Emanuele
Online
Titolo: Moderator
Moderatore
Ultima visita:
10 min 39 sec fa
Utente dal: 28/07/2007
Messaggi: 1019
Utente PREMIUM
Debug con oscilloscopio

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 ....

ritratto di OPGUIDO
Offline
Titolo: User++
Utente++
Ultima visita:
1 anno 34 settimane fa
Utente dal: 11/06/2011
Messaggi: 58
Con 200 Euro a disposizione

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

ritratto di LoryD
Offline
Titolo: User
Utente
Ultima visita:
18 settimane 2 giorni fa
Utente dal: 28/07/2007
Messaggi: 2
Utente PREMIUM
Picoscope

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

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 14 utenti e 93 visitatori collegati.

Ultimi Commenti