Вторник, 19.11.2019, 01:55
Микроконтроллерная техника AVR
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Помоги сайту
Поддержи наш сайт
Через WebMoney
U222865683087
R391933670808
Z877043628365
E649133782052

или пополни нашу SMS копилку
SMS.копилка

Ссылки

 Каталог статей
Главная » Статьи » Учимся работать с AVR

Простой термометр на LCD (DS18B20)
Привет.
Вот в этом уроке я покажу вам как быстро спаять простой термометр.
Для этого нам понадобиться ATMega8, LCD(16*2), DS18B20, печатная плата, панелька для микроконтроллера.

Итак, приступим, сначала откроем Code Vision AVR.
Создаем новый проект, без использования мастера, потом создаем текстовый документ с расширением ".с"
и добавляем туда следующий код:

 #include <mega8.h>               //библиотека ввода\вывода
#include <delay.h>               //библиотека задержки
#asm                             //сообщаем куда подключен датчик
        .equ __w1_port=0x15; PORTC
        .equ __w1_bit=3
#endasm                 
#asm                             //сообщаем куда подключён экран
    .equ __lcd_port=0x18
#endasm
#include <lcd.h>                 //библиотека для LCD
#include <1wire.h>               //библиотека работы с 1Wire
#include <ds18b20.h>             //библиотека для работы с датчиком ds18b20
#include <stdio.h>               //ненаю что за библиотека, но без неё неполучается
char lcd_buffer[33];             //масив с данными для экрана
void main(void)                 
{
unsigned char devices;         //переменная в которой количество присоеденённых датчиков
int temp;                        //переменная для хранения температуры
lcd_init(16);                    //инициилизация LCD, и говорим что он на 16 символов
devices=w1_init();               //ищим датчики
while(devices>0)                 //бесконечный цикл, если датчик подключон
      {
          temp=ds18b20_temperature(0);  //читаем температуру 
          if (temp>1000){               //если датчик выдаёт больше 1000
             temp=4096-temp;            //отнимаем от данных 4096
             temp=-temp;                //и ставим знак "минус"
          }
          sprintf(lcd_buffer,"t=%i.%u\xdfC",temp,temp%1);    //записуемв масив для экрана температуру и всё такое
          lcd_clear();                //чистим дисплей перед выводом
          lcd_puts(lcd_buffer);        //выводим масив на LCD
          delay_ms(500);              //ждём 500мс
      };
}

потом компилируем и выбираем частоту 8 МГц.
Прошиваем, и еще прошиваем фюзы на ту же частоту

Дальше дело за аппаратной частью,

Вот и все, 15 минут и термометр готов!!!

Схема и прошивка принадлежит Kirk99

Категория: Учимся работать с AVR | Добавил: my-avr (07.09.2008)
Просмотров: 101300 | Комментарии: 67 | Рейтинг: 4.2/19 |
Всего комментариев: 671 2 3 4 5 6 »
67 ejhggasjak  
Разобрался!!!

Оказывается, в используемом мной даташите на mega328p указаны адреса IO-регистров, увеличенные на 0x20! В других мануалах такие значения приводятся в скобках. Было достаточно внимательнее прочитать второе примечание к таблице "35. Register Summary" на странице 430: «I/O Registers within the address range 0x00 - 0x1F are directly bit-accessible using the SBI and CBI instructions. In these registers, the value of single bits can be checked by using the SBIS and SBIC instructions». Уменьшил значения на 0x20, скомпилировал, собрал, залил и… вуаля:

rgho.st/67vk2vJRz
rgho.st/7MDvgp7GR
rgho.st/7nhTH7z8g

66 ejhggasjak  
Ошибся:
PORTB у mega328p 0x25

65 ejhggasjak  
Собрал схему, запустил прогу на tiny4313, всё работает, но эта крошечная прога съела около 60% флешки. Изначально хотел запустить на mega328p, но там номера портов более 0x20: PORTB 0x24, PORTC 0x28, PORTD 0x2B. Компилятор CVAVR ругается на сроки с командами SBI и CBI: «Operand 1 out of range». Как написано в мануале: «The CBI and SBI instructions work with registers 0x00 to 0x1F only». Настройки компилятора изменять пытался -- не помогло. Эти команды в LCD.LIB заменил на соответствующие группы команд in - ori - out и in - andi - out, так решил часть проблемы. Но оставшиеся проблемные 12 строк, связанные с 1-Wire, где нет либы с ассемблерным текстом, изменить пока не смог -- среди них есть SBIC и SBIS, да и компилировать измененный листинг ведь как-то надо будет... Что подскажете?

64 Никополо  
смотрите ответ к сообщению 7, на предыдущей страницы, скорее всего, неправильно выставлены фьюзы (не отзеркальте). Настройка фьюзов на стр.30 тех.док. В протеусе они выставляются при двойном щелчке по микроконтроллеру, в CVAvr в Chip Programmer'e справа снизу, в AVR Studio они выставляются и программируются также в специальной вкладке.

58 Artur  
Есть ли датчики с диапазоном до +250 или +300? или как прицепить терморезистивный датчик?

59 HiSER  
Генератор тока + ОУ и снимать значения с помощью ADC.

60 Artur  
кажется должно быть проще. я видел продаются готовые с диапазоном -40 +250 только вот хочу сам сделать

61 HiSER  
Вариант, как делитель VCC-[]-SIG-[TERM]-GND, SIG на ADC.
Ну и точность соответствующая...

56 serj  
Подключил 4-ре датчика DS18B20 к Atmeg16. Сами датчики определяются, считываются в первом цикле. Во втором цикле и далее первый датчик выдает -9999. Если вывожу только три датчика, то первый показывает правильную температуру. Также программа работает если вместо третьего вывожу четвертый датчик. Можно одновременно выводить на LCD (WH1604) только три датчика. В чем причина? Программа написана в CVAVR с использованием стандартных библиотек. Датчики вывожу (и считываю) как float.

57 HiSER  
что за привычка писать проблемы в комментарии?
для этого есть форум...

54 Merlin  
А инклюды, библиотеки тот исходник безполезен без них

55 HiSER  
Для твоего сведения это стандартные библиотеки CVAVR.

52 Merlin  
хм, а где собственно исходники?

53 HiSER  
по середине статьи!

51 lameruga3957  
Залит мой проект термометра с точностью 0.1 градусов на DS18B20 и дисплее Nokia3310 на http://zalil.ru/31294573

50 lameruga3957  
Что-то я не вижу, как прицепить тут файл, подскажите,кто знает.

1-10 11-20 21-30 31-40 41-50 51-55
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright My-AVR © 2019
Наша кнопка
У нас появилась кнопка, код кнопки:

Лаборатория самоделок на микроконтроллерах AVR

Форма входа
Наш опрос
Какой МК вы используете?
Всего ответов: 3207
Статистика/Друзья
CY-PR.com



Онлайн всего: 1
Гостей: 1
Пользователей: 0

РадиоКОТ - популярно об электронике. Авторские схемы, новые разработки. Обучение по электронике, микроконтроллерам, ПЛИС. Форум Сайт по радиоэлектронике. У нас все просто и интересно… ARV Reserch: Электроника — просто, полезно, увлекательно. Электронные устройства и программные средства для радиолюбителей и профессионалов, только авторские разработки, плагиата нет! Разработки на заказ. AVR projects Создание электронных роботов своими руками Схемы и программы на AVR http://ur5yfv.ucoz.ua/BANNER.gif Блог начинающего эмбеддера. Дай волю паяльнику! Самоделки на all-make.ru Принципиальные схемы Модулі автозапуску бензогенератора та системи АВР, електромонтажні роботи
Хостинг от uCoz