m4tt3o ha scritto:Ciao Paolo, avevo detto che ti tenevo aggiornato.
Ho dato una ripassata al c, ho ragionato su ogni istruzione del programma, ci ho perso almeno 4-5 nottate, niente non funzionava, ho riprovato a scuola con lo stesso programma simulato a casa e funzionava! Morale della favola, proteus che avevo installato sul computer aveva qualche problema di simulazione, ne ho installato un altro e il programma funziona perfettamente.
Poi generare il PWM è veramente una stronzata colossale, sono 5 righe di codice.
Ma nonostante tutto voglio ringraziarvi, perché non mi avete fatto il programma e ci ho sbattuto la testa mi sono imparato qualcosa di nuovo, alla è veramente semplice il programma.
Dopo che ho ripassato sui libri e ragionando per farlo ci ho messo 30 minuti.
C'è qualche errorino non mi segna il duty cycle in percentuale sul display ma non ho avuto tempo di guardarlo domani vedo di correggerlo per il resto funziona tutto alla perfezione.
- Codice: Seleziona tutto
#include <vent_fin2.h>
#include "na_lcd4x20_D2Free.c"
#include "na_iodevice.c"
void main()
{
unsigned int8 duty1=0, dutyxcent=0;
unsigned int16 duty=0;
float Vin,Temp;
int1 FVent=FALSE;
setup_adc_ports(AN0_AN1_AN3);
setup_adc(ADC_CLOCK_DIV_2);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_128);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_4,50,1);
setup_ccp1(CCP_PWM);
set_pwm1_duty(818);
setup_comparator(NC_NC_NC_NC);
lcd_init();
delay_ms(10);
Presentation();
delay_ms(1);
set_adc_channel(0);
delay_us(100);
beep();
Testata();
delay_ms(1);
while(True){
duty=read_adc();
If((Duty>100)&(Duty<921)){
Vin=(duty*0.00498)+0.005;
Temp=((15*Vin)+2.5);
lcd_gotoxy(4,3);
printf(lcd_putc,"%2.1f",Temp);
}
}
If(temp>=20.0){
duty1=(int8)(duty/13.81);
duty1=duty+(int8)((duty1/10)+1);
//Calcolo valore in percentuale duty cycle
dutyxcent=(int8)(duty1/0.74);
lcd_gotoxy(16,3);
printf(lcd_putc,"%2u",dutyxcent);
}
If(!FVent){
FVent=TRUE; //Accende ventola se è spenta
duty1=70;
lcd_gotoxy(7,4);
lcd_putc("ON");
beep();
delay_ms(300);
beep();
set_pwm1_duty(duty1);
delay_ms(1000);
}
If(Temp<19.0){ //Se la temperatura è più bassa di 19 gradi
Duty1=0; //Duty generato 0% spegni la ventola
Dutyxcent=0;
FVent=FALSE; //Avviso ventola ferma
lcd_gotoxy(7,4);
lcd_putc("OFF");
set_pwm1_duty(duty1); //Setta il duty del segnale PWM
//Calcolo valore in percentuale duty cycle
dutyxcent=(int8)(duty1/0.74);
lcd_gotoxy(16,3);
printf(lcd_putc,"%2u",dutyxcent);
}
}
"Ai posteri l'aurdua sentenza".
Ciao.
Paolo.

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)




