Например TDA7294

Форум РадиоКот • Просмотр темы - Терморегулятор на PIC16F628А, mikroC PRO
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб дек 20, 2025 16:30:54

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 16 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Терморегулятор на PIC16F628А, mikroC PRO
СообщениеДобавлено: Ср ноя 23, 2011 11:45:58 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пт фев 05, 2010 20:47:51
Сообщений: 38
Рейтинг сообщения: 0
помогите с проблемой, мерцанием показаний


Вложения:
Комментарий к файлу: проект
TEST.rar [26.71 KiB]
Скачиваний: 480

_________________
http://roma4ka.at.ua/
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
СообщениеДобавлено: Ср ноя 23, 2011 15:01:33 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4594
Откуда: Планета Земля
Рейтинг сообщения: -1
Медали: 1
Получил миской по аватаре (1)
Вы, видмо, где-то в основном цикле на долго запрещаете прерывания.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
СообщениеДобавлено: Ср ноя 23, 2011 15:21:09 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пт фев 05, 2010 20:47:51
Сообщений: 38
Рейтинг сообщения: 0
Аlex писал(а):
Вы, видмо, где-то в основном цикле на долго запрещаете прерывания.

запрет прерывания только при посылке команд на датчик, без этого не как (

_________________
http://roma4ka.at.ua/


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
СообщениеДобавлено: Ср ноя 23, 2011 15:34:16 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4594
Откуда: Планета Земля
Рейтинг сообщения: -1
Медали: 1
Получил миской по аватаре (1)
Roma4ka писал(а):
без этого не как (
Прерывания нужно запрещать только на основную часть тайм-слота, которая критична к увеличению задержек. Фтопку встроенные ф-ии, только свои.
Сделайте хотя-бы через каждую команду, а не через несколько.
Кстати, у Вас частота на каждый индикатор = ~28Гц, это очень мало.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
СообщениеДобавлено: Ср ноя 23, 2011 15:39:18 
Сверлит текстолит когтями
Аватар пользователя

Карма: 22
Рейтинг сообщений: 81
Зарегистрирован: Пн дек 08, 2008 10:58:48
Сообщений: 1262
Откуда: Винница
Рейтинг сообщения: -1
можно. например, при индикации какое -то время вы уверены, что 10 мс у вас есть или сколько там.
Ставьте флаг - разрешение - запрет работы в прерывании ,а в основном цикле анализируйте, сначала ожидайте запрета, он пройдет - и у вас есть время для работы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
СообщениеДобавлено: Вс ноя 27, 2011 23:22:19 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пт фев 05, 2010 20:47:51
Сообщений: 38
Рейтинг сообщения: 0
помогите, почему 16F628A внутреннего генератора на 4MHz при работе с датчикам DS18B20 показывает 0,00
Код:
/*
'*******************************************************************************
' Description:
     The temperature most be displayed on the digits (7 segments) in this method (00,0C)
' Test configuration:
'    MCU:                        PIC16F628A
' Configuration Word
'    Oscillator:                 INTOSC: I/O on
'    Watchdog Timer:             OFF
'    Power up Timer:             Disabled
'    Master Clear Enable:        Enabled
'    Browun Out Detect:          Enabled
'    Low Voltage Program:        Disabled
'    Data EE Read Protect:       Disabled
'    Code Protect:               OFF
'*******************************************************************************
*/

#define DS18B20 &PORTA,4

#define Relay_On()  RA7_bit=1;
#define Relay_Off() RA7_bit=0;



unsigned short mask(unsigned short num){
switch (num) {
case 0 : return 0x50;
case 1 : return 0xD7;
case 2 : return 0x62;
case 3 : return 0x46;
case 4 : return 0xC5;
case 5 : return 0x4C;
case 6 : return 0x48;
case 7 : return 0xD6;
case 8 : return 0x40;
case 9 : return 0x44;
}
}
/*******Endless mask***********/
unsigned short shifter,portb_index;
unsigned short portb_array[4]={0x79,0x50,0xC0,0x43};
char ROMCODE [8]={0x28, 0x30, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x8E} ;
unsigned value;
bit state;
bit oldstate;int m=0,key=0;

void interrupt()
{
RA0_bit=0;RA1_bit=0;RA2_bit=0;RA3_bit=0;
PORTB = portb_array[portb_index];
switch (portb_index) {
  case 0:{RA0_bit=0;RA1_bit=0;RA2_bit=0;RA3_bit=1;}break;
  case 1:{RA0_bit=0;RA1_bit=0;RA2_bit=1;RA3_bit=0;}break;
  case 2:{RA0_bit=0;RA1_bit=1;RA2_bit=0;RA3_bit=0;}break;
  case 3:{RA0_bit=1;RA1_bit=0;RA2_bit=0;RA3_bit=0;}break;
}
portb_index ++ ;
if (portb_index > 3)
portb_index = 0;                     //turn on 1st, turn off 2nd 7 seg.;
TMR0 = 0;                            //reset TIMER0 value;
INTCON = 0x20;
}

extern unsigned sensor(){
unsigned tem,temp1,temp2;
int i;
    INTCON.GIE = 0;             //Disable interrupt;
    Ow_Reset (DS18B20);        //one wire reset signal;
    Ow_Write (DS18B20, 0xCC);  //Issue command to DS18B20;
    Ow_Write (DS18B20, 0X44);  //Issue command to DS18B20;
    INTCON.GIE = 1;             //Enable interrupt;
    Delay_ms(500);              //Wait for conversion complete;
    INTCON.GIE = 0;
    Ow_Reset(DS18B20);
    Ow_Write(DS18B20, 0x55);
    for(i=0; i<=7; i++)Ow_Write(DS18B20,ROMCODE[i]);
    Ow_Write(DS18B20, 0xBE);
    temp1 =  Ow_Read(DS18B20);
    temp2 =  Ow_Read(DS18B20);
    INTCON.GIE = 1;
    tem = (temp2 << 8) + temp1;
    return tem;


}

 extern on_off(unsigned te)
 {
 unsigned  int tem,raz;
    tem=EEPROM_Read(0x01) << 4;
    raz=EEPROM_Read(0x02) << 4;
    Delay_ms(20);
    if (te!=0x0550){
        switch(state){
           case 0:{if(te<tem){Relay_On();}else {Relay_Off();state=1;}};break;
           case 1:{if(te<tem-raz){Relay_On();state=0;} else Relay_Off();};break;
           default:{state=1;};break;
        }
     }
return;
}



  void Display_Temperature(unsigned int temp2write) {
 char temp_whole;
 unsigned int temp_fraction;
  temp_whole = temp2write >> 4 ;
  temp_fraction  = temp2write ;
  temp_fraction &= 0x000F;
  temp_fraction *= 625;
  portb_array[0] = mask((temp_whole/10)%10);
  portb_array[1] = mask(temp_whole%10)&0xBF;
  portb_array[2] = mask(temp_fraction/1000);
  portb_array[3] = 0x78;

}
void temperatur(){  //температура нагрева
int p;
 p=Eeprom_Read(1);
 Delay_ms(20);
if (key>3){
   if (p==75){p=30;}else {p=p+5;}
    Eeprom_Write(1,p);
    Delay_ms(20);
   }
    portb_array[0]=mask((p/10)%10);
    portb_array[1]=mask(p%10)&0xBF;
    portb_array[2]=0xE4;
    portb_array[3]=0x78;


}
void razn(){ //разница
int p;
p=Eeprom_Read(2);
Delay_ms(20);
if (key>3){
   if (p>=20){p=0;}else {p++;}
   Eeprom_Write(2,p);
   Delay_ms(20);
   }
    portb_array[0]=0xE0;
    portb_array[1]=0xEF;
    portb_array[2]=mask((p/10)%10);
    portb_array[3]=mask(p%10);



}

 /*************подпрограмма обработки нажатия кнопок**************************/
void Control_Button(){


     if (Button(&PORTA, 6, 1, 0)) {               // Detect logical one
      oldstate = 1;
      if (key==0) {m++; if (m>2)m=0;}
      key++;
      }

    if (oldstate && Button(&PORTA, 6, 1, 1)) {   // Detect one-to-zero transition
      oldstate = 0;
      key=0;
    }

     switch (m) {
            case 0: Display_Temperature(value);break;
            case 1: {temperatur();} break;
            case 2: {razn();      } break;
            default: Display_Temperature(value);
     }
     

   



}

void InitMain() {
CMCON = 7;                          // Set AN pins to Digital I/O;
OPTION_REG = 0x80;                   // Set timer TMR0;
portb_index = 0;
shifter = 1;
TMR0 = 0;
INTCON = 0xA0;                       // Disable interrupt PEIE,INTE,RBIE,T0IE
PORTA = 0x00;
TRISA = 0x50;
TRISB = 0x00;                           // All port D pins are configured as outputs
PORTB = 0x00;                           // Turn off all display segments
PCON.OSCF = 1;   // Set internal oscillator frequency to 4 MHz
sensor();
Delay_ms(500);



}


void main()
{
InitMain();

do {
           value=sensor();

           Control_Button(); //обработка клавиш
          /* if ((value==0x0000)||(value>=0x0550)){
           Relay_Off(); 
           portb_array[0]=0x68;
           portb_array[1]=0xFF;
           portb_array[2]=0x50;
           portb_array[3]=0xE8;
}else    */
           on_off(value);
           Delay_ms(250);

    }while(1);
}


Вложения:
Комментарий к файлу: 628а
PIC16F628_2.rar [20.94 KiB]
Скачиваний: 266

_________________
http://roma4ka.at.ua/
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
СообщениеДобавлено: Вс ноя 27, 2011 23:50:50 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4594
Откуда: Планета Земля
Рейтинг сообщения: -1
Медали: 1
Получил миской по аватаре (1)
Можете выложить всю папку проекта вместе с исходниками и .cof файлом ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
СообщениеДобавлено: Пн ноя 28, 2011 09:53:41 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пт фев 05, 2010 20:47:51
Сообщений: 38
Рейтинг сообщения: 0
Аlex писал(а):
Можете выложить всю папку проекта вместе с исходниками и .cof файлом ?

к сожалению в проєкте нет такого файла, в архиве все что есть


Вложения:
Комментарий к файлу: прожект
PIC16F628.rar [153.71 KiB]
Скачиваний: 333

_________________
http://roma4ka.at.ua/
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
СообщениеДобавлено: Пн ноя 28, 2011 10:36:17 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4594
Откуда: Планета Земля
Рейтинг сообщения: -1
Медали: 1
Получил миской по аватаре (1)
Я так понял у Вас компилятор MicroC ? Скомпилил Ваш проект, попробовал запустить в протеусе, всё показывает.
У Вас где 00 показывает ? На железе или в протеусе ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Терморегулятор на микроконтроллере PIC16F84 датчикe DS18
СообщениеДобавлено: Пн ноя 28, 2011 10:52:52 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пт фев 05, 2010 20:47:51
Сообщений: 38
Рейтинг сообщения: 0
Аlex писал(а):
Я так понял у Вас компилятор MicroC ?

да я использую mikroC PRO for PIC :))

Аlex писал(а):
У Вас где 00 показывает ? На железе или в протеусе ?

если в протеусе свойствах PIC16F628a убрать 4MHz то показания будут 55,9С ... это ошибка
в железе показывает 00,0С

датчик испытаны в другом проекте.... работает на все 100%


Вложения:
Комментарий к файлу: Layout
628_2.lay [69.41 KiB]
Скачиваний: 350

_________________
http://roma4ka.at.ua/
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Терморегулятор на PIC16F84 mikroC PRO
СообщениеДобавлено: Пн ноя 28, 2011 11:13:42 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4594
Откуда: Планета Земля
Рейтинг сообщения: -1
Медали: 1
Получил миской по аватаре (1)
Значит, скорее всего, придётся писать свои ф-ии для работы с датчиком.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Терморегулятор на PIC16F628А, mikroC PRO
СообщениеДобавлено: Пн ноя 28, 2011 12:08:07 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пт фев 05, 2010 20:47:51
Сообщений: 38
Рейтинг сообщения: 0
так это связано с тем что внутренней генератор 628 не работает на 4MHz

скорость посылки и прием команд DS18B20 и 628 разная

_________________
http://roma4ka.at.ua/


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Терморегулятор на PIC16F628А, mikroC PRO
СообщениеДобавлено: Пн ноя 28, 2011 12:25:36 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4594
Откуда: Планета Земля
Рейтинг сообщения: -1
Медали: 1
Получил миской по аватаре (1)
Скорее всего. Т.е. не выдержаны таймауты в тайм-слотах.
И ещё, у Вас задержка между командой преобразования и командой чтения = 500 Мс, а нужно минимум 750.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Терморегулятор на PIC16F628А, mikroC PRO
СообщениеДобавлено: Пн ноя 28, 2011 18:55:53 
Держит паяльник хвостом

Карма: 6
Рейтинг сообщений: 61
Зарегистрирован: Вт сен 07, 2010 19:27:48
Сообщений: 927
Откуда: Ташкент
Рейтинг сообщения: 0
Roma4ka слегка ошибается - внутренний генератор в этом МК успешно работает на 4 МГц.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Терморегулятор на PIC16F628А, mikroC PRO
СообщениеДобавлено: Пн ноя 28, 2011 19:24:27 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пт фев 05, 2010 20:47:51
Сообщений: 38
Рейтинг сообщения: 0
borys писал(а):
Roma4ka слегка ошибается - внутренний генератор в этом МК успешно работает на 4 МГц.

в чем же тогда у меня ошибка при обмене данных с DS18B20
:dont_know:

_________________
http://roma4ka.at.ua/


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Терморегулятор на PIC16F628А, mikroC PRO
СообщениеДобавлено: Вт ноя 29, 2011 12:24:07 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4594
Откуда: Планета Земля
Рейтинг сообщения: -1
Медали: 1
Получил миской по аватаре (1)
Roma4ka, изучите 1-wire и реализуйте протокол сами, без всяких готовых библиотек. Только тогда уже можно будет понять в чём у Вас проблема. Хрен знает, что там делает эта библиотека... :roll:


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 16 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y