Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с DS18s20 с IAR C++ 
:(
    Опции темы
EVSx1
Дата 2.8.2009, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 13.1.2008

Репутация: нет
Всего: нет



Написал код работы часов на Меге16 и 4хсемисегментниках,датчик температуры весит на PINB_Bit5 кнопка которая вызовет показ значения температуры на bit2 того же порта,мне интересно как организовывать работу 1wire на IAR C++,я хочу чтобы система всегда знала температуру независимо от того надо ли ее показывать,например каждые 5 секунд обновляла значения(это понимаю как реализовать),но если так делать как я подразумеваю,то будут сбиваться показания часов(отставание времени) т.к. на преобразование датчика надо 0.75с.
Больше всего волнует реализация 1wire,КодеВисион имеет встроенные файлы на 1820 а у IAR их нет,люди сами пишут...или каждый раз работать с регистрами и как работать с регистрами подсоединяемого устройства?
Схема
часть кода:
Код
//Часы с LED-индикацией на кварцевом резонаторе 8МГц
#include "iom16.h"
#include "intrinsics.h"
#include "katods.h"
#include "klasses.h"
digits P1;
char x,sec,min,hour,c_dig;
int temp;
extern char digit_out[4];
extern bool DIG[];

#pragma vector = TIMER0_COMP_vect //вывод на динамическую индикацию(100Гц)
  __interrupt void t0(void)
 {
   {
     x++;
     if(x==100) sec++;
     PORTA_Bit7=true;
   if (sec==60) min++ ;
    if (min==60) min=0, hour++ ;
    if (hour==24) hour=0;}
   {PORTD|=0x0F;
  PORTA=DIG[digit_out[c_dig]];
  switch (c_dig){
  case 0:{K1=0;break;};  
  case 1:{K2=0;break;};
  case 2:{K3=0;break;};  
  case 3:{K4=0;break;};
  }    
  c_dig++;                                     
  if (c_dig==4) c_dig=0;}
 
 }

#pragma vector = TIMER1_OVF_vect 
  __interrupt void t1(void)      //вытаскивание температуры 750мс
 {
    
        
 }

 
__C_task main()
   {
  SREG|=0x80;
  TIMSK = 0x02; 
  OCR0 = 8;
  TCCR1A = 0x05 ;
  TCCR0 = 0x05 ;
  
  
  while(1){
    {         //установка времени             
    if (!PINB_Bit1){     
                __delay_cycles(500);
          min++;
         if (min==60) min=0;                      
                  };                         
                                   
     if (!PINB_Bit0){ 
       __delay_cycles(500);
       hour++;
         if (hour==24) hour=0;                                                          
              };
 }
  P1.ind();   
  }
  
 }

Весь код:


Это сообщение отредактировал(а) EVSx1 - 2.8.2009, 00:07

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  clock.rar 1,50 Kb
PM MAIL   Вверх
kolobok0
Дата 3.8.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 24.12.2008

Репутация: нет
Всего: 2



Цитата(EVSx1 @ 2.8.2009,  00:04)
...т.к. на преобразование датчика надо 0.75с....каждый раз работать с регистрами и как работать с регистрами подсоединяемого устройства?...

первым делом надо скачать из инета даташит на этот датчик. вторым - внимательно прочитать про интерфейс 1-Wire.
По поводу преобразования самого датчика - никто Вас не заставляет это время чего-то ждать от термодатчика. В это время Вы можете работать себе параллельно и вся недолга. Как это сделать - тут уже дело вкуса, опыта, задачи, железа.

что значит работать с регистрами ds1820?
Вы пересылаете(читаете) через 1Wire команды и данные в(из) этого датчика. Как - ВСЁ есть в даташите от далласа. Обращу Ваше внимание на вот что:
внимательно ПРОЧИТАЙТЕ протокол 1Wire в разделе ЧТЕНИЯ из датчика. Именно про формировании сигнала. Увы из графиков даташита это не следует, только из описания. Из графиков видно КАК должен формироваться сигнал. Это первое. Второе - ЧЁТКО придерживайтесь временных задержек указанных в даташите. Это две частые проблемы тех, кто впервые сталкивается с ними.


удачи Вам
(круглый)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0405 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.