Всем привет. Мне нужно разработать цифровой осциллограф. Использую atmega8( хотя можно и 32). Моделирую в Proteus.
При повышении частоты измеряемого сигнала, происходит его искажение.
Осциллограмму я вывожу на lcd дисплей.
Использую делитель напряжения
Почему происходят такие сильные искажения???
Немного кода:
Настройка ацп
ADCSRA|=(1<<ADEN)//запуск АЦП
|(1<<ADPS2)|(1<<ADPS1)|(0<<ADPS0)//делитель (110)= 64
|(1 << ADSC); // Запуск преобразования
ADMUX|=(0<<REFS1)|(1<<REFS0)//опорное напряжение AVCC = 5В
|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0);//0000 -ADC
Функция считывания данных с АЦП
int readADC(){
ADCSR|=(1<<ADSC);//запуск преобразования
while(ADCSRA&(1<<ADSC));//ждем
return ADC;
}
void timePause(int count) {
while (count--);
}
main функция:
int main (){
start();
float Ustart=5.0;//основное напряжение
float R1=5000, R2=1000;//для делителя
float Rk=R2/(R1+R2);//коэффициент делителя
int i=0,j=0;
const int izmCol=5;
int ks=0;
while(1){
for(i=0;i<80;i++){
for(j=0;j<izmCol;j++){
ks+=readADC();
}
U[i]=Ustart/Rk*((ks/izmCol)/1023.0)*yMult+yScale;
ks=0;
timePause(xScaleArr[xScale]);
}
}
}
В результате получается 80 значений напряжения, по которым я рисую осциллограмму.
Также использую таймер для вывода на экран( 30 Гц): использую функцию sei(). Пробовал делать через прерывания ацп, не получилось( скорее всего из за "sei").
КАК УБРАТЬ ЭТИ СТРАННЫЕ ПОМЕХИ????
PS экран nokia 5110
1.DSN
GccApplication2.c