Понедельник, 29.04.2024, 16:16
Приветствую Вас Гость | RSS
MoneyAndScheme - всегда на связи
Форма входа
Поиск
Наш опрос
Оцените мой сайт
Всего ответов: 9
Друзья сайта
  • Форекс 5$+
  • Сообщество uCoz
  • FAQ по системе
  • Letitbit.net
  • Лучший обменник Рунета
  • Новая cистема электронных денег
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Помощь на развитие
          WMID 139003794797

      Z366324094545   E153534398979   R381824402414

                                                       Buy with VirtaPay

    Кредиты, обмен WM
    Обмен WebMoney
      Отдадите:  
      Получите:  

    Лучшие товары мира
    Бесплатная доставка в Кыргызстан

    Список разработок админа: генераторы сигналов,
    счетчики частоты, осциллограф, любые модификации
    термометров, инкубатор, дозатор сырья, блок обработки
    и передачи информации на компьютер, станок для заточки
    пил, кожемер, универсальный дешифратор для токарного
    станка, кодовый замок, 1 проводная клавиатура, мультиметр и
    информационный блок для автомобиля.
    Все это вы можете заказать у нас или выслать нам свою идею для реализации.
    _____________________________________________________________

     

    Термометр на atmega8 со множеством датчиков, два дисплея выводят температуру датчиков и их порядковый номер



    Код проекта в CODEVISION AVR



    /*****************************************************

    Chip type : ATmega8
    Program type : Application
    Clock frequency : 4,000000 MHz
    Memory model : Small
    External RAM size : 0
    Data Stack size : 256
    *****************************************************/

    #include
    #asm
    .equ __w1_port=0x12 ;PORTD
    .equ __w1_bit=6
    #endasm
    #include <1wire.h> //бібліотека для роботи з 1wire
    #include //бібліотека для роботи з ds18b20
    #include //бібліотека пауз
    #define digit1 PORTD.4 //живлення 1 індикатора
    #define digit2 PORTD.5 //живлення 2 індикатора
    #define digit3 PORTD.7 //живлення 3 індикатора
    #define digit4 PORTD.0
    #define digit5 PORTD.1
    #define MAX_DS18b20 12

    //unsigned char cnt=0;

    flash char digits[] = { //массив с цифрами
    0b00000011, //0
    0b10011111, //1
    0b00100101, //2
    0b00001101, //3
    0b10011001, //4
    0b01001001, //5
    0b01000001, //6
    0b00011111, //7
    0b00000001, //8
    0b00001001, //9
    0b11111101, //знак мінус
    0b11111111 //пусто
    };

    char digit_out[5],cur_dig;

    signed int temperature; //переменная для температуры

    signed int big_ctr; // большой счетчик

    unsigned char j; // переменная для циклов, число датчиков
    unsigned char u;
    unsigned char k;
    unsigned char devices;
    unsigned char rom_code[MAX_DS18b20][9];

    //interrupt [EXT_INT0] void ext_int0_isr(void)
    //{
    // if(cnt<99) ++cnt;

    //}

    //interrupt [EXT_INT1] void ext_int1_isr(void)
    //{
    // if(cnt>0) --cnt;

    //}

    // Timer 2 overflow interrupt service routine
    interrupt [TIM2_OVF] void timer2_ovf_isr(void)
    {
    switch (cur_dig)
    {
    case 0:{digit5=0;digit1=1;break;}; //включаєм цифру 3
    case 1:{digit1=0;digit2=1;break;}; //включаєм цифру 2
    case 2:{digit2=0;digit3=1;break;}; //включаєм цифру 1
    case 3:{digit3=0;digit4=1;break;};
    case 4:{digit4=0;digit5=1;break;};
    }
    PORTB=digits[digit_out[cur_dig]];
    cur_dig++;
    if (cur_dig==5) cur_dig=0;
    }

    void hex_to_dec(void);

    void main(void)
    {

    PORTB=0x00;
    DDRB=0xFF;
    PORTC=0x00;
    DDRC=0xFF;
    PORTD=0x00;
    DDRD=0x7F;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: 62,500 kHz
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x04;
    TCNT2=0x00;
    OCR2=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x40;

    //GICR|=0xC0;
    //MCUCR=0x0A;
    //GIFR=0xC0;

    devices=w1_search(0xf0,rom_code); //ищем все подключенные датчики

    #asm("sei") //разрешаем прерывания

    while (1) //цикл опроса датчиков
    {

    big_ctr++;

    if (big_ctr == 1){ // выводим температуру датчика 1
    j=0; u=1;
    }
    else if (big_ctr == 4){ // выводим температуру датчика 2
    j=1; u=2;
    }
    else if (big_ctr == 8){ // выводим температуру датчика 3
    j=2; u=3;
    }
    else if (big_ctr == 12){ // выводим температуру датчика 4
    j=3; u=4;
    }
    else if (big_ctr == 16){ // выводим температуру датчика 5
    j=4; u=5;
    }
    else if (big_ctr == 20){ // выводим температуру датчика 6
    j=5; u=6;
    }
    else if (big_ctr == 24){ // выводим температуру датчика 7
    j=6; u=7;
    }
    else if (big_ctr == 28){ // выводим температуру датчика 8
    j=7; u=8;
    }
    else if (big_ctr == 32){ // выводим температуру датчика 9
    j=8; u=9;
    }
    else if (big_ctr == 36){ // выводим температуру датчика 10
    j=9; u=0; k=1;
    }
    else if (big_ctr == 40){ // выводим температуру датчика 11
    j=10; u=1; k=1;
    }
    else if (big_ctr == 44){ // выводим температуру датчика 12
    j=11; u=2; k=1;
    }

    if (big_ctr > 48){
    big_ctr = 0; u=0; k=0;
    }



    temperature=ds18b20_temperature(&rom_code[j][0]);
    //читаем температуру с датчика номер - j

    if(temperature>1000){
    temperature=4096-temperature;
    temperature=-temperature;
    }

    if (temperature!=-9999)
    hex_to_dec();


    };
    }


    void hex_to_dec(void)
    {
    char i;
    int temp;

    if (temperature>=90){
    PORTC.0=1;
    }
    else PORTC.0=0;

    if (temperature<1000) {
    temp=temperature;
    i=0;
    while (temp>=100){
    temp=temp-100;
    i++;
    };
    if(temperature<100)i=11;
    digit_out[0]=i;
    i=0;
    while (temp>=10){
    temp=temp-10;
    i++;
    };
    if(temperature<10)i=11;
    digit_out[1]=i;
    digit_out[2]=temp;
    digit_out[4]=u;
    digit_out[3]=k;
    }
    else
    {
    temp=-temperature/1;
    i=0;
    while (temp>=10){
    temp=temp-10;
    i++;
    };
    if(-temperature/1<10)i=11;
    digit_out[1]=i;
    digit_out[2]=temp;
    digit_out[0]=10;

    }
    }


    Термометр на atmega8 с 3 датчиками, три дисплея выводят температуру каждого датчика на свой дисплей



    Код проекта в CODEVISION AVR



    /*****************************************************

    Chip type : ATmega8
    Program type : Application
    Clock frequency : 4,000000 MHz
    Memory model : Small
    External RAM size : 0
    Data Stack size : 256
    *****************************************************/

    #include
    #asm
    .equ __w1_port=0x12 ;PORTD
    .equ __w1_bit=5
    #endasm
    #include <1wire.h> //бібліотека для роботи з 1wire
    #include //бібліотека для роботи з ds18b20
    #include //бібліотека пауз
    #define digit1 PORTC.5 //живлення 1 індикатора
    #define digit2 PORTC.4 //живлення 2 індикатора
    #define digit3 PORTC.3 //живлення 3 індикатора
    #define digit4 PORTD.3//
    #define digit5 PORTD.7//
    #define digit6 PORTD.6//
    #define digit7 PORTC.2//
    #define digit8 PORTC.1//
    #define digit9 PORTC.0//
    #define MAX_DS18b20 3

    flash char digits[] = { //массив с цифрами
    0b10000000, //0
    0b11110010, //1
    0b01001000, //2
    0b01100000, //3
    0b00110010, //4
    0b00100100, //5
    0b00000100, //6
    0b11110000, //7
    0b00000000, //8
    0b00100000, //9
    0b11111100, //знак мінус
    0b11111110 //пусто
    };

    char digit_out[9],cur_dig;

    signed int temperature; //переменная для температуры

    signed int big_ctr; // большой счетчик

    unsigned char k=90; //аварийная температура
    unsigned char j; // переменная для циклов, число датчиков
    unsigned char devices;
    unsigned char rom_code[MAX_DS18b20][9];

    // Timer 2 overflow interrupt service routine
    interrupt [TIM2_OVF] void timer2_ovf_isr(void)
    {
    switch (cur_dig)
    {
    case 0:{digit9=0;digit1=1;break;};
    case 1:{digit1=0;digit2=1;break;};
    case 2:{digit2=0;digit3=1;break;};
    case 3:{digit3=0;digit4=1;break;};
    case 4:{digit4=0;digit5=1;break;};
    case 5:{digit5=0;digit6=1;break;};
    case 6:{digit6=0;digit7=1;break;};
    case 7:{digit7=0;digit8=1;break;};
    case 8:{digit8=0;digit9=1;break;};
    }
    PORTB=digits[digit_out[cur_dig]];
    cur_dig++;
    if (cur_dig==9) cur_dig=0;
    }

    void hex_to_dec(void);

    void main(void)
    {

    PORTB=0x00;
    DDRB=0xFF;
    PORTC=0x00;
    DDRC=0xFF;
    PORTD=0x00;
    DDRD=0xEF;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x03; //частота обновления
    TCNT2=0x00;
    OCR2=0x00;
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x40;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;

    devices=w1_search(0xf0,rom_code); //ищем все подключенные датчики

    #asm("sei") //разрешаем прерывания

    while (1) //цикл опроса датчиков
    {

    big_ctr++;

    if (big_ctr == 1){ // выводим температуру датчика 1
    j=0;
    }
    else if (big_ctr == 2){ // выводим температуру датчика 2
    j=1;
    }
    else if (big_ctr == 3){ // выводим температуру датчика 3
    j=2;
    }

    if (big_ctr > 3){
    big_ctr = 0;
    }



    temperature=ds18b20_temperature(&rom_code[j][0]);
    //читаем температуру с датчика номер - j

    if(temperature>1000){
    temperature=4096-temperature;
    temperature=-temperature;
    }

    if (temperature!=-9999)
    hex_to_dec();


    };
    }


    void hex_to_dec(void)
    {
    char i;
    int temp;

    if (j==0){

    if (temperature>=k){
    PORTD.0=1;
    }
    else PORTD.0=0;

    if (temperature<1000) {
    temp=temperature;
    i=0;
    while (temp>=100){
    temp=temp-100;
    i++;
    };
    if(temperature<100)i=11;
    digit_out[0]=i;
    i=0;
    while (temp>=10){
    temp=temp-10;
    i++;
    };
    if(temperature<10)i=11;
    digit_out[1]=i;
    digit_out[2]=temp;
    }
    else
    {
    temp=-temperature/1;
    i=0;
    while (temp>=10){
    temp=temp-10;
    i++;
    };
    if(-temperature/1<10)i=11;
    digit_out[1]=i;
    digit_out[2]=temp;
    digit_out[0]=10;
    }
    };
    //второй индикатор
    if (j==1){
    if (temperature>=k){
    PORTD.1=1;
    }
    else PORTD.1=0;
    if (temperature<1000) {
    temp=temperature;
    i=0;
    while (temp>=100){
    temp=temp-100;
    i++;
    };
    if(temperature<100)i=11;
    digit_out[3]=i;
    i=0;
    while (temp>=10){
    temp=temp-10;
    i++;
    };
    if(temperature<10)i=11;
    digit_out[4]=i;
    digit_out[5]=temp;
    }
    else
    {
    temp=-temperature/1;
    i=0;
    while (temp>=10){
    temp=temp-10;
    i++;
    };
    if(-temperature/1<10)i=11;
    digit_out[4]=i;
    digit_out[5]=temp;
    digit_out[3]=10;
    }
    };
    //третий индикатор
    if (j==2){
    if (temperature>=k){
    PORTD.4=1;
    }
    else PORTD.4=0;
    if (temperature<1000) {
    temp=temperature;
    i=0;
    while (temp>=100){
    temp=temp-100;
    i++;
    };
    if(temperature<100)i=11;
    digit_out[6]=i;
    i=0;
    while (temp>=10){
    temp=temp-10;
    i++;
    };
    if(temperature<10)i=11;
    digit_out[7]=i;
    digit_out[8]=temp;
    }
    else
    {
    temp=-temperature/1;
    i=0;
    while (temp>=10){
    temp=temp-10;
    i++;
    };
    if(-temperature/1<10)i=11;
    digit_out[7]=i;
    digit_out[8]=temp;
    digit_out[6]=10;
    }
    };
    }


    Инкубатор на ATMEGA16 со стабилизацией установленной, усредненной по трем датчикам температурой, выставляемые диапазоны, проверка резервного источника питания, сигнализация и охлаждение по требованию, и авто переворот яиц.



    Код проекта в CODEVISION AVR



    #include
    #asm
    .equ __w1_port=0x12 ;PORTD
    .equ __w1_bit=7
    #endasm
    #include <1wire.h>
    #include
    #include
    #define digit1 PORTA.5
    #define digit2 PORTA.6
    #define digit3 PORTA.7
    #define digit4 PORTA.4
    #define MAX_DS18b20 3
    #define ADC_VREF_TYPE 0x40

    float temperature,jj; //переменная для температуры
    char pp; // переменная переключения подпрограмм
    int w=300,w1,w2,rr,k=6,t11,p,t,e,e1;
    char i,y;
    int temp,ff1,ff2,ff3,mm;

    //кнопка переключения меню
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    e1=0;
    delay_ms(200); // сглаживание дребезга
    pp=pp+1;
    if (pp==10){pp=0;}
    }

    // считываем результат преобразования АЦП
    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input|ADC_VREF_TYPE;
    // Начинаем преобразование
    ADCSRA|=0x40;
    // немного подождем АЦП - работает
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    return ADCW;
    }

    flash char digits[] = { //массив с цифрами
    0b01001000, //0
    0b01111110, //1
    0b11000100, //2
    0b01100100, //3
    0b01110010, //4
    0b01100001, //5
    0b01000001, //6
    0b01111100, //7
    0b01000000, //8
    0b01100000, //9
    0b11111101, //знак -
    0b11111111, //пробел
    0b01010010, //hour
    0b01001111, //напряжение
    0b11000011, //температура
    0b10001001, //секунда
    0b01001101, //нижний предел
    0b11100010 //верхний предел
    };

    // Timer 2 overflow interrupt service routine
    interrupt [TIM2_OVF] void timer2_ovf_isr(void)
    {
    e=e+1;
    e1=e1+1;
    if (e1==70){e1=0;pp=0;} // время работы меню до сброса
    if (e==15){e=0;} // секунда
    if (e==14){t11=t11-1;} // отсчет установленных минут

    //====================================== переворот
    if (p==0){
    if((t11<40)&&(t11>3)){
    PORTB.2=1;}
    if(t11<=2){
    t11=t;
    p=1;
    PORTB.2=0;
    }
    }

    if (p==1){
    if((t11<40)&&(t11>3)){
    PORTB.3=1;}
    if(t11<=2){
    t11=t;
    p=0;
    PORTB.3=0;
    }
    }

    }

    char digit_out[4],cur_dig;

    int big_ctr; // большой счетчик
    unsigned int Vin,W,yy; // переменная для значения АЦП
    unsigned char j; // переменная для циклов, число датчиков
    unsigned char devices;
    unsigned char rom_code[MAX_DS18b20][9];
    // прерывание по переполнению таймера
    // для вывода значений на индикаторы
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    switch (cur_dig)
    {
    case 0:{digit4=0;digit1=1;break;}; //включаем цифру 4
    case 1:{digit1=0;digit2=1;break;}; //включаем цифру 3
    case 2:{digit2=0;digit3=1;break;}; //включаем цифру 2
    case 3:{digit3=0;digit4=1;break;}; //включаем цифру 1
    }
    PORTC=digits[digit_out[cur_dig]];
    cur_dig++;
    if (cur_dig==4) cur_dig=0;
    if ((pp==1)&&(cur_dig==2)){PORTC^=0b01000000;}
    if ((pp==3)&&(cur_dig==2)){PORTC^=0b01000000;}
    if ((pp==0)&&(cur_dig==2)){PORTC^=0b01000000;}
    if ((pp==5)&&(cur_dig==2)){PORTC^=0b01000000;}
    if ((pp==6)&&(cur_dig==2)){PORTC^=0b01000000;}
    if ((pp==7)&&(cur_dig==2)){PORTC^=0b01000000;}
    if ((pp==8)&&(cur_dig==2)){PORTC^=0b01000000;}
    if ((pp==9)&&(cur_dig==2)){PORTC^=0b01000000;}
    }

    void hex_to_dec(void);

    void main(void)
    {
    int c1=90,c2=150;

    PORTA=0x00; //
    DDRA=0xFA; //
    PORTB=0x00; //
    DDRB=0xFF; //
    PORTC=0xFF; //
    DDRC=0xFF; //
    PORTD=0x7F; //
    DDRD=0x40; //
    TCCR0=0x03; //
    TCNT0=0x00; //
    OCR0=0x00; // НАСТРОЙКА УЗЛОВ МИКРОКОНТРОЛЛЕРА
    GICR|=0x40; //
    MCUCR=0x02; //
    MCUCSR=0x00; //
    GIFR=0x40; //
    TIMSK=0x41; //
    ACSR=0x80; //
    SFIOR=0x00; //
    ADMUX=ADC_VREF_TYPE; //
    ADCSRA=0x85; //
    ASSR=0x00; //
    TCCR2=0x07; //
    TCNT2=0x00; //
    OCR2=0x00; //

    //ищем все подключенные датчики
    devices=w1_search(0xf0,rom_code);

    #asm("sei") //разрешаем прерывания

    while (1)
    {
    //============================================
    while(pp==1){ //цикл опроса кнопок установки
    // и вывода значения регулируемой температуры
    if((PIND.0==0)&&(w<400)){
    delay_ms(500);
    w=w+1;
    e1=0;

    }
    if((PIND.1==0)&&(w>200)){
    delay_ms(500);
    w=w-1;
    e1=0;

    }
    //-------------------------------------------- вывод

    if (w<1000) {
    rr=w;
    i=0;
    while (rr>=100){
    rr=rr-100;
    i++;
    };
    if(w<100)i=11;
    digit_out[0]=i;
    i=0;
    while (rr>=10){
    rr=rr-10;
    i++;
    };
    if(w<10)i=11;
    digit_out[1]=i;
    digit_out[2]=rr;
    digit_out[3]=14;
    }
    //--------------------------------------------
    }
    //============================================

    //============================================
    while(pp==2){ //цикл опроса кнопок
    //установки и вывода часов
    if((PIND.0==0)&&(k<12)){
    delay_ms(500);
    k=k+1;
    t=k*3600;
    t11=t;
    e1=0;
    }
    if((PIND.1==0)&&(k>1)){
    delay_ms(500);
    k=k-1;
    t=k*3600;
    t11=t;
    e1=0;
    }

    //-------------------------------------------- вывод
    if (k<1000) {
    rr=k;
    i=0;
    while (rr>=100){
    rr=rr-100;
    i++;
    };
    if(k<100)i=11;
    digit_out[0]=i;
    i=0;
    while (rr>=10){
    rr=rr-10;
    i++;
    };
    if(k<10)i=11;
    digit_out[1]=i;
    digit_out[2]=rr;
    digit_out[3]=12;
    }
    //--------------------------------------------
    }
    //============================================


    //============================================
    while(pp==3){

    //-------------------------------------------- вывод
    if (Vin<1000) {
    rr=Vin;
    i=0;
    while (rr>=100){
    rr=rr-100;
    i++;
    };
    if(Vin<100)i=11;
    digit_out[0]=i;
    i=0;
    while (rr>=10){
    rr=rr-10;
    i++;
    };
    if(Vin<10)i=11;
    digit_out[1]=i;
    digit_out[2]=rr;
    digit_out[3]=13;
    }
    //--------------------------------------------
    }

    //============================================
    while(pp==4){

    //-------------------------------------------- вывод
    yy=t11/60;
    if (yy<1000) {
    rr=yy;
    i=0;
    while (rr>=100){
    rr=rr-100;
    i++;
    };
    if(yy<100)i=11;
    digit_out[0]=i;
    i=0;
    while (rr>=10){
    rr=rr-10;
    i++;
    };
    if(yy<10)i=11;
    digit_out[1]=i;
    digit_out[2]=rr;
    digit_out[3]=15;
    }
    //--------------------------------------------
    }
    //============================================

    //============================================
    while(pp==5){ //цикл опроса кнопок установки
    // и вывода нижнего предела аварийного напряжения
    if((PIND.0==0)&&(c1<110)){
    delay_ms(500);
    c1=c1+1;
    e1=0;
    }
    if((PIND.1==0)&&(c1>80)){
    delay_ms(500);
    c1=c1-1;
    e1=0;
    }

    //-------------------------------------------- вывод
    if (c1<1000) {
    rr=c1;
    i=0;
    while (rr>=100){
    rr=rr-100;
    i++;
    };
    if(c1<100)i=11;
    digit_out[0]=i;
    i=0;
    while (rr>=10){
    rr=rr-10;
    i++;
    };
    if(c1<10)i=11;
    digit_out[1]=i;
    digit_out[2]=rr;
    digit_out[3]=17;
    }
    //--------------------------------------------
    }
    //============================================

    //============================================
    while(pp==6){ //цикл опроса кнопок установки и
    //вывода верхнего предела аварийного напряжения
    if((PIND.0==0)&&(c2<200)){
    delay_ms(500);
    c2=c2+1;
    e1=0;
    }
    if((PIND.1==0)&&(c2>120)){
    delay_ms(500);
    c2=c2-1;
    e1=0;
    }

    //---------------------------- вывод
    if (c2<1000) {
    rr=c2;
    i=0;
    while (rr>=100){
    rr=rr-100;
    i++;
    };
    if(c2<100)i=11;
    digit_out[0]=i;
    i=0;
    while (rr>=10){
    rr=rr-10;
    i++;
    };
    if(c2<10)i=11;
    digit_out[1]=i;
    digit_out[2]=rr;
    digit_out[3]=16;
    }
    //--------------------------------------------
    }
    //============================================

    //============================================
    while(pp==7){

    //------------------------------ вывод датчик 1
    if (ff1<1000) {
    rr=ff1;
    i=0;
    while (rr>=100){
    rr=rr-100;
    i++;
    };
    if(ff1<100)i=11;
    digit_out[0]=i;
    i=0;
    while (rr>=10){
    rr=rr-10;
    i++;
    };
    if(ff1<10)i=11;
    digit_out[1]=i;
    digit_out[2]=rr;
    digit_out[3]=1;
    }
    //--------------------------------------------
    }

    //============================================

    //============================================
    while(pp==8){

    //------------------------------ вывод датчик 2
    if (ff2<1000) {
    rr=ff2;
    i=0;
    while (rr>=100){
    rr=rr-100;
    i++;
    };
    if(ff2<100)i=11;
    digit_out[0]=i;
    i=0;
    while (rr>=10){
    rr=rr-10;
    i++;
    };
    if(ff2<10)i=11;
    digit_out[1]=i;
    digit_out[2]=rr;
    digit_out[3]=2;
    }
    //--------------------------------------------
    }

    //============================================

    //============================================
    while(pp==9){

    //-------------------------------- вывод датчик 3
    if (ff3<1000) {
    rr=ff3;
    i=0;
    while (rr>=100){
    rr=rr-100;
    i++;
    };
    if(ff3<100)i=11;
    digit_out[0]=i;
    i=0;
    while (rr>=10){
    rr=rr-10;
    i++;
    };
    if(ff3<10)i=11;
    digit_out[1]=i;
    digit_out[2]=rr;
    digit_out[3]=3;
    }
    //--------------------------------------------
    }

    //===========================================


    w1=w-2; //диапазон регулировки установленной температуры
    w2=w+2;
    //===================== заносим в переменную значение АЦП
    Vin =((read_adc(0)*5/102)*5.3);

    //----------------------- сигнал по напряжению и температуре
    if (Vin else if (Vin>c2){PORTA.3=1;}
    else if (jj>=400){PORTA.3=1;}
    else if (jj<=350){PORTA.3=1;}
    else PORTA.3=0;
    //-----------------------
    //================================ цикл опроса датчиков
    big_ctr++;

    if (big_ctr == 1){ // выводим температуру датчика 1
    j=0;
    }
    else if (big_ctr == 2){ // выводим температуру датчика 2
    j=1;
    }
    else if (big_ctr == 3){ // выводим температуру датчика 3
    j=2;
    }


    if (big_ctr > 3){
    big_ctr = 0;
    }

    temperature=ds18b20_temperature(&rom_code[j][0]);
    //читаем температуру с датчика номер - j


    if(temperature>1000){
    temperature=4096-temperature;
    temperature=-temperature;
    }

    if (temperature!=-9999)

    hex_to_dec();


    };
    }

    void hex_to_dec(void)
    {
    temperature=temperature*10;

    if (mm<=w1){ //включение нагревателя при достижении
    //минимума уст. температуры
    PORTB.4=1;
    PORTD.6=0;
    }
    if (mm>w2){ //выключение нагревателя при достижении
    //максимума уст. температуры
    PORTB.4=0;
    PORTD.6=1;
    }

    jj=temperature;

    if (j==0){ff1=temperature;}
    if (j==1){ff2=temperature;}
    if (j==2){ff3=temperature;}

    mm=((ff1+ff2+ff3)/devices);

    if (mm<1000) {
    temp=mm;
    i=0;
    while (temp>=100){
    temp=temp-100;
    i++;
    };
    if(mm<100)i=11;
    digit_out[0]=i;
    i=0;
    while (temp>=10){
    temp=temp-10;
    i++;
    };
    if(mm<10)i=11;
    digit_out[1]=i;
    digit_out[2]=temp;
    digit_out[3]=11;
    }
    }