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

 
 
> ОДнократное преобразование в 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
Ответов
virtuality
сообщение May 19 2006, 03:26
Сообщение #2


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

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



ОК. Спасибо! Более или менее разобрался. Заменил, как предложил Defunct - программа не виснет. ПРоблема пока только в проверке результатов - вывести некуда ))).

Моя задача - я уже писал в соседней теме -фотореле. От ацп большой точности не требуется - надо лишь отличить 0,05-0,15 В от 1-1,5 вольт. Я вначале решил использовать компаратор. ОДнако, так как конечно устройство собираюсь проектировать на ATTiny13 (сейчас с мега8 ковыряюсь, потому что макетка на нем собрана). При использоваии компаратора необходимо задействовть 2 линии - в тини13 их 6 и мне как раз одной не хватает. Поэтому я решил использовать АЦП.

Контроллер должен зажечь лазер, после этого снять показания через АЦП с фотодиода, и только после этого лазер выключается. Т.Е.
Цитата
то за время одиночного преобразования сигнал на входе может многократно измениться и результат преобразования получится недостоверным
мне не грозит.

Внутренний опорник в случае tiny13 - единственный вариант. Но у него напряжение 2,5 вольт. Не сгорит ли он если на него подать напряжение равное напряжению питания?
Go to the top of the page
 
+Quote Post
otrog
сообщение May 19 2006, 06:38
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 22-02-06
Из: Воронеж
Пользователь №: 14 589



Цитата(virtuality @ May 19 2006, 07:26) *
надо лишь отличить 0,05-0,15 В от 1-1,5 вольт.
.......................
Но у него напряжение 2,5 вольт.

У Вас диапазон входного напряжения как раз лежит ниже напряжения внутреннего опорника, так что все будет работать. А если на входе будет напряжение выше Uоп, но ниже Uпит, то на выходе АЦП будет число 1023. Только и всего - ничего не сгорит.

PS Кстати на чем пишите? У меня CodeWizard от CodeVision выдал следующюю заготовку:
[code]#include <mega8.h>

#define ADC_VREF_TYPE 0xC0

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}


// Declare your global variables here

void main(void)
{
// Declare your local variables here
// ..................................................................
// ADC initialization
// ADC Clock frequency: 500,000 kHz
// ADC Voltage Reference: Int., cap. on AREF
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x81;

Успехов.

Сообщение отредактировал otrog - May 19 2006, 06:50


--------------------
Истина рождается в спорах; но когда страсти кипят, истина испаряется.
Go to the top of the page
 
+Quote Post



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

 


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


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