реклама на сайте
подробности

 
 
> Tiny13 и АЦП непонятные результаты, Собрал схему, написал программу, но получаю непонятные результаты
Викор
сообщение Jan 19 2010, 13:53
Сообщение #1





Группа: Новичок
Сообщений: 1
Регистрация: 19-01-10
Пользователь №: 54 916



Для Tiny13L в CodeVisionAVR написал программу для работы с АЦП (Приведена ниже). Программа получает 10 результатов с АЦП (ADC2) и сохраняет их в EEPROM.
Замыкаю PB4 с VCC, подаю питание (5,25В.), но вместо ожидаемых максимальных значений (ADCL=0xff, ADCH=0x03) в EEPROM ложатся:

1 измерение
ADCL=0x00
ADCH=0x00

2 измерение
ADCL=0x31
ADCH=0x03

3 измерение
ADCL=0x10
ADCH=0x03

4 измерение
ADCL=0x6B
ADCH=0x02

5 измерение
ADCL=0xDE
ADCH=0x01

6 измерение
ADCL=0xA3
ADCH=0x01

7 измерение
ADCL=0x60
ADCH=0x01

8 измерение
ADCL=0xFE
ADCH=0x00

9 измерение
ADCL=0xFF
ADCH=0x03

10 измерение
ADCL=0xFF
ADCH=0x03

Почему так происходит? Если сохранять в eeprom измерения с 10 по 20, все работает отлично.

Код
#include <tiny13.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x20
eeprom unsigned char t[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
// ADC interrupt service routine
interrupt [ADC_INT] void adc_isr(void)
{
static unsigned char i=0;
unsigned char adc_data;
unsigned char adc_data_h;
// Read the 8 most significant bits
// of the AD conversion result

if (i<18)
i=i+2;

adc_data=ADCL;
adc_data_h=ADCH;

t[i]=adc_data;
t[i+1]=adc_data_h;

// Place your code here
//if(adc_data_h>1)
{
PORTB.1=1;
delay_ms(100);
PORTB.1=0;
delay_ms(1000);
};
ADCSRA=ADCSRA|0x40; //Запускаем преобразование
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=In
// State5=T State4=T State3=T State2=T State1=0 State0=T
PORTB=0x00;
DDRB=0x02;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

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

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;

// ADC initialization
DIDR0=0x00;
ADMUX=0b00000010; // ADLAR=0; ADC2(PB4)
ADCSRA=0b10001111;
// 7 бит - разрешение АЦП
// 6 бит - 0 не начинаем преобразование
// 5 бит - 0 одиночное преобразование
// 4 бит - 0 прерывание от компаратора не требуется
// 3 бит - 1
// 2 - 1 бит - частота преобразования

// Global enable interrupts
#asm("sei")
ADCSRA=ADCSRA|0x40; //Запускаем преобразование

while (1)
      {
      // Place your code here

      };
}


Сообщение отредактировал Викор - Jan 19 2010, 14:03
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 08:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01365 секунд с 7
ELECTRONIX ©2004-2016