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

Attiny2313 + Ds18B20 + Индикатор


pavelok

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

Здравствуйте! Пытаюсь собрать простой термометр, вроде бы все написал, да только вот проблема: при моделировании в протеусе два правых индикатора мигают, а постоянно горит только 3й справа. Вот код:

#include <tiny2313.h>
#include <delay.h>
#asm
.equ __w1_port=0x12
.equ __w1_bit=3
#endasm
#include <1wire.h>
#include <ds18b20.h>
void set(int s)
{
int i,n;
int j;
unsigned int a[] = {0b11111100, 0b01100000, 0b11011010, 0b11110010, 0b01100110, 0b10110110, 0b10111110, 0b11100000, 0b11111110, 0b11110110};
unsigned int c;
n=1;
for (j=0; j<3; j++) {
c=a[s%10];
if (n==1) {PORTD.1=1; PORTD.2=1;}
if (n==2) {PORTD.0=1; PORTD.2=1; c=c+1;}
if (n==3) {PORTD.0=1; PORTD.1=1;}
PORTB.2=0;
for (i=0; i<8; i++)
{
PORTB.1=c%2;
PORTB.0=0;
PORTB.0=1;
c=c/2;
}
PORTB.2=1;
if (n==1) {PORTD.0=0;}
if (n==2) {PORTD.1=0;}
if (n==3) {PORTD.2=0;}
delay_ms(1);
n=n+1;
s=s/10;
}
}
void main(void)
{
PORTB=0x00;
DDRB=0xFF;
PORTD=0b11110111;
DDRD=0b11110111;

w1_init();

while (1)
 {
 int temp;
 temp=ds18b20_temperature(0)*10;
 set(temp);				
 }
}

Я так понимаю, что проблема возникла из-за задержки при чтении температуры:

temp=ds18b20_temperature(0)*10;

Собственно, как можно решить данную проблему?

Схема в Протеусе

h_1430841462_4824348_6e8d011937.png

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

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

Именно так. Вы в динамике выводите все разряды. Последний вывелся, функция завершилась, управление ушло на измерение температуры. Последний разряд - застыл. Бороться с этим - выводить разряды через равные промежутки времени.

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

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

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

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

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

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

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

динамическая индикация делается по прерыванию от таймер.

У любой команды есть время выполнения, а тем более у серии команд.

К тому же время преобразования датчиков DSxx, достаточно большое.

Учитывать надо!

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

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

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

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

Тут вот какое дело. Можно (вернее нужно), как выше сказали, динамич. индикацию в обработчике прерываний делать. Тогда работа с датчиком в основном цикле будет невозможна, т.к. этот цикл периодически будет "отвлекаться" на прерывания. Нужно ухитриться впихнуть работу с датчиком в процедуру - обработчик прерываний, чтобы "и волки сыты и овцы целы" были. С LCD1602 подобными проще, однако :)

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

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

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

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

Почему невозможна работа с датчиком в осовном цикле? В прерывание таймера (аппаратного) закидываете функцию обновления экрана, а в основном цикле фланговый автомат, к примеру, с программным таймером. Как по мне то для работы с этим датчиком очень удобно пользоваться именно им (программным таймером), так как преобразование окло 0,8с, если память не изменяет. Ждать это время обычным дилеем крайне не практично.

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

Делается проще. Индикацию вешаем на прерывания. А температуру измеряем раз в минуту. Ну моргнёт оно разок в минуту, никто и не заметит. Это если без заморотов.

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

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

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

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

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

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

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

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

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

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

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

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

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