Страница 12 из 59

Re: Всё по DS18(B/S)20.

Добавлено: Вт окт 02, 2012 23:17:32
Аlex
Тотгда ответьте мне на вопрос - что значит "не показывает" ? :) Совсем ?

Re: Всё по DS18(B/S)20.

Добавлено: Вт окт 02, 2012 23:20:36
shads
elf писал(а):я уже все глаза проглядел :))
С такими коментами, и остальным три сек все глаза проглядеть :))

Re: Всё по DS18(B/S)20.

Добавлено: Вт окт 02, 2012 23:27:16
elf
Отвечаю:не показывает совсем-это когда совсем не показывает :))
А если серьезно то на выводах PORTD постоянно 0 вольт , при этом вывода PORTB меняют свое значения с частотой 125 кГц,тоесть можно предположить что динамическая индикация работает :)) -это хотели прочитать? :))
а забыл кода я делаю так:
sot = 1 ;
des = 2 ;
edi= 3 ;
то на семисигментнике тоже показывает "123" :))

Re: Всё по DS18(B/S)20.

Добавлено: Вт окт 02, 2012 23:28:37
elf
shads писал(а):
elf писал(а):я уже все глаза проглядел :))
С такими коментами, и остальным три сек все глаза проглядеть :))
Полностью согласен с Вами.Но я не знаю почему так получилось,может отдельным файлом надо выложить? :))

Re: Всё по DS18(B/S)20.

Добавлено: Вт окт 02, 2012 23:35:38
elf
уже добавил.надеюсь это поможет :))

Re: Всё по DS18(B/S)20.

Добавлено: Вт окт 02, 2012 23:36:38
shads
elf писал(а):не знаю почему так получилось
Открой папку с проектом, потом в блокноте открой Сишный файл, оттуда скопируй нужный фрагмент и его вставляй в сообщение..... (эт так на будующее.....)

Re: Всё по DS18(B/S)20.

Добавлено: Вт окт 02, 2012 23:38:02
elf
shads писал(а):Открой папку с проектом, потом в блокноте открой Сишный файл, оттуда скопируй нужный фрагмент и его вставляй в сообщение.....
я так и делал

Re: Всё по DS18(B/S)20.

Добавлено: Вт окт 02, 2012 23:40:30
shads
elf писал(а):я так и делал
А у меня обычно такой эффект, если я копирую прямо из окна AVR Studio.....

Re: Всё по DS18(B/S)20.

Добавлено: Вт окт 02, 2012 23:42:25
elf
О....... получилось :))



Код: Выделить всё

#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);*/ 
  
    }
    
      
  }

Re: Всё по DS18(B/S)20.

Добавлено: Вт окт 02, 2012 23:44:25
Аlex
elf писал(а):Отвечаю:не показывает совсем-это когда совсем не показывает :))
А если серьезно то на выводах PORTD постоянно 0 вольт , при этом вывода PORTB меняют свое значения с частотой 125 кГц,тоесть можно предположить что динамическая индикация работает :)) -это хотели прочитать? :))
а забыл кода я делаю так:
sot = 1 ;
des = 2 ;
edi= 3 ;
то на семисигментнике тоже показывает "123" :))
Вот с этого и надо было начинать свой вопрос :))

125 Кгц - не многовато ? Это уже какая-то сверхдинамическая индикация получается :)))

Re: Всё по DS18(B/S)20.

Добавлено: Вт окт 02, 2012 23:46:31
elf
Аlex писал(а):
elf писал(а):Отвечаю:не показывает совсем-это когда совсем не показывает :))
А если серьезно то на выводах PORTD постоянно 0 вольт , при этом вывода PORTB меняют свое значения с частотой 125 кГц,тоесть можно предположить что динамическая индикация работает :)) -это хотели прочитать? :))
а забыл кода я делаю так:
sot = 1 ;
des = 2 ;
edi= 3 ;
то на семисигментнике тоже показывает "123" :))
Вот с этого и надо было начинать свой вопрос :))

125 Кгц - не многовато ? Это уже какая-то сверхдинамическая индикация получается :)))
хорошо сделаю меньше но тут причина не в индикации, а в чем я пока понять не могу

Re: Всё по DS18(B/S)20.

Добавлено: Вт окт 02, 2012 23:47:09
Аlex
Именно в ней и причина, поверьте :)

Re: Всё по DS18(B/S)20.

Добавлено: Вт окт 02, 2012 23:50:10
elf
Аlex писал(а):Именно в ней и причина, поверьте :)
а почемк тогда "123" показывает-что-то я не догоняю :))

Re: Всё по DS18(B/S)20.

Добавлено: Вт окт 02, 2012 23:51:52
Аlex
Потому, что когда Вы показываете 123, Вы не работаете с шиной датчика. А код разделения на еденицы/десятки/сотни у Вас только тогда выполняется, когда датчиков больше нуля :)

Re: Всё по DS18(B/S)20.

Добавлено: Вт окт 02, 2012 23:54:27
Аlex
Это если Ваши функции для работы с шиной не запрещают прерывания.

Re: Всё по DS18(B/S)20.

Добавлено: Вт окт 02, 2012 23:56:48
elf
Аlex писал(а):Это если Ваши функции для работы с шиной не запрещают прерывания.
Аlex, что мне надо написать сюда
TCCR0=0x03;
TCNT0=0x00;
????
я знаю ВЫ знаете :))

Re: Всё по DS18(B/S)20.

Добавлено: Вт окт 02, 2012 23:57:50
Аlex
Честно, не знаю :))
Я только с ПИКами работаю.

Re: Всё по DS18(B/S)20.

Добавлено: Ср окт 03, 2012 00:01:04
elf
Аlex писал(а):Честно, не знаю :))
Я только с ПИКами работаю.
блин обидно-будем искать :))

Re: Всё по DS18(B/S)20.

Добавлено: Ср окт 03, 2012 00:03:45
Аlex
А чё искать то ? Даташит откройте и почитайте как таймер настраивается. Если речь идёт про таймер, как я понял...

Re: Всё по DS18(B/S)20.

Добавлено: Ср окт 03, 2012 00:05:02
elf
Ну да про таймер, а частота индикации какая должна быть?