ДЛЯ Tow , RadiM, POV and other ,,,,, про АЦП (проект)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено Дима 08 октября 2003 г. 08:22

Вот проект,алгоритм (правда это стабилизатор для снегохода - бортовая сеть - 12В должна быть ) работает ( пусть не соответствует структурному и ANSI стилю) он режет и прибавляет относительно "что б пусто было 218 коду", но АЦП (промолчу :-((() ,да работаю с Kit 8051F010, так, что все в живую. При отсутствии напряжения на входах АЦП - он дает
8000 код (выравнивание влево)- чепуха, так АЦП не работает, окромя как несоответствии документации на серию 8051F000 и файла 8051F000.h регистра ADLIST (выравнивания), больше ошибки найти немогу - 3 дня бьюсь
С уважением, глубоким Дима !!!

#include
#include

#define VOLTAGE 255
#define STEP 10

data unsigned long Rezult;
data unsigned int Usr;
data unsigned int Vref;
data unsigned int period;
data unsigned int temp;

sbit Pout0 = P0^2;
sbit Pout1 = P0^6;

data unsigned int k;

void INT0_ISR(void) interrupt 0{

IE0 = 0;
EX0 = 0;
CR = 0;

Pout0 = 0;
Pout1 = 0;

period = (PCA0H << 8) | PCA0L;

period /= 2;

Usr = Rezult / k;
if (Usr < VOLTAGE )
Vref -= STEP;
if (Usr > VOLTAGE)
Vref += STEP;
Rezult = 0;k = 0;

temp = Vref;
PCA0CPL3 = (0xff & temp);
PCA0CPH3 = (0xff & (temp >> 8));
PCA0CPM3 = 0x49;

PCA0CPL2 = (0xff & period);
PCA0CPH2 = (0xff & (period >> 8));
PCA0CPM2 = 0x49;

PCA0L = 0;
PCA0H = 0;

CR = 1;
EX0 = 1;
}

void PCA0_ISR (void) interrupt 9 {

if (CCF3)
{
CCF3 = 0;
Pout0 = 1;
Pout1 = 1;
PCA0CPM3 = 0;

}

if (CCF2)
{
CCF2 = 0;
Pout0 = 0;
Pout1 = 0;
CR = 0;
Usr = Rezult / k;
if (Usr < VOLTAGE )
Vref -= STEP;
if (Usr > VOLTAGE)
Vref += STEP;
Rezult = 0;k = 0;
temp = Vref + ((PCA0H << 8) | PCA0L);
PCA0CPL4 = (0xff & temp);
PCA0CPH4 = (0xff & (temp >> 8));
PCA0CPM4 = 0x49;
CR = 1;
PCA0CPM2 = 0;
}

if (CCF4)
{
CCF4 = 0;
Pout0 = 1;
Pout1 = 1;
PCA0CPM4 = 0;
}
if (CF)
{
CF = 0;
CR = 0;
PCA0H = 0;
PCA0L = 0;
}

}

void ADC0_ISR (void) interrupt 15 {

ADCINT = 0;
Rezult += ADC0H;
ADC0L = 0;
k++;
ADBUSY = 1;
}


void main (void)
{

Pout0 = 0;
Pout1 = 0;
WDTCN = 0xDE;
WDTCN = 0xAD;

XBR1 = 0x04;
XBR2 = 0x40;
PRT0CF = 0x44;

OSCICN = 0x07;

//АЦП пошло
REF0CN = 0x03;
AMX0CF = 0x01;
AMX0SL = 0x00;
ADC0CF = 0x80;
ADC0CN = 0xD0;

EIE1 = 0x08;
EIE2 = 0x02;
EIP2 = 0x02;

EX0 = 1;
IT0 = 1;

period = 0;
temp = 0;
Rezult = 0L;
Usr = 0;
k = 0;
Vref = 1;

CR = 1;
EA = 1;


while(1)
{
continue ;
}

}



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

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru