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

 
 
> ОДнократное преобразование в ATMEGA8
virtuality
сообщение May 18 2006, 14:33
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 83
Регистрация: 17-05-06
Пользователь №: 17 190



Вот пример программы:
Код
char lcd_buffer[33];    
int temp=0;

#asm
    .equ __lcd_port=0x18
#endasm
#include<lcd.h>
#include<stdio.h>
#include <90s8535.h>
#include <delay.h>

#define ADC_VREF_TYPE 0x00

interrupt [ADC_INT] void adc_isr(void)
{
temp=ADCW;
delay_ms(20);
ADCSR|=0x40;
     lcd_clear();
     sprintf(lcd_buffer,"%imV",(temp*5-temp/10));
     lcd_puts(lcd_buffer);    
}

void main(void)
{


ADCSR=0x8E;
#asm("sei")
ADMUX=0;

ADCSR|=0x40;
lcd_init(16);
    while (1)
       {
       }
      
}



В принципе все понятно, но как мне сделать однократное преобразование по команде ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
defunct
сообщение May 18 2006, 15:54
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



одиночное преобразование можно и без прерываний обойтись:

Код
#define ADC_EN_MASK  (1 << ADEN)|(1 << ADPS2)|(1 << ADPS1)|(1 << ADPS0)  

int ReadAdc(void)
{
   ADCSRA = ADC_EN_MASK|(1 << ADSC);
   while ( ADCSRA & (1 << ADIF) );
   return ADCW;
}



Цитата
interrupt [ADC_INT] ....
...
delay_ms(20);
...

Задержка внутри обработчика прерывания, тем более не маленькая это если мягко сказать - "не по спортивному". Лучше так никогда не делать.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 06:59
Рейтинг@Mail.ru


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