Например TDA7294

Форум РадиоКот :: Просмотр темы - Измеритель микропроцессорный Овен 2ТРМ0
Форум РадиоКот
https://radiokot.ru/forum/

Измеритель микропроцессорный Овен 2ТРМ0
https://radiokot.ru/forum/viewtopic.php?f=20&t=25918
Страница 1 из 1

Автор:  geniusbsd [ Ср фев 10, 2010 09:51:41 ]
Заголовок сообщения:  Измеритель микропроцессорный Овен 2ТРМ0

День добрый очень нужна принципиальная схема сабжа, блока управления и индикации собрана на pic16c63A. На печатной плате надпись OWEN TRM25D3M

Автор:  Pashko [ Ср фев 10, 2010 11:06:31 ]
Заголовок сообщения: 

Никто тебе схему не даст. Это коммерческая тайна 8) Обратись сюда, может они тебе помогут.

Автор:  dosikus [ Ср фев 10, 2010 18:13:14 ]
Заголовок сообщения: 

Не зачем это все.
Помнится меня слезно просили срисовать блок АЦП от ТРМ138 , говоря , что прогу написать раз плюнуть .
Схему выложил и все глухо .

Автор:  geniusbsd [ Чт фев 18, 2010 10:13:21 ]
Заголовок сообщения: 

Нарисовал я схему сам ручками.
Изменил ее под свои задачи: заменил PIC на Atmega8 добавил часы DS1307

сей час пишу програмку возник вопрос, как проще при такой схеме организовать опрос клавиатуры

мой еще не доработанный код
Код:


#include <avr>
#include <avr>
#include <util>
#include "ds1307.c"
#include "1w.h"
#include "ds18x20.h"
#include "1w.c"
#include "7seg.h"
//#include "key.h"
#define F_CPU 8000000 // 8MHz 

uint8_t buf[9];   // массив для приема данных из датчика
int    t;
int des;
char znak;
volatile int g_cur_val = 0; 
static int n = 0;

void initialize_timer0() 


 TCCR0 |= (1 << CS01); // configure the prescaler for timer0     
 //TCCR1B = (1<<CS12) | (1<<CS10);
TCCR2 |= (1 << CS21);
//TIMSK |= (1 << TOIE0); // enable timer0 interrupt 
TIMSK = (1<<TOIE1) | (1<<TOIE0);
TCNT0 = 0; // initialize timer0 counter to 0 
TCNT2 = 0x01;




/** Получение температуры от датчика DS18S20.
 * Функция опрашивает датчик и возвращает ненулевое значение, если считывание успешно.
 * Температура возвращается в сотых долях градуса, т.е. значение в 100 раз больше, чем
 * температура в градусах цельсия.
 * @param temp - указатель на измеренную температуру
 * @return - результат опроса датчика (0 - была ошибка)
 */
static uint8_t temp_x100(int *temp) {
   uint8_t result = 1,               // результат опроса датчика
         crc;                   // контрольная сумма
   int16_t *tmp = (void*)buf;            // указатель на температуру, принятую из датчика
   int    t, tt;                  // вспомогательные переменные

   result = 1;
   ow_reset();                     // сброс 1-wire
   ow_write_byte(OW_SKIP_ROM_CMD);      // команда "пропустить адрес"
//   _delay_ms(1000);
   ow_write_byte(CMD_RD_SCRPAD);      // команда "считать регистры датчика"

   crc = 0;
   // чтение данных из датчика
   for(uint8_t i=0;i<9>>2);         // отбрасываем мл.бит температуры из датчика
      //   t = tt - 25 + (16 - buf[6])*100/16;
   //t = tt - 0.25 + ((buf[7]-buf[6])/buf[7]);   // это "стандартный" алгоритм извлечения долей градуса
  //   t = (buf[0] | (buf[1] <<8>>4) & 0x0F) | (( buf[1]<<4) & 0xF0);
//t = 100 * (*tmp)/16;
t = (buf[0] | (buf[1] << 8));

   //znak=(buf[1]); //если 0х00 то + если 0xFF то -
   //t = tt - 0.25 + ((buf[7]-buf[6])/buf[7]);
    //t=buf[1];
    //tt=buf[1];
   //t = 100 * (*tmp) / 16;   
      } else {
         // датчик типа DS18B20
   //   t = 100 * (*tmp) / 16;
      }
   }
   *temp = t;                  // заносим готовый результат в переменную-приемник
   // каков бы ни был результат опроса датчика, делаем повторный запуск измерения
   ow_reset();                     // сброс 1-wire


   ow_write_byte(OW_SKIP_ROM_CMD);      // команда "пропустить адрес"

   ow_write_byte(CMD_START_CONV);      // команда "начать измерение"

   ow_reset();                     // сброс 1-wire
   // возвращаем результат опроса датчика
   return result;
}

void dig_temp()
{

switch(n){
case 0:{PORTC = 0x00;
PORTD=znak;

PORTC = 0x08;break;}

case 1:{PORTC = 0x00;
PORTD=0xFF;
if (g_cur_val/10 % 10 <=0)
PORTD=0xFF;
else
seg7_write_digit(g_cur_val/10 % 10);
PORTC = 0x04;break;}

case 2:{PORTC = 0x00;
PORTD=0xFF;
seg7_write_digit(g_cur_val % 10);
PORTC = 0x02;break;}

case 3:{PORTC = 0x00;
PORTD=0xFF;
seg7_write_digit(des);

PORTC = 0x01;break;}


case 4:{ PORTC = 0x00;
PORTD=_comma;
PORTC = 0x02; break;}




}


n++;
if (n==5)
n=0;


}
void dig_time()
{

switch(n){
case 0:{PORTC = 0x00;
seg7_write_digit(hour/10);

PORTC = 0x08;break;}
case 1:{PORTC = 0x00;
seg7_write_digit(hour);

PORTC = 0x04;break;}

case 2:{PORTC = 0x00;
seg7_write_digit(min/10);

PORTC = 0x02;break;}

case 3:{PORTC = 0x00;
seg7_write_digit(min);

PORTC = 0x01;break;}

case 4:{ PORTC = 0x00;
PORTD=_comma;
PORTC = 0x04; break;}

}





n++;
if (n==5)
n=0;


}

ISR(TIMER0_OVF_vect) 
{   
dig_time();
////_delay_ms(10000);
//dig_temp();
}   


ISR(TIMER2_OVF_vect) 
{   
//dig_time();
////_delay_ms(10000);
dig_temp();


int main(void) {

   int cnt;   // температура в сотых долях градуса

//TCCR0 = _BV(CS01);
//TIMSK = _BV(TOIE0);
//   wdt_enable(WDTO_120MS);               // включаем WDT

//rtc_set_time(21,42,0,1);
   // инициализация периферии
   DDRB = ~_BV(0);
 
 DDRD = 0xFF; 
 DDRC = 0x0F; 
PORTD = 0x00; 
PORTC = 0; // disable control signals by default 
 
 initialize_timer0();   
rtc_init(0,1,0);
rtc_set_time(20,42,55,1);

   // при сбросе 1-wire происходит и настройка порта
   ow_reset();



   
   // первое обращение к датчику вернет ложное значение, но запустит цикл измерения
   temp_x100(&t);

sei();
   
   while(1){
rtc_get_date_time();
         _delay_ms(20);               // задержка в 20 мс
         if(!--cnt){                  // ведем подсчет 20-мс интервалов
         cnt = 40;               // если набралось в сумме 800 мс,
            if(!temp_x100(&t)){         // то можно читать температуру
            continue;            // и сразу на начало главного цикла
      }
            // если ошибки не было и включен 0-й режим - выводим температуру
     //if (buf[1]==0xFF)
   if (t<0x00)
   {
        t -= 2;           
        t ^= 0xFFFF;   
   g_cur_val=(t/16);
   //des=(t & 0x0F)*0.625;
   znak=_minus;
   }
   else
   {g_cur_val=t/16;
   znak=0xFF;
   }
   des=(t & 0x0F)*0.625;
   //   lcd_st(g_cur_val);

}
      }
   
}


Вложения:
Комментарий к файлу: Схема 2трм0 блок индикаци и контроля (без изменений)
2трм0_shm.rar [17.05 KiB]
Скачиваний: 680

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/