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

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

Ссылки

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

Термометр к ПК через COM порт (продолжение, усовершенствованный вариант)
Привет, вот мои знакомые задали мне вопрос:"Вот ты исользуешь такой дорогой микроконтроллер, чтобы вывести температуру на комп, ведь в Инете есть схемы, которые можно реализовать с помощю 2 шт. КТ315". Да...Тут трудно с ними не согласиться. И я подумал, а не зделать ли так, чтобы можно было управльять паралельно еще и нагрузками. Ответ - МОЖНО!

Итак, приступим!

Запустим наш Code Vision AVR, создадим новый проект с помощью Wizard'a, сначала выбираем чип и частоту

ATmega8 и частота 8 МГц. Дальше выбираем порт С как выход.

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

И вот мы подошли к главному моменту - выбору и настройке USART, СОМ порта.

Все, мы настроили начальный код.

Дальше переписываем код на такой, или лучше удаляем все, что там было и вставляем вот это:

#include <mega8.h>
// 1 Wire Bus functions
#asm
.equ __w1_port=0x18 ;PORTB
.equ __w1_bit=0
#endasm
#include <1wire.h>
// DS1820 Temperature Sensor functions
#include <ds18b20.h>
// Standard Input/Output functions
#include <stdio.h>
// Declare your global variables here
void main(void)
{
char prin;
int temp;
unsigned char devices;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0x7F;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 19200
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x19;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// 1 Wire Bus initialization
devices=w1_init();
printf("Start Device\n\r");
while (1)
{
prin=getchar();
switch (prin)
{
case 49:
{
PORTC=getchar()-48;
break;
}
case 50:
{
temp=ds18b20_temperature(0); //читаем температуру
if (temp>1000)
{ //если датчик выдаёт больше 1000
temp=4096-temp; //отнимаем от данных 4096
temp=-temp; //и ставим знак "минус"
}
printf("Temp=%d\n\r",temp);
}

};
}
}

Компилируем, запускаем Proteus и рисуем следующую схемку и НЕ ЗАБУДЬТЕ В ТЕРМИНАЛЕ ВЫСТАВИТЬ СКОРОСТЬ ПОРТА 19200

Выбираем в микроконтроллере, где у нас .hex файл, дальше выставляем частоту 8 МГц.

Очень рекомендую не пользоваться фюзами, а ставить кварц и конденсаторы, во избежании неправильной работы.</SPAN></SPAN>
</P>

Инструкция:

1) чтобы управлять нагрузкой на порту С, нужно при включеном терминале на клавиатуре нажать 1 и еще клавишу, например 2, тогда загориться 2 светодиод, только не подумайте, что если нажать 3, тогда загориться только 3тий, нет, загориться 1 и 2, почему так, спросите вы. Отвечаю, дело в том что мы отсылаем на утройство ASCII код и работаем уже дальше с ним, тоесть в двоичной системе число 3 будет иметь вид 11000000. Так, но число 3 в ASCII означает 51, да совершенно верно, в программе мы используем функцию PORTC=getchar()-48; где от полученого кода мы отнимаем 48 и результат заносим на порт С.

2) Чтобы узнать температуру нужно на клавиатуре нажать кнопку 2 и через секунду мы получим данные состояния термодатчика. 

Вот пожалуй и все,все вопросы на форуме. Да, и еще с этого момента я буду выкладывать все исходные файлы, прошивки и проекты Proteus'a в раздел "Файлы".

Категория: Учимся работать с AVR | Добавил: my-avr (13.11.2008)
Просмотров: 12683 | Комментарии: 8 | Рейтинг: 4.0/2 |
Всего комментариев: 8
8 SpSpider  
0
не нужен датчик! ребята, есть ADC в МК, используйте его!
+ ------
| |
(резистор) ----- (терморезистор)----МК
| |
- -----

7 Сергей Пауков  
0
если кто знает что нужно сделать, пожалуйста напишите!! ICQ: 362598851 анти-спам:2 помогите добрым словом человеку:)))

6 Сергей Пауков  
0
Добрый день!! очень нужна ваша помощь!! Спросить не у кого.
Собрал схему, МК передает данные на компьютер, а обратно не слышит!! самое интересное, что в протусе работает, а в жизни - нет.
т.е. микроконтролллер не принимает данные с компьюьтера, он ждет getchar()
и еще, к примеру мне нужно сделать так, что бы МК работал как хост, а не как клиент, к примеру если я хочу автомобильный компьютер подключить к микроконтроллеру, то что мне нужно для этого сделать?
внимательно читаю даташит, там про 1-Wire написано.
Использую МК Atmega8. в даташите написано, что для приема нужно обнулить UDR, я не знаю как это сделать.

5 dimamukhin  
0
Собрал по схеме конструкцию , скопировал текст - скомпилировал , запускаю - терминал ничего не показывает cry

Что может быть ?


4 IROBOT  
0
у меня есть исходник с выводом на usart,но мне наджо переделать на выход жки.
первый вопрос был от меня тока я ещё не зарегился тогда

3 IROBOT  
0
Извиняюсь что долго не отвечал ,хочу приёмник keeloq сделать с выводом принятого кода на жки 1602.

2 my-avr  
0
А что за датчик? можно о датчике поподробнее, какие данные с него поступают.

1 DIVER SANT  
0
Скажите пожалуйста вот тут пример с датчика температурного ,а мне вот например с радиомодуля нужно данные снять, как это можно сделать?

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright My-AVR © 2024
Наша кнопка
У нас появилась кнопка, код кнопки:

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

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



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

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