Grazie.
- Codice: Seleziona tutto
#include <p18f4550.h>
#include <PWM.h>
#include <timers.h>
#include <portb.h>
//Variabili usate per definire i pulsanti e la freq. dei for dei pulsanti
#define BT0 PORTAbits.RA0
#define z0 300
#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 pulsante0 (void); // Dichiaro la funzione del BT0
void set_duty_cycle (int duty_cycle); //void set_duty_cycle (int duty_cycle);
int sine[] = {250,299,346,389,427,458,481,495,500,495,481,458,427,389,346,299,250,201,154,111,73,42,19,5,0,5,19,42,73,111,154,201};
// Repeat the sample for x time
// sampling frequency must be changed to keep analog signal frequency costnat
const unsigned char REPEATING_FACTOR = 1;//3 numero ripetizioni standard
int i; //Variabile usata per creare un conteggio fittizio di pausa
unsigned char period; //Periodo del segnale PWM
static unsigned char sample = 0;
static unsigned char repeat = 0;
void main (void) {
//Imposto PORTA tutti ingrrssi
LATA = 0x00;
TRISA = 0xFF;
ADCON1 = 0x0F; // Imposto PORTA come I/O
//Imposto PORTB tutti ingrrssi
LATB = 0x00;
TRISB = 0xFF;
//Imposto PORTC tutti ingressi ad RC1 come uscita
LATC = 0x00;
TRISC = 0b11111101;
//Imposto PORTD tutti ingrrssi
LATD = 0x00;
TRISD = 0xFF;
//Imposto PORTE tutti ingrrssi
LATE = 0x00;
TRISE = 0xFF;
ADCON1 = 0x0F; // Imposto PORTA come I/O
EnablePullups (); //Abilito resistori di pullups
OpenTimer2 (TIMER_INT_OFF & T2_PS_1_16 & T2_POST_1_16 ); //Apro il timer2 per il PWM
while (1) { //Ciclo infinito (Va messo nel main davanti alle funzioni, il programma gira).
pulsante0 (); //Richiama nel main la funzione pulsante0
}//While
}//main
void pulsante0 (void) { //Funzione del BT0
if (repeat == REPEATING_FACTOR) {
repeat = 0;
sample++;
}
if (sample > 31) {
sample = 0;
}
if (BT0 == 0){ //Controllo la pressione per assegnare il valore di D0
if (PORTBbits.RB0 == 0) { //Controllo la pressione di RB
for (i=0; i<z0; i++) { //Pausa filtraggio spike (10000 conteggio standard)
}
period = 237; // Imposto una frequenza di 262Hz DO centrale
if (PORTBbits.RB0 == 0) { //Controllo la pressione di RB
OpenPWM2(period) ; //Apro il modulo PWM
set_duty_cycle (sine[sample]);
repeat++;
LATCbits.LATC1 = 0x01 ; //Accendo il Led 1
}
else {
LATCbits.LATC1 = 0x00 ;
ClosePWM2 () ; // Chiudo il modulo PWM
}
}
if (PORTBbits.RB1 == 0) { //Controllo la pressione di RB
for (i=0; i<z0; i++) { //Pausa filtraggio spike (10000 conteggio standard)
}
period = 224; // (222) Imposto una frequenza di 277Hz DO #
if (PORTBbits.RB1 == 0) { //Controllo la pressione di RB
OpenPWM2(period) ; //Apro il modulo PWM
set_duty_cycle (sine[sample]);
repeat++;
LATCbits.LATC1 = 0x01 ; //Accendo il Led 1
}
else {
LATCbits.LATC1 = 0x00 ;
ClosePWM2 () ; // Chiudo il modulo PWM
}
}
if (PORTBbits.RB2 == 0) { //Controllo la pressione di RB
for (i=0; i<z0; i++) { //Pausa filtraggio spike (10000 conteggio standard)
}
period = 212; // Imposto una frequenza di 294Hz RE centrale
if (PORTBbits.RB2 == 0) { //Controllo la pressione di RB
OpenPWM2(period) ; //Apro il modulo PWM
set_duty_cycle (sine[sample]);
repeat++;
LATCbits.LATC1 = 0x01 ; //Accendo il Led 1
}
else {
LATCbits.LATC1 = 0x00 ;
ClosePWM2 () ; // Chiudo il modulo PWM
}
}
if (PORTBbits.RB3 == 0) { //Controllo la pressione di RB
for (i=0; i<z0; i++) { //Pausa filtraggio spike (10000 conteggio standard)
}
period = 201; // Imposto una frequenza di 311Hz RE#
if (PORTBbits.RB3 == 0) { //Controllo la pressione di RB
OpenPWM2(period) ; //Apro il modulo PWM
set_duty_cycle (sine[sample]);
repeat++;
LATCbits.LATC1 = 0x01 ; //Accendo il Led 1
}
else {
LATCbits.LATC1 = 0x00 ;
ClosePWM2 () ; // Chiudo il modulo PWM
}
}
if (PORTBbits.RB4 == 0) { //Controllo la pressione di RB
for (i=0; i<z0; i++) { //Pausa filtraggio spike (10000 conteggio standard)
}
period = 189; // Imposto una frequenza di 330Hz MI
if (PORTBbits.RB4 == 0) { //Controllo la pressione di RB
OpenPWM2(period) ; //Apro il modulo PWM
set_duty_cycle (sine[sample]);
repeat++;
LATCbits.LATC1 = 0x01 ; //Accendo il Led 1
}
else {
LATCbits.LATC1 = 0x00 ;
ClosePWM2 () ; // Chiudo il modulo PWM
}
}
if (PORTBbits.RB5 == 0) { //Controllo la pressione di RB
for (i=0; i<z0; i++) { //Pausa filtraggio spike (10000 conteggio standard)
}
period = 179; // Imposto una frequenza di 349Hz FA
if (PORTBbits.RB5 == 0) { //Controllo la pressione di RB
OpenPWM2(period) ; //Apro il modulo PWM
set_duty_cycle (sine[sample]);
repeat++;
LATCbits.LATC1 = 0x01 ; //Accendo il Led 1
}
else {
LATCbits.LATC1 = 0x00 ;
ClosePWM2 () ; // Chiudo il modulo PWM
}
}
if (PORTBbits.RB6 == 0) { //Controllo la pressione di RB
for (i=0; i<z0; i++) { //Pausa filtraggio spike (10000 conteggio standard)
}
period = 169; // Imposto una frequenza di 370Hz FA#
if (PORTBbits.RB6 == 0) { //Controllo la pressione di RB
OpenPWM2(period) ; //Apro il modulo PWM
set_duty_cycle (sine[sample]);
repeat++;
LATCbits.LATC1 = 0x01 ; //Accendo il Led 1
}
else {
LATCbits.LATC1 = 0x00 ;
ClosePWM2 () ; // Chiudo il modulo PWM
}
}
if (PORTBbits.RB7 == 0) { //Controllo la pressione di RB
for (i=0; i<z0; i++) { //Pausa filtraggio spike (10000 conteggio standard)
}
period = 159; // Imposto una frequenza di 392Hz SOL
if (PORTBbits.RB7 == 0) { //Controllo la pressione di RB
OpenPWM2(period) ; //Apro il modulo PWM
set_duty_cycle (sine[sample]);
repeat++;
LATCbits.LATC1 = 0x01 ; //Accendo il Led 1
}
else {
LATCbits.LATC1 = 0x00 ;
ClosePWM2 () ; // Chiudo il modulo PWM
}
}
if (PORTDbits.RD0 == 0) { //Controllo la pressione di RB
for (i=0; i<z0; i++) { //Pausa filtraggio spike (10000 conteggio standard)
}
period = 151; // Imposto una frequenza di 415Hz SOL#
if (PORTDbits.RD0 == 0) { //Controllo la pressione di RB
OpenPWM2(period) ; //Apro il modulo PWM
set_duty_cycle (sine[sample]);
repeat++;
LATCbits.LATC1 = 0x01 ; //Accendo il Led 1
}
else {
LATCbits.LATC1 = 0x00 ;
ClosePWM2 () ; // Chiudo il modulo PWM
}
}
if (PORTDbits.RD1 == 0) { //Controllo la pressione di RB
for (i=0; i<z0; i++) { //Pausa filtraggio spike (10000 conteggio standard)
}
period = 134; // Imposto una frequenza di 466Hz LA
if (PORTDbits.RD1 == 0) { //Controllo la pressione di RB
OpenPWM2(period) ; //Apro il modulo PWM
set_duty_cycle (sine[sample]);
repeat++;
LATCbits.LATC1 = 0x01 ; //Accendo il Led 1
}
else {
LATCbits.LATC1 = 0x00 ;
ClosePWM2 () ; // Chiudo il modulo PWM
}
}
if (PORTDbits.RD2 == 0) { //Controllo la pressione di RB
for (i=0; i<z0; i++) { //Pausa filtraggio spike (10000 conteggio standard)
}
period = 142; // Imposto una frequenza di 440Hz LA#
if (PORTDbits.RD2 == 0) { //Controllo la pressione di RB
OpenPWM2(period) ; //Apro il modulo PWM
set_duty_cycle (sine[sample]);
repeat++;
LATCbits.LATC1 = 0x01 ; //Accendo il Led 1
}
else {
LATCbits.LATC1 = 0x00 ;
ClosePWM2 () ; // Chiudo il modulo PWM
}
}
else{
BT0 = 0;
}
}// if del BT0
}//Pulsante0
void set_duty_cycle (int duty_cycle) {
CCPR2L = (unsigned char) (duty_cycle >> 2);
if (duty_cycle & 0x0001)
CCP2CONbits.DC2B0 = 0x0001;
else
CCP2CONbits.DC2B0 = 0x0000;
if (duty_cycle & 0x0002)
CCP2CONbits.DC2B1 = 0x0001;
else
CCP2CONbits.DC2B1 = 0x0000;
}

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)


