Зарегистрирован: Вт сен 30, 2014 21:47:05 Сообщений: 21
Рейтинг сообщения:0
Добрый день! Есть в наличии Atmega16, DHT11; Proteus и CodevisionAVR. Я только начинаю разбираться со всем с этим, так что не судите строго. Датчик подключен к ножке PD7. Написал функцию для работы с dht22 т.к. для CodevisionAVR не нашёл библиотеки. Но при моделировании схемы, выдается "0" температуры и влажности. Я так понимаю у меня ошибка в цикле считывая данных с датчика, прошу помочь отладить данный код, своих знаний на текущий момент не хватает это сделать. Спойлер
Код:
int D_1=123, D_2=456, D_3=789, D_4=012, D_5= 045;
unsigned int DHT_Read_Data(unsigned int *humidity, unsigned int *temp){ int data[50]; int counter = 0, sum = 0, i = 0; // Очистить массив контролльных сумм data[0] = data[1] = data[2] = data[3] = data[4] = 0; DDRD.7 = 1; // делаем вывод мк выходом // Подготока шины для передачи PORTD.7 = 1; delay_ms(250); // Инициализаруем передачу PORTD.7 = 0; // прижимаем к земле не менее чем на 18 мс delay_ms(20);
DDRD.7 = 0; // делаем выход мк входом delay_us(40); if (PIND.7 == 1) return 1; // если на входе всё ещё "1" то датчик так и не ответил delay_us(80); if (PIND.7 == 0) return 2; // если на линии по прежнему 0, то датчик умер // Если датчик жив и всё хорошо, идём дальше... while( PIND.7 == 0) { delay_us(80); // ждём появления нуля на шине первый раз while (counter <= 40) // принимаем 40 бит данных { while( PIND.7 == 0) { // запускаем по битовый приём if( PIND.7 == 1) { data[counter] = 0; } delay_us(40); // если 1 держится более 68 мкс, то передаётся 1 if (PIND.7 == 1) { data[counter] = 1; } delay_us(20); // ждём появления нуля на шине counter++; // увеличиваем счётчик на один } } } // пока сделал костыль для наглядности
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Project : Version : Date : 05.12.2014 Author : Company : Comments:
Chip type : ATmega16 Program type : Application AVR Core Clock frequency: 8,000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *******************************************************/
// Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); SFIOR=(0<<ACME);
// Alphanumeric LCD initialization // Connections are specified in the // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTA Bit 0 // RD - PORTA Bit 1 // EN - PORTA Bit 2 // D4 - PORTA Bit 4 // D5 - PORTA Bit 5 // D6 - PORTA Bit 6 // D7 - PORTA Bit 7 // Characters/line: 8 lcd_init(8);
while (1) { // Place your code here DHT_DDR = 1; DHT_OUT = 1; delay_ms(200); GetHumidity(); sprintf(lcd_buffer,"Humidity %d",data[0]); lcd_clear(); lcd_puts(lcd_buffer); } }
Зарегистрирован: Вт сен 30, 2014 21:47:05 Сообщений: 21
Рейтинг сообщения:0
oleg110592 писал(а):
код рассчитан на DHT11, в вашем протеусе DHT22
Я и DHT11 ставил, 22 это уже эксперимент был. Какая та магия это всё, но у меня так же показывает 0. Даже после установки Fuse битов для тактирования от внутреннего источника.
Зарегистрирован: Вт сен 30, 2014 21:47:05 Сообщений: 21
Рейтинг сообщения:0
oleg110592 писал(а):
мой вариант
Вложение:
DHT11_Mega16.zip
Большое спасибо, ваш код заработал. Сейчас ищу различия... Нашёл ошибку, я return поставил не туда и у меня вылетало. А чтобы применять dht22 что надо изменить? Т.к. посылки там в том же порядке и по 8 бит, а в протеусе абра-кадабра
Вот что то ну никак у меня не выходит заставить работать этот датчик на Mega8, сделал всё, как Вы сказали, показания температуры и влажности по нулям, помогите пожалуйста убогому
Проект протеуса во вложении, буду очень признателен...
Project : Version : Date : 18.06.2015 Author : Company : Comments:
Chip type : ATmega8 Program type : Application AVR Core Clock frequency: 8,000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *****************************************************/
Резистор R1 если убрать, то работает. В какой то документации написано про резистор 10K. В другой нет упоминаний о подтягивающем резисторе - без него в протеусе работает, надо пробовать в железе.
Зарегистрирован: Вт мар 08, 2016 18:37:33 Сообщений: 1
Рейтинг сообщения:0
Привет всем! Помогите пожалуйста переделать код, мне необходимо, чтобы МК (Atmega8) каждые 5 сек выводил значение (температуры и влажности) датчика (DHT11) на экран. Код в таком виде выводит значение датчика только при запуске на экран и все, при изменении показателей датчика ничего не происходит :dont_know: (код и схема в Proteus прилагается) Заранее благодарю за помощь :wink: компилятор используется AtmelStudio 6.2 [attachment=0]DHT11_Atmega8_proteus.rar[/attachment] [attachment=1]DHT11_Atmega8.zip[/attachment]
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 49
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения