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

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

Вот вырезки из старого проекта на 32-й меге (IAR-C). Там есть лишние куски, счас уж не помню что к чему, про АЦП сам наковыряй из кода.

Отправлено scorpion 09 мая 2008 г. 23:16
В ответ на: ATmega16 отправлено ruxa 09 мая 2008 г. 21:55

////////// adc.h, ////////////////////////

void ADCInit(unsigned char);
void ADCStart(void);


/////////////////////////////////////////////







////////// adc.c ////////////////////////
#include <iom32.h>
#include <inavr.h>
#include <stdlib.h>
#include "ports.h"
#include "adc.h"

/////////////////////////////////////////////////////////////////////////

void ADCInit(unsigned char n)
{
ADMUX = 0; //reference = AREF (pin 29 TQFP), result is right adjusted

ADMUX &= 0xf8;
ADMUX |= (n & 0x07); //source = n

ADCSRA = 0x8e; //разреш, такт/64
}//void ADCInit(unsigned char n)
//==============================================================

void ADCStart(void)
{//запускает измерение датчиков

ADCSRA |= 0x40; //start (ADCS - ADC start conversion)
}//void ADCStart(void)
//=================================================================













///////// p59_main.c /////////////////////////
#include <inavr.h>
#include <string.h>
#include <stdio.h> //for "printf()"
#include <iom32.h>

#include "Ports.h"
#include "timers.h"
#include "bios.h"
#include "adc.h"
#include "eeprom.h"
#include "74hc164.h"



//=================================================================
// Основная программа
//=================================================================
void main()
{ //инициализация
unsigned char a;
int i;
unsigned char ADCnumb = 6; //номер АЦП, с которым в данный момент ведётся работа


///////////////////////////////////////////////////////////////////

__disable_interrupt();

InitVars(); //"timers.c"
InitPorts(); //порты, defined in "ports.c"

InitTimer0();
InitTimer2(31);

Set1hc164(0x00);

a = RdW1();

if(a > 3) WrW1(2);




InitUSART(); //"bios.c"

USART_RXC_INT_ENABLE; //"bios.h"





__disable_interrupt();








TIMER0_COMP_INT_ENABLE;
TIMER2_COMP_INT_ENABLE;
TIMER0_START;
TIMER2_START;




WDTCR = 0x00;
WDT_DISABLE;


__enable_interrupt();




ADCInit(ADCnumb); //"adc.c" , 6 - PulseInterval, 7 - PulseWidth
ADCStart();


//=============================================================================
while(1)
{
// LED1_CPL;

if(!(ADCSRA & 0x40)) //
{//данные готовы
if(ADCnumb == 6)
{//готовы данные с регулятора периода между импульсами, вычисляем ValBetwPulse (timers.h)
a = ((ADCL>>2) & 0x3f) | (ADCH<<6);

SetTbetwPuls(a); //"bios.c"

CalcTimer2Init(GetEEPROM(2), GetEEPROM(3), a);//(((ADCL>>2) & 0x3f) | (ADCH<<6))); //~l.521 of "timers.c"

ADCnumb++;
}
else if(ADCnumb == 7)
{//готовы данные с регулятора ширины импульсов, вычисляем ValPulseWidth (timers.h)
SetValPulseWidth(((ADCL>>2) & 0x3f) | (ADCH<<6)); //"timers.c"
ADCnumb = 6;
}
else ;

ADCInit(ADCnumb); //"adc.c" , 6 - PulseInterval, 7 - PulseWidth

ADCStart();
}//if(!(ADCSRA & 0x40))



i = GetRegime(); //located in "timers.c"

if(i == 0) i = 0x09;
else if(i == 1) i = 0x05;
else if(i == 2) i = 0x0a;
else i = 0x06;









DispatchCmd(ChkCmd()); //"bios.c"
Delay(5); //this delay is obligatory ! Otherwise leds on HC164 will flash continuosly


}//while(1)
}//main()





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

Ответы


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

Сообщение:

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

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

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

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