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

Атмега8 И Два Датчика Температуры Ds18B20


Юриг

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

Привет всем! Начал недавно програмировать мк. Сначало начал со светодиодов, теперь перешел на термометры. Гдето в интернете нашел исходник для термометра, немного переделав код под свои нужды он у меня заработал. Дальше захотелось больше, подключить два датчика температуры, но с этим возникли проблемы...

Собствено вот код термометра:

#include <mega8.h>
#include <delay.h>
#asm
.equ __w1_port=0x18; PORTB;
.equ __w1_bit=3;

#endasm
#include <1wire.h>
#include <ds18b20.h>

int temper;	
int number = 0;
int number1 = 0;
int number2 = 0;
int i=0;

interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{	
 PORTB.0=0;
 PORTB.1=0;
 if(i==0)
 {
	 number=number1;
	 PORTB.1=1;
	 i++;
 }
 else
 {
	 number=number2;
	 PORTB.0=1;
	 i=0;
 }			


 switch(number)
 {
	 case 0:{PORTD=0x3F; break;} // 11000000
	 case 1:{PORTD=0x6; break;} // 11111001
	 case 2:{PORTD=0x5B; break;} // 10100100
	 case 3:{PORTD=0x4F; break;} // 10110000
	 case 4:{PORTD=0x66; break;} // 10011001
	 case 5:{PORTD=0x6D; break;} // 10010010
	 case 6:{PORTD=0x7D; break;} // 10000010
	 case 7:{PORTD=0x7; break;} // 11111000
	 case 8:{PORTD=0x7F; break;} // 10000000
	 case 9:{PORTD=0x6F; break;} // 10010000
 }


}
void main(void)
{

PORTB=0xFF;
DDRB=0xFF;
PORTD=0xC0;
DDRD=0xFF;
TCCR1A=0x00;
TCCR1B=0x0A;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x10;
OCR1AL=0x46;
TIMSK=0x10;
w1_init();
#asm("sei")
PORTC=0x00;
DDRC=0xFF;
while (1)
 {

	 temper=ds18b20_temperature(0);
	 if (temper>1000)
	 {			
		 temper=4096.0-temper;		
		 temper=-temper;			
	 }

	 number1= temper/10;
	 number2= temper%10;
	 delay_ms(500);
	 if (temper>30)
	 {PORTC.1=1;
	 }
	 if (temper<30)
	 {PORTC.1=0;
 }

}

Теперь к этому коду нужно добавить следующие:

1. При неиспраности датчика выводить 1Er или 2Er, а если оба неисправны Err

2. Собственно подключить второй датчик.

3. Добавить сравнение температур, если t1>t2 PORTC.1=1, если меньше то выключен

3. Выводить информацию с датчиков поочередно: t1, t2, разность температур t1 и t2.

Паяю пальцы обжигаю...

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

http://www.masterkit...ds18b20-rus.pdf

Я купил пару таких датчиков, хотел попробовать, но пока руки не дошли. Хочу сделать на ассемблере, если что можно вместе.

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

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

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

Два датчика на одну линию, потребуется изрядно повозиться с "Поиск ROM" командой и обращаться потом к каждому датчику "по имени" (серийнику).

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

http://www.masterkit...ds18b20-rus.pdf

Я купил пару таких датчиков, хотел попробовать, но пока руки не дошли. Хочу сделать на ассемблере, если что можно вместе.

Про вместе я согласен, но только на СИ. Иначе не понимаю.

Еще по прошивке, термометр отказывается показывать отрицательные температуры. Где ошибка в коде?

Паяю пальцы обжигаю...

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

Если что вот как я делал на 2 датчика (для AVRSTUDIO4):

http://asis-kbr.ru/forum/viewtopic.php?f=11&t=126&sid=a91c2ec15bb7657bf5489431b473d55a

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

Если что вот как я делал на 2 датчика (для AVRSTUDIO4):

http://asis-kbr.ru/f...5489431b473d55a

А в какое место кода добавить сравнение температуры?

shads в Вашем коде не могу понять как написать эту зависимость

Вот так явно не пойдет...

if (temper1>temper2)

{PORTD.1=1;

}

if (temper1<temper2)

{PORTD.1=0;

Паяю пальцы обжигаю...

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

Вы в CVAVR пишете?

Там наверное не пойдет мой вариант, т.к. у меня применяются имена регистров, а CVAVR вроде их не признает...

Насчет сравнения, наверное можно так:

if (OneWireTermoData [0] < OneWireTermoData [1]) PORTD.1=1;

if (OneWireTermoData [0] > OneWireTermoData [1]) PORTD.1=0;

если опишите что именно нужно, могу из своего варианта выкинуть все лишнее, и подогнать под вас...

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

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

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

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

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

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

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

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

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

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

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