Всё по DS18(B/S)20.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Всё по DS18(B/S)20.
Тотгда ответьте мне на вопрос - что значит "не показывает" ?
Совсем ?
Re: Всё по DS18(B/S)20.
С такими коментами, и остальным три сек все глаза проглядетьelf писал(а):я уже все глаза проглядел
Re: Всё по DS18(B/S)20.
Отвечаю:не показывает совсем-это когда совсем не показывает
А если серьезно то на выводах PORTD постоянно 0 вольт , при этом вывода PORTB меняют свое значения с частотой 125 кГц,тоесть можно предположить что динамическая индикация работает
-это хотели прочитать?
а забыл кода я делаю так:
sot = 1 ;
des = 2 ;
edi= 3 ;
то на семисигментнике тоже показывает "123"
А если серьезно то на выводах PORTD постоянно 0 вольт , при этом вывода PORTB меняют свое значения с частотой 125 кГц,тоесть можно предположить что динамическая индикация работает
а забыл кода я делаю так:
sot = 1 ;
des = 2 ;
edi= 3 ;
то на семисигментнике тоже показывает "123"
Re: Всё по DS18(B/S)20.
shads писал(а):С такими коментами, и остальным три сек все глаза проглядетьelf писал(а):я уже все глаза проглядел
Полностью согласен с Вами.Но я не знаю почему так получилось,может отдельным файлом надо выложить?
Re: Всё по DS18(B/S)20.
уже добавил.надеюсь это поможет 
- Вложения
-
- мой термометр.c
- (3.29 КБ) 414 скачиваний
Re: Всё по DS18(B/S)20.
Открой папку с проектом, потом в блокноте открой Сишный файл, оттуда скопируй нужный фрагмент и его вставляй в сообщение..... (эт так на будующее.....)elf писал(а):не знаю почему так получилось
Последний раз редактировалось shads Вт окт 02, 2012 23:38:56, всего редактировалось 1 раз.
Re: Всё по DS18(B/S)20.
shads писал(а):Открой папку с проектом, потом в блокноте открой Сишный файл, оттуда скопируй нужный фрагмент и его вставляй в сообщение.....
я так и делал
Re: Всё по DS18(B/S)20.
А у меня обычно такой эффект, если я копирую прямо из окна AVR Studio.....elf писал(а):я так и делал
Re: Всё по DS18(B/S)20.
О....... получилось
Код: Выделить всё
#include <mega8.h> //библиотека ввода\вывода
#include <delay.h> //библиотека задержки
#asm //сообщаем куда подключен датчик
.equ __w1_port=0x18; PORTC
.equ __w1_bit=7
#endasm
/* #asm //сообщаем куда подключён экран
.equ __lcd_port=0x12
#endasm
#include <lcd.h> //библиотека для LCD*/
#include <1wire.h> //библиотека работы с 1Wire
#include <ds18b20.h> //библиотека для работы с датчиком ds18b20
#include <stdio.h> //ненаю что за библиотека, но без неё неполучается
char lcd_buffer[33]; //масив с данными для экрана
int temp; //переменная для хранения температуры
unsigned char devices; //переменная в которой количество присоеденённых датчиков
unsigned char cifra [] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7d,0x07,0x7F,0x6F};// Массив кодов для формирования
char sot;//переменная сотен .....................
char des;//переменная десятков...................
char edi;//переменная единиц....................
////////////////ИНДИКАЦИЯ////////////////////////////////
int q;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
q++;//увеличиваем счётчик динамической индикации
switch(q) //Перебор отображаемого сейчас разряда
{case 1:PORTB=0b11101111;PORTD &= 0x80; PORTD|=cifra [edi];//вывод первой цифры
break;
case 2:PORTB=0b11011111;PORTD &= 0x80;PORTD|=cifra [des]; //вывод второй цифры
break;
case 3:PORTB=0b10111111;PORTD &= 0x80;PORTD|=cifra [sot];//вывод третьей цифры
q=0; //Когда подсвечен последний 3-й разряд счётчик обнуляем
break;}
if (q>=4)q=0;
}
///////////////////////////////////////////////////////////////////
///////////////////МЕРЯЕМ ТЕМПЕРАТУРУ//////////////////////////////
void temperature()
{
if(devices>0) //бесконечный цикл, если датчик подключон
{
temp=ds18b20_temperature(0); //читаем температуру
if (temp>1000){ //если датчик выдаёт больше 1000
temp=4096-temp; //отнимаем от данных 4096
temp=-temp; //и ставим знак "минус"
}
sot=(temp/100);
des =(temp%100)/10;
edi=(temp %100)%10;
delay_ms(500);
}
}
////////////////////////////////////////////////////////////////////////
void main(void)
{
PORTB=0b00000000;
DDRB =0b01110000;
PORTC=0x00;
DDRC=0x00;
PORTD=0xff;
DDRD=0xff;
TCCR0=0x03;// Clock value: 125,000 kHz
TCNT0=0x00;
TIMSK=0x01; // Timer(s)/Counter(s) Interrupt(s) initialization
/* lcd_init(16); //инициилизация LCD, и говорим что он на 16 символов*/
devices=w1_init(); //ищим датчики
// Global enable interrupts
#asm("sei")
while(1)
{ temperature();
/* sprintf(lcd_buffer,"%u - %u - %u",edi,des,sot); //записуемв масив для экрана температуру и всё такое
lcd_clear(); //чистим дисплей перед выводом
lcd_puts(lcd_buffer); //выводим масив на LCD
delay_ms(500);*/
}
}
Последний раз редактировалось Аlex Вт окт 02, 2012 23:43:11, всего редактировалось 1 раз.
Причина: тег CODE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Причина: тег CODE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Всё по DS18(B/S)20.
Вот с этого и надо было начинать свой вопросelf писал(а):Отвечаю:не показывает совсем-это когда совсем не показывает![]()
А если серьезно то на выводах PORTD постоянно 0 вольт , при этом вывода PORTB меняют свое значения с частотой 125 кГц,тоесть можно предположить что динамическая индикация работает-это хотели прочитать?
![]()
а забыл кода я делаю так:
sot = 1 ;
des = 2 ;
edi= 3 ;
то на семисигментнике тоже показывает "123"
125 Кгц - не многовато ? Это уже какая-то сверхдинамическая индикация получается
Re: Всё по DS18(B/S)20.
Аlex писал(а):Вот с этого и надо было начинать свой вопросelf писал(а):Отвечаю:не показывает совсем-это когда совсем не показывает![]()
А если серьезно то на выводах PORTD постоянно 0 вольт , при этом вывода PORTB меняют свое значения с частотой 125 кГц,тоесть можно предположить что динамическая индикация работает-это хотели прочитать?
![]()
а забыл кода я делаю так:
sot = 1 ;
des = 2 ;
edi= 3 ;
то на семисигментнике тоже показывает "123"![]()
125 Кгц - не многовато ? Это уже какая-то сверхдинамическая индикация получается
хорошо сделаю меньше но тут причина не в индикации, а в чем я пока понять не могу
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Всё по DS18(B/S)20.
Именно в ней и причина, поверьте 
Re: Всё по DS18(B/S)20.
Аlex писал(а):Именно в ней и причина, поверьте
а почемк тогда "123" показывает-что-то я не догоняю
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Всё по DS18(B/S)20.
Потому, что когда Вы показываете 123, Вы не работаете с шиной датчика. А код разделения на еденицы/десятки/сотни у Вас только тогда выполняется, когда датчиков больше нуля 
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Всё по DS18(B/S)20.
Это если Ваши функции для работы с шиной не запрещают прерывания.
Re: Всё по DS18(B/S)20.
Аlex писал(а):Это если Ваши функции для работы с шиной не запрещают прерывания.
Аlex, что мне надо написать сюда
TCCR0=0x03;
TCNT0=0x00;
????
я знаю ВЫ знаете
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Всё по DS18(B/S)20.
Честно, не знаю
Я только с ПИКами работаю.
Я только с ПИКами работаю.
Re: Всё по DS18(B/S)20.
Аlex писал(а):Честно, не знаю![]()
Я только с ПИКами работаю.
блин обидно-будем искать
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Всё по DS18(B/S)20.
А чё искать то ? Даташит откройте и почитайте как таймер настраивается. Если речь идёт про таймер, как я понял...
Re: Всё по DS18(B/S)20.
Ну да про таймер, а частота индикации какая должна быть?