Перейти к содержанию

Написание Кода Для Связки Atmega8+Dht11


Рекомендуемые сообщения

Собственно, задание в заголовке.

Т.к. сам только начинающий специалист, ума коду не дал.

Есть мк atmega8, есть датчик dht11.

Под эту связку нужен код, который сможет мониторить показания датчика и, в зависимости от их состояния, выдавать сигнал на заданные выходы мк.

Стоимость задания обговариваем с конечным исполнителем, но на золотые горы рассчитывать не стоит, скажу сразу, т.к прекрасно понимаю объем работы.

Код должен быть на си, с функцией проверки типа температуры t() и влажности h(), которую я сам потом смогу использовать уже в своем коде в дальнейшем.

Жду предложений.

Изменено пользователем kamatozrost
Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Александр, нужен Си, т.к....

...ума коду не дал...

, а в итоге нужно...

...я сам потом смогу использовать уже в своем коде в дальнейшем...

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Честно говоря, изучение авр-ок начал именно с асма. Но отсутствие быстрого и доступного аналога _delay_ms на данном этапе - единственный ограничивающий изучение ассемблера фактор

Мужчины, спасибо всем за пинок) полез копать ассемблер)

Ссылка на комментарий
Поделиться на другие сайты

Из понимания сути передачи информации. Понимаю, как должно быть, но не понимаю, как, хотя отдельные (не очень объёмные, на секунду) блоки кода вполне поддаются освоению

Тему короче говоря можно считать закрытой. Для себя контакты нашёл нужные, знания приобрёл. Всем спасибо за участие

Ссылка на комментарий
Поделиться на другие сайты

  • 10 месяцев спустя...

Привет всем!

Помогите пожалуйста переделать код, :umnik2: мне необходимо, чтобы МК (Atmega8) каждые 5 сек выводил значение (температуры и влажности) датчика (DHT11) на экран.

Код в таком виде выводит значение датчика только при запуске на экран и все, при изменении показателей датчика ничего не происходит :unknw: (код и схема в Proteus прилагается)

Заранее благодарю за помощь

компилятор используется AtmelStudio 6.2

файл dht11.c
#define F_CPU 1000000UL
#include <stdio.h>
#include <string.h>
#include <avr/io.h>
#include <util/delay.h>
#include "dht11.h"
#define DHT11_ERROR 255
/*
* get data from dht11-получить данные из DHT11
*/
uint8_t dht11_getdata(uint8_t select)
{
uint8_t bits[5];
uint8_t i,j = 0;
memset(bits, 0, sizeof(bits));
//reset port
DHT11_DDR |= (1<<DHT11_INPUTPIN); //output
DHT11_PORT |= (1<<DHT11_INPUTPIN); //high
_delay_ms(100);
//send request
DHT11_PORT &= ~(1<<DHT11_INPUTPIN); //low - низкая
_delay_ms(18);
DHT11_PORT |= (1<<DHT11_INPUTPIN); //high - высокая
_delay_us(1);
DHT11_DDR &= ~(1<<DHT11_INPUTPIN); //input - вход
_delay_us(39);
//check start condition 1 - начала проверки состояния 1
if((DHT11_PIN & (1<<DHT11_INPUTPIN)))
{
 return DHT11_ERROR;
}
_delay_us(80);

//check start condition 2 - начала проверки состояния 2
if(!(DHT11_PIN & (1<<DHT11_INPUTPIN)))
{
 return DHT11_ERROR;
}
_delay_us(80);
//read the data
for (j=0; j<5; j++) { //read 5 byte
 uint8_t result=0;
 for(i=0; i<8; i++) {//read every bit - читать каждый бит
  while(!(DHT11_PIN & (1<<DHT11_INPUTPIN))); //wait for an high input _ ждать высокой входной
  _delay_us(30);
  if(DHT11_PIN & (1<<DHT11_INPUTPIN)) //if input is high after 30 us, get result- если вход имеет высокий уровень после 30-ти нас, получить результат
   result |= (1<<(7-i));
  while(DHT11_PIN & (1<<DHT11_INPUTPIN)); //wait until input get low
 }
 bits[j] = result;
}
//reset port
DHT11_DDR |= (1<<DHT11_INPUTPIN); //output
DHT11_PORT |= (1<<DHT11_INPUTPIN); //low
_delay_ms(100);
//check checksum - проверять контрольную сумму

if (bits[0] + bits[1] + bits[2] + bits[3] == bits[4]) {
 if (select == 0) { //return temperature - температура возвращаемого теплоносителя
  return(bits[2]);
 } else if(select == 1){ //return humidity - возвращение влажности
  return(bits[0]);
 }
}
return DHT11_ERROR;
}
/*
* get temperature (0..50C) - получить температуру
*/

int8_t dht11_gettemperature()
{

uint8_t ret = dht11_getdata(0);
if(ret == DHT11_ERROR)
 return -1;
else
 return ret;
}
/*
* get humidity (20..90%) - получить влажность
*/
int8_t dht11_gethumidity()
{

uint8_t ret = dht11_getdata(1);
if(ret == DHT11_ERROR)
 return -1;
else
 return ret;
}

файл dht11.h

#ifndef DHT11_H_
#define DHT11_H_

#include 
#include 

//setup parameters
#define DHT11_DDR DDRC
#define DHT11_PORT PORTC
#define DHT11_PIN PINC
#define DHT11_INPUTPIN PC5

extern int8_t dht11_gettemperature();
extern int8_t dht11_gethumidity();

#endif

файл mayn.c

#include 
#include 
#include "lcd_lib.h"
#include "dht11.h"
#include 


char buffer[8];

int main( void )
{

// Инициализация LCD
LCDinit();

// Выключаем курсоор
LCDcursorOFF();

// Очищаем дисплей
LCDclr();

int8_t temperature = 0;
int8_t humidity = 0;


while(1)
{

humidity = dht11_gethumidity();
temperature = dht11_gettemperature();

LCDGotoXY(0,0);
sprintf(buffer, "T=%02d", temperature);
LCDstring(buffer,4);

LCDGotoXY(0,1);
sprintf(buffer, "H=%02d", humidity);
LCDstring(buffer,4);

}

}

Ссылка на комментарий
Поделиться на другие сайты

Почему-то так и происходит (см. "очередной" пост 12). Это как уметь виртуозно управлять автомобилем, но никогда не заглядывая под капот, в случае поломки на дороге, ждать эвакуатора,не имея возможности отремонтировать поломку самому, в дороге. Наверное поэтому в правах стали указывать "только с автоматической коробкой передач".

Не беру во внимание специалистов, прошедших всестороннее изучение МК.

Ссылка на комментарий
Поделиться на другие сайты

Решение:

while(1)
{
...
_delay_ms(5000);
}

Вообще говоря, показания должны отображаться оперативно, а не только при запуске, т.к. опрос и вывод данных зациклены.

Изменено пользователем солар

Я не раздаю удочки. Я продаю рыбу.

Ссылка на комментарий
Поделиться на другие сайты

Почему-то так и происходит (см. "очередной" пост 12). Это как уметь виртуозно управлять автомобилем, но никогда не заглядывая под капот, в случае поломки на дороге, ждать эвакуатора,не имея возможности отремонтировать поломку самому, в дороге. Наверное поэтому в правах стали указывать "только с автоматической коробкой передач".

Не беру во внимание специалистов, прошедших всестороннее изучение МК.

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

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

Ссылка на комментарий
Поделиться на другие сайты

Если честно, не пойму тебя, marinovsoft, для чего поднимать высказанное год назад мнение. Поспорить? Это лишь мое мнение, сформировавшееся из наблюдений за участниками форума, начинающих программировать МК сразу на Си и объясняющих свой выбор "простотой" языка (якобы заморачиваться не надо). Но как показывает наблюдение, чаще всех задают "чайные" вопросы именно пишущие на Си.

Ссылка на комментарий
Поделиться на другие сайты

Проехали. Замучал меня клиент сегодня. Вижу тему, читаю сообщения, а что сообщения некоторые устарели даже внимания не обратил.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...