[an error occurred while processing this directive]
Тихо шифером шурша...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено samsony 11 августа 2006 г. 10:56

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 //for(temp2==0x00;temp2<0xFF;temp2++){#asm("nop");}
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 Status[ChanelNumber].PiBreak=1;//obryv
SystemRegistr[REGISTR_SHS]=SystemRegistr[REGISTR_SHS]|temp1;
}
temp1=temp1<<1;
}
}


Глючит по страшному. Обрабатывает все каналы одновременно. Не обновляются данные АЦП. Перепробовал все, или почти

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 
URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание