ATmega8: проблема с АЦП и организацией передачи данных

Обсуждаем контроллеры компании Atmel.
Snake93
Родился
Сообщения: 13
Зарегистрирован: Вт ноя 06, 2012 00:18:35

ATmega8: проблема с АЦП и организацией передачи данных

Сообщение Snake93 »

Уважаемые форумчане, требуется помощь в курсовом проекте.
Суть курсача - собрать Систему мониторинга больных.
То есть берётся 3 параметра: 1)Температура тела 2)Пульс 3)Наличие дыхания.
Вся эта информация берётся с трёх датчиков и , соответственно, подаётся на вход МК1,
там происходит оцифровка аналоговых сигналов и последующая передача по радиоканалу. (Судя по всему буду использовать модули RT10-433 и RR14-433)

С приёмника, сигнал будет поступать на вход МК2. А с него уже будет вывод на 3 семисегментных индикатора ( 3 разрядных)

В качестве МК(1-2) будет использоваться Atmega8. Пишу на С в CodeVisionAVR, в протеусе пытаю.
Возникают следующие вопросы:
1) Как организовать параллельную работу АЦП
2) По какому протоколу передавать информацию. Всё таки 3 цифровых сигнала, которые спутывать и смешивать не стоит.
3) Каким образом организовать вывод информации на индикаторы.

Для начала, я решил сделать проще.
Попробовал оцифровать один аналоговый сигнал

Вот код программы, который я проработал и вроде бы понял:)
Спойлер#define F_CPU 8000000UL
#include <mega8.h>
#include <delay.h>


void main(void)
{
DDRD = 0xFF;
PORTD = 0x00;

ADMUX = 0b00000000;
ADCSRA = 0b10001111;

while(1)
{
unsigned int u;
ADCSRA |= (1 << ADSC);
while((ADCSRA&(1 << ADIF))== 0);
u=(ADCL|ADCH << 8);

if (u>150)
PORTD.0 = 1;

if (u>400)
PORTD.1 = 1;

delay_ms(100);

}
}
Значения напряжения от 0 до 5 вольт на входе АЦП.

Искренне надеюсь на ваши советы
Реклама
Snake93
Родился
Сообщения: 13
Зарегистрирован: Вт ноя 06, 2012 00:18:35

Re: ATmega8: проблема с АЦП и организацией передачи данных

Сообщение Snake93 »

Сделал следующее:
1)подключил 1 канал АЦП
2)вывел значение в вольтах на семисегментные индикаторы
Спойлер#define F_CPU 8000000UL
#include <mega8.h>
#include <delay.h>
unsigned char number[] =
{
0x3f, //0
0x06, //1
0x5b, //2
0x4f, //3
0x66, //4
0x6d, //5
0x7d, //6
0x07, //7
0x7f, //8
0x6f //9
};


void main(void)
{
PORTB = 0xff;
DDRB = 0xff;
PORTD=0xff;
DDRD=0xff;


ADMUX = 0b00000000;
ADCSRA = 0b10001111;

while(1)
{
int y,x,r,t;
float z;
unsigned int u;
ADCSRA |= (1 << ADSC);
while((ADCSRA&(1 << ADIF))== 0);
u=(ADCL|ADCH << 8);

z=u*0.48875;


y=z/100;
x=(y%10);
y-=x;

r=z/10;
t=(r%10);
r-=t;

{
PORTD.0 = 1;
PORTB = number[x];
delay_ms(5);
PORTD.0 = 0;
delay_ms(5);

PORTD.1 = 1;
PORTB = number[t];
delay_ms(5);
PORTD.1 = 0;
delay_ms(5);
}

}
}
Изображение

Всё вроде бы нормально, но есть проблема с динамической индикацией-она отвратительна! Поочерёдное включение индикаторов загнал в цикл while(1) , и не могу выставить быструю смену, без возникновения ошибок в работе МК.

И ещё. Слышал есть __delay_cycles(8000000); которым это можно осуществить, но нужна библиотека #include <intrinsics.h> , коей нету в codevisionAVR и где её достать я просто хз...
Реклама
Аватара пользователя
VanyaSV
Встал на лапы
Сообщения: 126
Зарегистрирован: Пн ноя 05, 2012 22:23:32
Откуда: Санкт-Петербург

Re: ATmega8: проблема с АЦП и организацией передачи данных

Сообщение VanyaSV »

А зачем вам параллельная работа АЦП? Снимать какие-либо показания АЦП одновременно НЕВОЗМОЖНО! Лишь только по шагово... (ADC0...ADC7)
Данные лучше передавать по USART, ибо он аппаратный и простой, как гвоздь)
А как будет проверятся наличие дыхания у пациента?
Как будет считываться пульс больного?
Что за датчики температуры используете?
Аватара пользователя
VanyaSV
Встал на лапы
Сообщения: 126
Зарегистрирован: Пн ноя 05, 2012 22:23:32
Откуда: Санкт-Петербург

Re: ATmega8: проблема с АЦП и организацией передачи данных

Сообщение VanyaSV »

Да и что за индикаторы вы используете?
Реклама
Эиком - электронные компоненты и радиодетали
Snake93
Родился
Сообщения: 13
Зарегистрирован: Вт ноя 06, 2012 00:18:35

Re: ATmega8: проблема с АЦП и организацией передачи данных

Сообщение Snake93 »

Как будет считываться пульс больного?
На просторах интернета нашёл такой вариант http://chipenable.ru/index.php/projects ... pulsa.html
Думаю не будет большой проблемой реализовать его.
Что за датчики температуры используете?
Ещё точно не думал над этим вопросом. Возможно можно собрать схему, используя терморезистор или что-то подобное.
А как будет проверятся наличие дыхания у пациента?
Во тут придётся поломать голову, это либо какой-то эспандер вокруг грудной клетки, либо клапан в носу :)))

В идеале всё свести к изменению напряжения в диапазоне от 0 до 5 В. Чтобы дальше уже работал АЦП.
Да и что за индикаторы вы используете?
На данном этапе работы всё только в среде моделирования.
Так что пока использую одноразрядный семисегментный индикатор с общим катодом.
А зачем вам параллельная работа АЦП? Снимать какие-либо показания АЦП одновременно НЕВОЗМОЖНО! Лишь только по шагово... (ADC0...ADC7)
Данные лучше передавать по USART, ибо он аппаратный и простой, как гвоздь)
Значит, надо разобраться с USART-ом и передачей по радиоканалу. И научиться последовательно включать АЦП.
Реклама
Аватара пользователя
VanyaSV
Встал на лапы
Сообщения: 126
Зарегистрирован: Пн ноя 05, 2012 22:23:32
Откуда: Санкт-Петербург

Re: ATmega8: проблема с АЦП и организацией передачи данных

Сообщение VanyaSV »

Схема данного датчика импульса мне очень поравилась кстати) сам датчик только дорог. В чип и дипе 350 рублей(

Измерение температуры - это тоже очень хороший вопрос. Можно попробывать датчики температуры ds18b20. Может быть что-нибудь и получится с его пгрешностью 0,5%)

USART очень простой интерфейс и в даташите про него много чего расписано)

А менять каналы АЦП вам поможет регистр ADMUX, а точнее 1 ниббл (MUX0...MUX3).
Последний раз редактировалось VanyaSV Ср ноя 07, 2012 01:35:41, всего редактировалось 1 раз.
Реклама
Аватара пользователя
VanyaSV
Встал на лапы
Сообщения: 126
Зарегистрирован: Пн ноя 05, 2012 22:23:32
Откуда: Санкт-Петербург

Re: ATmega8: проблема с АЦП и организацией передачи данных

Сообщение VanyaSV »

Мне очень интересно, а зачем проверять наличие дыхания? Если у пациента есть пульс, следовательно он живой, а значит - дышит. Ну так и зачем делать данную проверку... Всё же и так придельно ясно)
Последний раз редактировалось VanyaSV Ср ноя 07, 2012 01:47:32, всего редактировалось 1 раз.
Аватара пользователя
VanyaSV
Встал на лапы
Сообщения: 126
Зарегистрирован: Пн ноя 05, 2012 22:23:32
Откуда: Санкт-Петербург

Re: ATmega8: проблема с АЦП и организацией передачи данных

Сообщение VanyaSV »

А вот скажем снимать ЭКГ и отправлять его по USARTу было бы очень интересно)
Snake93
Родился
Сообщения: 13
Зарегистрирован: Вт ноя 06, 2012 00:18:35

Re: ATmega8: проблема с АЦП и организацией передачи данных

Сообщение Snake93 »

Как правило) в течении нескольких минут человек может уже не дышать, а пульс может ещё быть. Но когда и пульса не будет (сердце перестанет биться). То начнутся необратимые процессы в организме: отмирание клеток мозга и прочее.
Тут счёт идёт на секунды:)

Конечно, это не предел возможностей, но на данном этапе сделать хотя бы это)
Учитывая, что срок - до середины декабря)
Аватара пользователя
VanyaSV
Встал на лапы
Сообщения: 126
Зарегистрирован: Пн ноя 05, 2012 22:23:32
Откуда: Санкт-Петербург

Re: ATmega8: проблема с АЦП и организацией передачи данных

Сообщение VanyaSV »

Ну тогда желаю успехов) Если будут какие-то вопросы - стучитесь)
Snake93
Родился
Сообщения: 13
Зарегистрирован: Вт ноя 06, 2012 00:18:35

Re: ATmega8: проблема с АЦП и организацией передачи данных

Сообщение Snake93 »

Хорошо, спасибо)

А мне вот интересно, получается все действия: опрос АЦП, передача по USART-у, будет находится, как бы в общем цикле?

while(1)
{
Опрос АЦП 1;
Опрос АЦП 2;
Опрос АЦП 3;

Отправка данных по USART-у;
}

и это всё повторяется, с определённой частотой.

Так?)
Просто возникается проблема синхронизации работы двух МК
Аватара пользователя
VanyaSV
Встал на лапы
Сообщения: 126
Зарегистрирован: Пн ноя 05, 2012 22:23:32
Откуда: Санкт-Петербург

Re: ATmega8: проблема с АЦП и организацией передачи данных

Сообщение VanyaSV »

Примерно так. Только не забывайте про то, что частоты обоих микроконтроллеров должны быть одинаковыми)
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Re: ATmega8: проблема с АЦП и организацией передачи данных

Сообщение shads »

Snake93 писал(а):получается все действия: опрос АЦП, передача по USART-у, будет находится, как бы в общем цикле?

while(1)
{
Опрос АЦП 1;
Опрос АЦП 2;
Опрос АЦП 3;

Отправка данных по USART-у;
}

и это всё повторяется, с определённой частотой.

Просто возникается проблема синхронизации работы двух МК
Лучше в фоне опрашивать датчики и сохранять данные в буфер. А по запросу основного контроллера отправлять инфу из буфера. Заодно благодаря буферу, можно будет усреднять (в разумных пределах конечно) данные перед отправкой, это избавит от ложных срабатываний. Ну и благодаря такому решению, необходимость в синхронизации отпадает.

Благодаря такому решению, можно к одному центральному контроллеру, подключить много клиентских узлов, Он их будет опрашивать по очереди. Тогда будет например один пост наблюдения, к которому подключены много пациентов. ПЕРСПЕКТИВЫ.....

Я нечто подобное делал тут, только здесь адресные модули опрашивают состояние 1-го датчика, но ничто не мешает опрашивать 3 датчика.....
Аватара пользователя
VanyaSV
Встал на лапы
Сообщения: 126
Зарегистрирован: Пн ноя 05, 2012 22:23:32
Откуда: Санкт-Петербург

Re: ATmega8: проблема с АЦП и организацией передачи данных

Сообщение VanyaSV »

+1) Идея нравится)




-1. Нарушение п. 2.7 правил.
ploop
Аватара пользователя
Санек86
Грызет канифоль
Сообщения: 258
Зарегистрирован: Ср сен 19, 2012 18:21:57

Re: ATmega8: проблема с АЦП и организацией передачи данных

Сообщение Санек86 »

дыхание можно проверять по тому же принципу как в этом приборе

http://images.yandex.ru/yandsearch?text ... image&lr=4

надеваете маску для дыхания на человека, а в нее встроен такой прибор...
Аватара пользователя
Санек86
Грызет канифоль
Сообщения: 258
Зарегистрирован: Ср сен 19, 2012 18:21:57

Re: ATmega8: проблема с АЦП и организацией передачи данных

Сообщение Санек86 »

Snake93 писал(а): Всё вроде бы нормально, но есть проблема с динамической индикацией-она отвратительна! Поочерёдное включение индикаторов загнал в цикл while(1) , и не могу выставить быструю смену, без возникновения ошибок в работе МК.
работа с АЦП и динамическая индикация есть здесь http://radioparty.ru/index.php/prog-avr ... -voltmeter
Все работает отлично...сам проверял.
Snake93
Родился
Сообщения: 13
Зарегистрирован: Вт ноя 06, 2012 00:18:35

Re: ATmega8: проблема с АЦП и организацией передачи данных

Сообщение Snake93 »

Санек86 писал(а):
Snake93 писал(а): Всё вроде бы нормально, но есть проблема с динамической индикацией-она отвратительна! Поочерёдное включение индикаторов загнал в цикл while(1) , и не могу выставить быструю смену, без возникновения ошибок в работе МК.
работа с АЦП и динамическая индикация есть здесь http://radioparty.ru/index.php/prog-avr ... -voltmeter
Все работает отлично...сам проверял.
Да , спасибо. Я это уже просмотрел давно)
Надо разобраться с прерываниями.
Лучше в фоне опрашивать датчики и сохранять данные в буфер. А по запросу основного контроллера отправлять инфу из буфера. Заодно благодаря буферу, можно будет усреднять (в разумных пределах конечно) данные перед отправкой, это избавит от ложных срабатываний. Ну и благодаря такому решению, необходимость в синхронизации отпадает.
Опять же на это понадобиться гораздо больше времени, которого сейчас пока нет. Так что этот вариант стоит рассмотреть в будущем, чтобы доработать на тот момент, работающее устройство )

Всем спасибо)
Буду продолжать, достижения и вопросы, естественно, выложу)
Snake93
Родился
Сообщения: 13
Зарегистрирован: Вт ноя 06, 2012 00:18:35

Re: ATmega8: проблема с АЦП и организацией передачи данных

Сообщение Snake93 »

Начал работу с USART-ом, но вот беда, там нету библиотеки прерываний:
#include <avr/interrupt.h>
В CodevisionAVR нету такой библиотеки, где можно скачать?
Аватара пользователя
VanyaSV
Встал на лапы
Сообщения: 126
Зарегистрирован: Пн ноя 05, 2012 22:23:32
Откуда: Санкт-Петербург

Re: ATmega8: проблема с АЦП и организацией передачи данных

Сообщение VanyaSV »

Попробуй скачай WinAVR) там должна быть)
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: ATmega8: проблема с АЦП и организацией передачи данных

Сообщение Ser60 »

А как будет проверятся наличие дыхания у пациента?
Посмотрите обсуждение здесь:
http://radiokot.ru/forum/viewtopic.php?f=3&t=74820
Ответить

Вернуться в «AVR»