Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Подскажите кто нибудь как найти среднее значение в массиве рез-татов АЦП

Отправлено Frensis 07 октября 2008 г. 21:42


Хотел что бы цифры не прыгали на LCD а выводили среднее значение допустим 3 измерений 1 канала тоже самое и сдругими каналами прога вот :
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.5 Professional
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 10.09.2008
Author : Stepan
Company : Home
Comments:


Chip type : ATmega16
Program type : Application
Clock frequency : 4.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/

#include <mega16.h>

// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd.h>
#include <stdio.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x00;
#define ADCVIKL ADCSRA=0b10011110;
#define ADCVKL ADCSRA=0b11011110;
unsigned int y=0;
unsigned int flag=0;
unsigned int x=0;
unsigned int i;
unsigned int z=0;
char lcd_buffer[33];
char lcd_buffer1[33];
char lcd_buffer2[33];


interrupt [ADC_INT] void adc_isr(void) ////2112659 =1667ìêñ ïðè Êäåë=128 Fadc=7812,5Hz Fd=Fadc/13=600Hz
// Âðåìÿ âûáîðêè Tv=1/Fd =1667ìêñ ; ïðè Êäåë=64 Fadc=15625Hz Fd=1201Hz Tv=832ìêñ
//2
{
PORTB.0^=1;
i=ADMUX & 0b00001111;
switch(i)
{case 0:y=ADCW*25;flag=1;break;
case 1:x=ADCW*25;flag=2;break;
case 2:z=ADCW*25;flag=3;break;
default:;};

}

void init(void){
ADCVIKL;
ADMUX=0b11000000;
#asm ("sei");}


// Declare your global variables here
//flash char xyz[]="Zrasde dela kak" ;
void main(void)
{

// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x01;

// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0xFF;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00; //8375
// initialize the LCD for
// 2 lines & 16 columns
lcd_init(16); //8377 =2.1sec
init(); //2110959
//ADCVKL;


// go on the second LCD line



// display the message


// stop here
while (1)
{
switch(flag) //2110972
{case 1:ADCVIKL;ADMUX=0b11000001;break; //2110973
case 2:ADCVIKL;ADMUX=0b11000010;break; //2110978
case 3:ADCVIKL;ADMUX=0b11000000;break; //2110983
default:;};

flag=0; //2110988
ADCVKL; //2110990
lcd_gotoxy(0,0);//2110992 óõîä â ïðåðûâàíèå
sprintf(lcd_buffer,"U=%4d.%d",y/10,y%10);
lcd_puts(lcd_buffer);
lcd_gotoxy(0,1);
sprintf(lcd_buffer1,"U1=%4d.%d",x/10,x%10);
lcd_puts(lcd_buffer1);
lcd_gotoxy(8,0);
sprintf(lcd_buffer2,"U2=%4d.%d",z/10,z%10);
lcd_puts(lcd_buffer2);


lcd_clear();


//
};
}


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

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

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
если прибавить четыре к четырём будет:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru