[an error occurred while processing this directive]
|
Mega8AI
--------------
const char AdcChanel[0x04]={0x00,0x01,0x06,0x07};
--------------
PORTB=0x00;
DDRB=0b00111111;
PORTC=0b00110000;
DDRC=0b00000100;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
TCCR0=0x03;
TCNT0=0xC1;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0b10;
TCNT1H=0xd8;
TCNT1L=0xef;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// ADC initialization
// ADC Clock frequency: 125,000 kHz
// ADC Voltage Reference: AVCC pin
ADMUX=0b01000000;
ADCSRA=0b10000110;
/********/
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
TIMSK=0b00000100;
//TIMSK=0b00000100;
ACSR=0x80;
SFIOR=0x00;
-----------------------------
void AnaliseSHS(){//funkciia analiza sostoianiia SHS
#define UNormaMin 164
#define UNormaMax 307
#define ConstAdcCountAverage 10 //kol-vo ciklov preobrazovaniia na kanal
unsigned char ChanelNumber; //nomer tekushchego kanala
unsigned char AdcCountAverage; //schetchik dlia usredneniia rezul'tata
unsigned int AdcDataAverage; //peremennaia dlia usredneniia re-tata
unsigned int temp;
unsigned char temp1;
unsigned char temp2;
temp1=0x01;
/*Ochistka registrov*/
SystemRegistr[REGISTR_SHS]=0x00;
Status[Chanel1].Fire=Status[Chanel2].Fire=Status[Chanel3].Fire=Status[Chanel4].Fire=0;//pozhar
Status[Chanel1].PiBreak=Status[Chanel2].PiBreak=Status[Chanel3].PiBreak=Status[Chanel4].PiBreak=0;//obryv
for(ChanelNumber=0x00;ChanelNumber<4;ChanelNumber++){
AdcDataAverage=0x00;
AdcCountAverage=ConstAdcCountAverage;
ADMUX=AdcChanel[ChanelNumber]+0b01000000;
for(AdcCountAverage=0x00;AdcCountAverage
ADSC=1;//zapustili ACP
do{}while(ADSC);//zhdem okonchaniia preobrazovaniia
temp=ADCH;temp=temp<<8;
AdcDataAverage=AdcDataAverage+(temp|ADCL); //zagruzhaem zanachenie ACP i summiruem
}
AdcDataAverage=(unsigned int)AdcDataAverage/ConstAdcCountAverage;//vychesliaem srednee znachenie
if(AdcDataAverage>UNormaMax){
Status[ChanelNumber].Fire=1;//pozhar
SystemRegistr[REGISTR_SHS]=SystemRegistr[REGISTR_SHS]|(temp1<<4);
}
if(AdcDataAverage
SystemRegistr[REGISTR_SHS]=SystemRegistr[REGISTR_SHS]|temp1;
}
temp1=temp1<<1;
}
}
Глючит по страшному. Обрабатывает все каналы одновременно. Не обновляются данные АЦП. Перепробовал все, или почти
Ответы
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание