Каждый, у кого нет машины, мечтает её купить; и каждый, у кого есть машина, мечтает её продать. И не делает этого только потому, что, продав, останешься без машины. (К-ф 'Берегись автомобиля')
Программное обеспечение стробоскопа
{
CurrentTime = TCNT1; //записываем текущее значение таймера
//если нет переполнения, то
if (CurrentTime > PreviousTime) T = CurrentTime - PreviousTime;
//если есть переполнение Т/С
else T = 0xFFFF + CurrentTime - PreviousTime;
PreviousTime = CurrentTime; //текущее значение стало предыдущим
U=60.0*31250/(0.5*T); //скорость вращения коленвала
sprintf(buffer,"%06u",U); //форматирование
LCD_out_str (buffer,0x40); //вывод числового значения на ЖКИ, 2
// строка
}
}
void Stroboskop (void)
{
int c ++;
CurrentTime = TCNT1; //записываем текущее значение таймера
//если нет переполнения, то
if (CurrentTime > PreviousTime) T = CurrentTime - PreviousTime;
//если есть переполнение Т/С
else T = 0xFFFF + CurrentTime - PreviousTime;
PreviousTime = CurrentTime; //текущее значение стало предыдущим
if (c=3)
{
if(PIND & 0x01)== 0x01) высоковольтный провод (емкостной //синхронизатор)
{
UGL=T/720; //2 оборота 1 импульс
n = 31250/T; // частота искрообразований
R = 0; //обнуление счетного регистра
Z = 0;
while ((PINB & 0x01)== 0x01) //пока режим нажат в цикле "режим"
i = 0;
{
for (i = 0, i = n, i ++) //импульсы на HL
{
if (i = 1) P();
else if (i = n/2) P();
else if (i = n) P();
_delay_loop_2(T/n);
sprintf(buffer,"%06u",R); //форматирование
LCD_out_str (buffer,0x40); //вывод числового значения на ЖКИ
}
}
}
if (PIND & 0x04) == 0x04) //низковольтный провод (коммутатор)
{
UGL=T/180; //1 оборот 2 импульс
n = 31250/T; // частота искрообразований
R = 0; //обнуление счетного регистра
Z = 0;
while ((PINB & 0x10)== 0x10) //пока режим нажат в цикле "режим"
i = 0;
{
for (i = 0, i = n, i ++) //импульсы на HL
{
if (i = 1) P();
else if (i = n/2) P();
else if (i = n) P();
_delay_loop_2(T/n);
sprintf(buffer,"%06u",R); //форматирование
LCD_out_str (buffer,0x40); //вывод числового значения на ЖКИ
}
}
}
}
int main (void)
{
//------------------------------------/*Настройка портов*/-------------------------------------
DDRB = 0x00; //PB0 - режим
PORTB =0xFF;
DDRD = 0x00; // PD2 - выбор (по внешнему прерыванию),
PORTD =0xFF;
DDRA = 0xE2; //PA1-вход c датчика напряжения
PORTA =0x1D; //PA2-выход на лампу HL
//-----------------------------------------------------------------------------------------------------
//------------------------------------/*Настройка таймера*/------------------------------------
TCCR1A = 0; //режим ШИМ выключен
TCCR1B = _BV(CS12); //коэффициент деления частоты системной
// синхронизации = 256
//-----------------------------------------------------------------------------------------------------
//----------------------------------------/*Настройка АЦП*/------------------------------------
ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS2); //ADEN-разрешь
// работу АЦП, делитель частоты
// АЦП =64(8000000МГц/64=125кГц)
ADMUX = (1<<ADLAR)| (1<<REFS0); //выравнивание результата
// по правому краю выбран первый канал
// напряжение питания AVcc
//-----------------------------------------------------------------------------------------------------
//--------------------------------------/*Настройка прерываний*/-----------------------------
GICR = 0x40; //разрешить прерывания по выводу INT0
MCUCR = (1<<ISC11)|(1<<ISC10)|(1<<ISC01)|(1<<ISC00); //генерация внешних прерываний по нарастающему фронту
//-----------------------------------------------------------------------------------------------------