Приветствую Вас, Гость! Регистрация RSS

Вторник, 22.08.2017
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 41234»
Форум » Форум mega-avr.ucoz.ru » Схемотехника на микроконтроллерах AVR » Барометр для дома
Барометр для дома
us4ilqДата: Четверг, 30.09.2010, 19:30 | Сообщение # 1
Опытный
Сообщений: 173
Репутация: 2
Город: Донецк
Статус: Отсутствует
В общем так.
Давно хотел себе в хозяйстве иметь барометр (ну для предсказания погоды).
Да все никак, то дорого, то денег при себе нет, то еще что то.
Недавно решил сделать сам, как раз в обучении программирования практика.

Используемые детали:
ATMEGA 8 -микроконтроллер
MPX4115AP -датчик давления (аналоговый)
HIH-4000-004 -датчик влажности (аналоговый)
BA56-12SRWA -светодиодные семисегментные индикаторы 2 шт

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

Код для пересчета показаний я " добросовесно" содрал из исходника в этой статье
Небольшая метеостанция своими руками http://www.avispro.com.ua/doc.php?id=1172
а динамическую индикацию из статей на сайте http://arv.radioliga.com/content/section/6/49/

На данный момент есть прога показывающая атмосферное давление в мм.рт. ст.
и пока все. Далее необходимо модифицировать ее так чтоб
в прерывании от АЦП измерялся канал"0" и результат помещался в "переменную_1",
а в следующем прерывании - канал "1" , и результат помещался в "переменную_2"

Почему так?
потому что рересчет показаний давления и влажности производится поразному.
Вот так вот приблизительно я все это представляю.
Ну пожалуй для стсрта пока хватит.

Схема и текст проги во вложенном архиве.

Сергей.

Добавлено (30.09.2010, 19:30)
---------------------------------------------
В догонку к выше изложеному:

Предполагаю что подойдет следующий пример, я его нашел на одном сайте

======================================================
Вот пример смены каналов.
В прерывании АЦП результат преобразования сохраняется в массиве.
Меняется номер канала и запускается новое преобразование.
Код:

Code
void ADC_Init(void)
{
//ион - напряжение питания, выравнивание вправо, нулевой канал
ADMUX = (0<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0);
//вкл. ацп, режим однокр. преобр., разрешение прерывания, частота преобр. = FCPU/
ADCSR = (1<<ADEN)|(1<<ADSC)|(0<<ADFR)|(1<<ADIE)|(1<<ADPS2)|(0<<ADPS1)|(0<<ADPS0);
//запускаем преобразование
//ADCSR |= (1<<ADSC);

}

//**************************************************************
//буфер, в который мы храним усредненное значение напряжения
unsigned char adcValueBuf[2] = {0, 0};
#pragma vector=ADC_vect
__interrupt void adc_my(void)
{
static unsigned char canal = 0; // здесь храним номер канала

//считываем результат преобразования АЦП в буфер
adcValueBuf[canal] = ADCH;
canal++; //увеличиваем номер канала на1
canal &= 1;
ADMUX = (ADMUX & 0xf0)|(canal & 1);
ADCSR |= (1<<ADSC); //запускаем преобразование
}

//**************************************************************
//возвращает значение буфера (чтение АЦП)
__monitor unsigned int ADC_GetBuf(unsigned char can)
{
if (can < 2){
return adcValueBuf[can];
}
return 0;

========================================================

Однако тут мне непонятны некоторые строки
например вот эта canal &= 1;

пытаясь разобраться я пришел к выводу что, то что находилось в переменной canal
то же там и останется вудь
если в canal еденица (0000 0001) то и останется еденица
а, если в canal ноль (0000 0000) то и останется ноль
или я неправильно рассуждаю?

Файл: 1317245.rar(43Kb)
 
АвторДата: Четверг, 30.09.2010, 21:10 | Сообщение # 2
Автор сайта
Сообщений: 200
Репутация: 3
Город: Омск
Статус: Отсутствует
Добрый вечер Сергей! Я займу некоторое время для осмысления идеи и программной реализации. Сергей, напишите про параметры датчиков MPX4115AP и HIH-4000-004: какие выходные напряжения взависимости от значений действующих факторов.


_____________________________________________________________
Радиоэлектроника и Программирование занимательная штука...
 
us4ilqДата: Четверг, 30.09.2010, 21:19 | Сообщение # 3
Опытный
Сообщений: 173
Репутация: 2
Город: Донецк
Статус: Отсутствует
Что до параметров датчиков - так с этим проблем пока как раз необнаружено.
Да и мне проще даташиты в архиве разместить здесь.

Заминка как раз в том чтоб "вольтметр" сделать двух входовым, вот что главное!

Файл: 5501730.rar(223Kb)
 
us4ilqДата: Четверг, 30.09.2010, 22:33 | Сообщение # 4
Опытный
Сообщений: 173
Репутация: 2
Город: Донецк
Статус: Отсутствует
Вот сделал снимок вэб камерой того что уже есть.
На плате перепутаны номера разрядов индикатора ,
ее все равно придется переделывать,
поэтому показания следует читать с права на лево smile
Файл: 7982886.jpg(11Kb)
 
АвторДата: Пятница, 01.10.2010, 15:26 | Сообщение # 5
Автор сайта
Сообщений: 200
Репутация: 3
Город: Омск
Статус: Отсутствует
День добрый! Почитал PDF - документацию, и получается так:

Датчик влажности
0% - 0.826в
75.3% - 3.198в

Датчик давления
15кРа - 0.2в
115кРа - 4.8в

Примерный вид чтения по двум каналам, только без использования массива

Code
#define MUX0 0x00  
#define MUX1 0x01  

#define adcConv() ADCSRA.6=1  

unsigned int counter;  
/* Прерывание по завершению преобразования */  
interrupt [ADC_INT] void adc_isr( void )  
{  
  unsigned int adcData;  

  if( counter==0 )
  {  counter++;  
   ADMUX = MUX0; /* 1 канал ацп */  
   /* Чтение в переменную значения регистра данных ADCL:ADCH */  
   adcData = ADCW; //далее, с переменной adcData делаем необходимые действия  
   /* запускаем однократное преобразование преобразование */  
   adcConv();//Макрос  
   delay_ms( 50 );  
  }  

  ///////////////////////////////////////////////////////////////////////////////////////  
  if( counter==1 )
  {  counter--;  
   ADMUX = MUX1; /* 2 канал ацп */  
   /* Чтение в переменную значения регистра данных ADCL:ADCH */  
   adcData = ADCW;  
   adcConv();  
   delay_ms( 50 );  

  }  
}

Попробую доработать с использованием массива, для хранения прочтенных значений.</span>

Quote
[size=9]...Предполагаю что подойдет следующий пример, я его нашел на одном сайте...
void ADC_Init(void)
{
//ион - напряжение питания, выравнивание вправо, нулевой канал
ADMUX = (0<<REFS1)|(1<<REFS0)|(1<<ADLAR)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0);...

Это для среды IAR SYSTEM FOR AVR. В cvavr работать не будет.



_____________________________________________________________
Радиоэлектроника и Программирование занимательная штука...
 
us4ilqДата: Пятница, 01.10.2010, 15:34 | Сообщение # 6
Опытный
Сообщений: 173
Репутация: 2
Город: Донецк
Статус: Отсутствует
Здравствуйте Иван!
ОГРОМНОЕ СПАСИБО!
Буду разбираться и пробовать, но не сейчас, я немного занят.
Я собственно и хотел чтоб было без массива, просто я с ними пока еще
не совсем разобрался.
А с переменными мне как то понятней.
Еще раз спасибо.
 
АвторДата: Пятница, 01.10.2010, 15:42 | Сообщение # 7
Автор сайта
Сообщений: 200
Репутация: 3
Город: Омск
Статус: Отсутствует
Code
unsigned char lcdBuff[32]; //массив для хранения форматированной строки  
//--------------------------------------------------------------------------------------------------------  
adcData = ADCW * ( 5.0/1023 ) * 100; //Вычисляем, что намерил канал АЦП  
sprintf( lcdBuff,"%u.%u\xB3",adcData/10,adcData%10 ); //дробим целое число напряжения на десятки\единицы  
//форма \хВ3 - выводит букву В по таблице кодов ЖКИ, u - выводить целое безнаковое десят. число  
lcd_gotoxy( 11,0 );  
lcd_puts( lcdBuff ); //Выводит форматированную строку значения напряжения - например 12.5В  
...  
...  
...

Это я делал типа вольтметра!




_____________________________________________________________
Радиоэлектроника и Программирование занимательная штука...
 
us4ilqДата: Пятница, 01.10.2010, 15:43 | Сообщение # 8
Опытный
Сообщений: 173
Репутация: 2
Город: Донецк
Статус: Отсутствует
Вот сразу вопрос:
Для чего задержки delay_ms( 50 ); ?
Я читал что в прерываниях нерекомендуется использовать задержки
 
АвторДата: Пятница, 01.10.2010, 15:44 | Сообщение # 9
Автор сайта
Сообщений: 200
Репутация: 3
Город: Омск
Статус: Отсутствует
Кстати, Сергей, меня до четверга 7.10 не будет в сети; не теряйте smile


_____________________________________________________________
Радиоэлектроника и Программирование занимательная штука...
 
АвторДата: Пятница, 01.10.2010, 15:46 | Сообщение # 10
Автор сайта
Сообщений: 200
Репутация: 3
Город: Омск
Статус: Отсутствует
Задержка нужна якобы для того, чтобы напряжение на канале ацп немного "утряслось". Это сугубо экспериментальный способ.


_____________________________________________________________
Радиоэлектроника и Программирование занимательная штука...
 
us4ilqДата: Понедельник, 11.10.2010, 14:41 | Сообщение # 11
Опытный
Сообщений: 173
Репутация: 2
Город: Донецк
Статус: Отсутствует
Да без проблем
Мне теперь итак будет чем заняться

Добавлено (01.10.2010, 15:48)
---------------------------------------------

Quote
Задержка нужна якобы для того, чтобы напряжение на канале ацп немного "утряслось". Это сугубо экспериментальный способ.

понятно

Добавлено (01.10.2010, 15:50)
---------------------------------------------
Теперь я отключаюсь,
надо обед приготовить, скоро
супруга придет.
Еще раз спасибо.

Добавлено (11.10.2010, 14:41)
---------------------------------------------
Здравствуйте!
Короче случилась у меня неприятность-
грохнул я Мегу8 подав в качестве питания 13,5 вольт (по невнимательности конечно).
Пытался заказывать через знакомых на обласном радиорынке,, но как ни странно Мега8 в продаже нету.
Сегодня буду делать заказ в интернет магазине, правда это и дольше и дороже.
Так что Ваня я неуспел даже попробовать предложеный Вами метод.

На сегодняшний день ситуация такая:
Мега продолжает исправно работать, и даже читается программаторами (ПониПрог, CVAVR),
но как только я пытаюсь ее стереть или записать сразу же ступор, программаторы в упор ее невидят.
И перестают даже читать, приходится перезапускать программатор и Мегу, тогда все повторяется.
Я пробовал восстановить подавая внешний такт при программировании - ничего.
Пробовал метод бутерброда с подачей на РЕСЕТ +12 вольт - ничего.
Чего дальше делать просто незнаю.
Вот потому и придется заказывать еше пару штук .

Да вот к стати посматриваю в сторону ПараПрог

http://pol-sem.narod.ru/paraprog/paraprog.htm

там внизу есть ссылка на USB вариант, что можете сказать на его счет?
Спасибо Сергей.

 
us4ilqДата: Понедельник, 11.10.2010, 14:48 | Сообщение # 12
Опытный
Сообщений: 173
Репутация: 2
Город: Донецк
Статус: Отсутствует
Забыл
Состояние фьюзов во вложении
Файл: 3928974.jpg(15Kb)
 
АвторДата: Понедельник, 11.10.2010, 15:43 | Сообщение # 13
Автор сайта
Сообщений: 200
Репутация: 3
Город: Омск
Статус: Отсутствует
День добрый Сергей! Вашей микросхеме явно уже "хана", т.к. 13.5в это слишком много. Жаль конечно, что не успели кусок кода испробовать; я ждал результат, чего у вас вышло. Так что этому микроконтроллеру дорога в мусорный бачёк. По поводу ParaPROG, вроде бы неплохая штука, при том, что USB вариант - сегодня это актуально. Но как говорится, всё познается в практике. Нужно пробовать. Кстати, есть такая штука, как AVR910 - программатор с COM/USB интерфейсом, и даже работает с cvavr.

Некоторая информация по AVR910:

Программатор микроконтроллеров AVR / 89S совместимый с AVR910
Программаторы для микроконтроллеров Atmel
USB программатор AVR микроконтроллеров
Программатор AVRProg 910 USB

Я им конечно не пользовался, но вроде бы нормальный.



_____________________________________________________________
Радиоэлектроника и Программирование занимательная штука...
 
us4ilqДата: Понедельник, 11.10.2010, 17:27 | Сообщение # 14
Опытный
Сообщений: 173
Репутация: 2
Город: Донецк
Статус: Отсутствует
Есть он у меня.
Я его как то сделал, попробовал, CVAVR его увидел, и ....
Незнаю почему но я им так и не пользуюсь.
Мне как то проще и понятней с Пони Прогом общяться. biggrin
К стати из него я и брал Мегу для "бутерброда".

А что до Вашего примера, то я безусловно его попробую.

Пока начал готовить индикатор 128*64 для экспериментов, к стати
контрасность я подключил по другому - просто соединил выводы 3 и 17 через резистор 5,6к и все.
Так было предложено в синтезаторе http://rd3ay.cqham.ru/GRF_sintes.htm
Я его когда то делал все получалось.

 
АвторДата: Вторник, 12.10.2010, 08:29 | Сообщение # 15
Автор сайта
Сообщений: 200
Репутация: 3
Город: Омск
Статус: Отсутствует
Да, PonyProg это вещь; я ею начинал пользоваться сугубо в "рабочем распорядке" ( т.е. по работе ), и до сих пор пользуюсь.

Quote
...начал готовить индикатор 128*64 для экспериментов...

А что за дисплей, какое название, фирма?

---------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------
Кстати, вот ПРОЕКТ cvavr по использованию АЦП, но только для mega8535. Я его месяца 4 назад делал. Забыл я его в 7 пост поместить!



_____________________________________________________________
Радиоэлектроника и Программирование занимательная штука...
 
us4ilqДата: Вторник, 12.10.2010, 15:02 | Сообщение # 16
Опытный
Сообщений: 173
Репутация: 2
Город: Донецк
Статус: Отсутствует
Индикатор зовут FDCG12864B зеленый светодиодная подсветка, FORDATA ELECTRONIC.
С виду он практически копия WG12846A ? Да и во всем остальном пожалуй тоже, а вот контрасность , я бы сказал, получше.

За проэкт спасибо!

Мне ,вернее сказать, не сам адаптер от "Протоса" не приглянулся, а скорее модуль программатора в CVAVR
Как то мне там все непонятно (ну туповат я что поделаеш), а в PonyProg все предельно просто, да и
начинал я с него, когда просто копировал готовые конструкции на микроконтроллерах.
В ParaPROG меня интересует только возможность восстановления микросхем, которые я еще не один раз, загоню в позу,
хотя можно и вот это попробовать - http://radiokot.ru/forum/viewtopic.php?f=25&t=19601
Но здесь обслуживаемых микросхем меньше.
Что то я отвлекся от основной темы, пробачтэ
biggrin

Файл: 9285850.rar(155Kb)


Сообщение отредактировал us4ilq - Вторник, 12.10.2010, 15:44
 
АвторДата: Вторник, 12.10.2010, 22:00 | Сообщение # 17
Автор сайта
Сообщений: 200
Репутация: 3
Город: Омск
Статус: Отсутствует
Quote
...Что то я отвлекся от основной темы...

Ничего страшного; приятно когда параллельно затрагиваются другие темы. Вдруг захотите графический дисплей "прикрутить" к барометру - будет о чем пообщаться в теме happy
Посмотрел фото дисплея - хороший. Есть даже желание, посмотреть как у него текст отображается ( думаю в будущем ). smile
ИМХО, то что касается программаторов с возможностью восстанавливать микроконтроллеры из состояния "позы", то это нужная вещь, особенно для начинающих - я сам месяцев 6 назад в "позу" поставил микроконтроллер atmega8535 в PonyProg; он у меня напрочь отказывался предоставлять данные о "прошитости" ( даже новый купил в магазине за 100р ). Пришлось его пихать в программатор ChipProg -2 ( параллельное программирование ); удача была в кармане + запасной в том же месте. biggrin



_____________________________________________________________
Радиоэлектроника и Программирование занимательная штука...
 
us4ilqДата: Вторник, 12.10.2010, 22:12 | Сообщение # 18
Опытный
Сообщений: 173
Репутация: 2
Город: Донецк
Статус: Отсутствует
Иван!
У меня возник глупый вопрос
а по какой причине Вы используете atmega8535, а скажем не atmega16 или atmega32 ?
Они чем то лучше или какието другие причины?

Quote (skiff)
Есть даже желание, посмотреть как у него текст отображается

Я тут пытался разобраться в Ваших статьях на эту тему, и думаю что подключу его довольно скоро.
Кажется придется немножко переназначить управляющие выводы (для удобства подключения) ,
как это сделать я знаю, и пожалуй все.

Сообщение отредактировал us4ilq - Вторник, 12.10.2010, 22:19
 
АвторДата: Вторник, 12.10.2010, 22:33 | Сообщение # 19
Автор сайта
Сообщений: 200
Репутация: 3
Город: Омск
Статус: Отсутствует
...ммм...atmega8535 я использую по причине, что она меня пока устраивает, в качестве подопытного экспоната. Конечно, когда будут серьезные проекты, типа какого - нибудь осциллографа, то нужно будет смотреть и другую, например серии ATXmegaxxx.

Кстати, Сергей, как вам статьи - доступно написано ( честность и критику приветствую )? Хочеться побольше мнений по статьям.



_____________________________________________________________
Радиоэлектроника и Программирование занимательная штука...
 
us4ilqДата: Вторник, 12.10.2010, 22:42 | Сообщение # 20
Опытный
Сообщений: 173
Репутация: 2
Город: Донецк
Статус: Отсутствует
Да так сразу и не скажеш
По крайней мере пока все довольно доступно, как мне кажется даже понятней чем у некоторых других авторов.
Однако вопросы все равно будут и много biggrin
Особенно у таких бестолковых как я biggrin biggrin biggrin
 
Форум » Форум mega-avr.ucoz.ru » Схемотехника на микроконтроллерах AVR » Барометр для дома
Страница 1 из 41234»
Поиск: