PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : CCS C Compiler und PIC12F675 und Quartz und Timer



Jaipur
14.12.2006, 13:15
hallo zusammen,

ich habe hier einen PIC12F675 mit einem 4MHz Quartz, diesen programmiere ich mit dem ccs c compiler und anschließend wird der pic mit dem mplab 7.5 + icd2 gebrannt. allerdings macht mir gerade der timer0 ein wenig kopfschmerzen, mein hardware/software timer kann ich nur auf ganze sekunden werte einstellen, also: 1, 2, 3, 4, 5, 6, ...




setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);


unsigned int8 TM_VALUE_1SEC = 250;
unsigned int8 TM_VALUE_XSEC = 0;

unsigned int8 TM_COUNT_1SEC = 0;
unsigned int8 TM_COUNT_XSEC = 0;

unsigned int1 TM_FLAG_1SEC = FALSE;
unsigned int1 TM_FLAG_XSEC = FALSE;
unsigned int1 TM_FLAG_MAIN = FALSE;


#int_TIMER0
TIMER0_isr( /* 4ms */ )
{
TM_FLAG_1SEC = FALSE;
TM_FLAG_XSEC = FALSE;

if( ++TM_COUNT_1SEC >= TM_VALUE_1SEC)
{
TM_COUNT_1SEC = 0;
TM_FLAG_1SEC = TRUE;
}

if( TM_FLAG_1SEC == TRUE)
{
if( ++TM_COUNT_XSEC >= TM_VALUE_XSEC)
{
TM_COUNT_XSEC = 0;
TM_FLAG_XSEC = TRUE;
}
}

if( TM_FLAG_XSEC == TRUE)
{
TM_FLAG_MAIN = TRUE;
}
}


void main()
{
if( TM_FLAG_MAIN == TRUE)
{
TM_FLAG_MAIN = FALSE;
toggle_einen_ausgang();
}
else
{
toggle_einen_anderen_ausganag();
}
}



aber der timer läuft "falsch", wenn ich die zeit messe, bekomme ich immer werte hinter einem komma heraus ?!?!

Jaipur
14.12.2006, 13:29
ups, das wichtigste habe ich natürlich vergessen:



setup_adc_ports(sAN2|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_64);
set_adc_channel( AN2);
setup_vref(FALSE);

const unsigned int16 ADCRESOLUTION = 255;
const unsigned int16 TIMER_MAX = 60;

TM_VALUE_XSEC = (ADCRESOLUTION - (unsigned int16)read_adc()) * TIMER_MAX / ADCRESOLUTION;


der poti welchen ich ablese ist anders_herum_eingebaut, daher ADCRESOLUTION - read_adc(), der wert geht also von 255 bis 0 wobei 255 einer null entspricht und die null einer 255. die VREF spannung sind die 5V Versorgungsspannung.

Jaipur
15.12.2006, 12:05
hallo zusammen,

ich habe das ganze jetzt mal mit dem delay_ms( 1000) in eine for schleife gepackt, die zeit ist jetzt zu 100% genau... ich weiß aber nicht woran das liegt.