Jump to content

Термометр


 Share

Recommended Posts

Всем здравствуйте!

прошу помощи тк как я только учусь)))

вот код - собран из разных исходников и работает, но есть вопрос, который я так и не могу решить, точнее понять сути((

#include <mega8.h>               //библиотека ввода\вывода
#include <delay.h>               //библиотека задержки
#asm                             //сообщаем куда подключен датчик
       .equ __w1_port=0x15; PORTC
       .equ __w1_bit=3
#endasm                  
#asm                             //сообщаем куда подключён экран
   .equ __lcd_port=0x18
#endasm
#include <lcd.h>                 //библиотека для LCD
#include <1wire.h>               //библиотека работы с 1Wire
#include <ds18b20.h>             //библиотека для работы с датчиком ds18b20
#include <stdio.h>               //ненаю что за библиотека, но без неё неполучается
unsigned char buffer_1[16]={'T','E','R','M','O','M','E','T','R'};
unsigned char rom_code[8][9];    //масив с адресами найденых датчиков
char lcd_buffer[33];             //масив с данными для экрана
void main(void)                  
{
unsigned char devices, i;        //переменная в которой количество присоеденённых датчиков, и номер выбранного датчика
int temp;                        //переменная для хранения температуры
lcd_init(16);                    //инициилизация LCD, и говорим что он на 16 символов
PORTD = 0x00; //Выставляем все выходы порта D на 0, то есть, выключаем весь порт D
DDRD = 0xFF; 

PORTC.0=1;
devices=w1_search(0xf0,rom_code);   //ищим датчики, и записуем их адреса в масив
lcd_puts(buffer_1);
delay_ms(500);          
while(devices>0)                 //бесконечный цикл, если датчик подключон
     {   
         if(!PINC.0){           //Если нажата кнопка
             i++; 
                           //Увиличиваем переменную "i" на 1
             delay_ms(300);     //Ждём 300мс для "анти-дребезга"
         }
         if(i>=devices){        //Если "i" больше или равно найденым датчикам
         i=0;                   //тогда "i" равно нулю
         }
         temp=ds18b20_temperature(&rom_code[i][0]);  //читаем температуру с выбранного датчика
         if (temp>1000){               //если датчик выдаёт больше 1000
            temp=4096-temp;            //отнимаем от данных 4096
            temp=-temp;                //и ставим знак "минус"

         }
     if (temp<0)                          // устанавливаем нижней порог
        PORTD.0 = 1;    
        else PORTD.0=0;
      if (temp>1)                         // установим верхний порог
         PORTD.1=1;
      else PORTD.1=0;


         sprintf(lcd_buffer,"TEMP=%i.%u\xdfC",temp,temp%1);    //записуемв масив для экрана температуру и всё такое

        lcd_clear();                  //чистим дисплей перед выводом


         lcd_puts(lcd_buffer);         //выводим масив на LCD
         delay_ms(500);                //ждём 500мс
     };
}

как в данный код прикрутить функцию - которая по нажатию кнопки не только переключалась на другой датчик(у меня их 3) но и добавляла надпись на дисплей например дом улица и тд - что бы знать с какова датчика идет сигнал

всем заранее спасибо))

Link to comment
Share on other sites

if (temp>1000){ //если датчик выдаёт больше 1000

temp=4096-temp; //отнимаем от данных 4096

temp=-temp; //и ставим знак "минус"

}

Довольно странная конструкция, но если работает - пусть будет.

Возможно подойдет чтото вроде

********************************
   PORTD.1=1;
      else PORTD.1=0;

// sprintf(lcd_buffer,"TEMP=%i.%u\xdfC",temp,temp%1);    //записуемв масив для экрана температуру и всё такое
// это перенесем пониже, здесь - закомментируем
        lcd_clear();                  //чистим дисплей перед выводом
////// добавленный код /////////////////////////////////////////////
        if(i==0)sprintf(lcd_buffer,"1-U JLAT4UK");else
        if(i==1)sprintf(lcd_buffer,"2-U JLAT4UK");else
        if(i==2)sprintf(lcd_buffer,"3-U JLAT4UK");else sprintf(lcd_buffer,"OWU6KA B nporpamme");
// в lcd_buffer пишем номер датчика. Я контроллерного Си и дисплея
//         не знаю, может он и поддерживает русский шрифт,
//         поэтому написал транслитом. При желании можно переделать на англ. язык
        lcd_puts(lcd_buffer);
// аналогично вашей процедуре, вывод информации о номере датчика. Дальше, наверное, нужен перевод строки
//         но с этим вы разберетесь быстрее чем я.
        sprintf(lcd_buffer,"TEMP=%i.%u\xdfC",temp,temp%1);
// Вывод значения датчика (см выше) перенесем сюда
////////////////////////////////////////////////////////////////////
         lcd_puts(lcd_buffer);         //выводим масив на LCD
         delay_ms(500);                //ждём 500мс
     };
}

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Link to comment
Share on other sites

<stdio.h> это стандартная Си библиотека ввода вывода.

Объяви переменную char: char ukaz;

Вставь после else PORTD.1=0;

if ( i == 0 ) ukaz = 'U'; - улица

if ( i == 1 ) ukaz = 'D'; - дом

if ( i == 2 ) ukaz = 'S'; - температура внутри системника компа или что надо.

Строку sprintf(lcd_buffer,"TEMP=%i.%u\xdfC",temp,temp%1); надо изменить на

sprintf(lcd_buffer,"%c TEMP=%i.%u\xdfC",ukaz,temp,temp%1);

Если хочешь можешь оформить эти условия в функцию, также вместо if можно использовать switch case, короче вот так.

Будьте проще и люди к вам потянутся.

Link to comment
Share on other sites

Выгодные LED-драйверы MOSO для индустриальных приложений

Компэл представляет выгодные светодиодные драйверы MOSO для промышленных решений с высоким классом защиты от внешних воздействующих факторов, хорошей устойчивостью к импульсным помехам и высокой надежностью. В ряде серий реализована возможность дистанционного контроля, кроме того, отдельные версии драйверов могут программироваться на работу в автономном режиме по заранее заданному сценарию. Рассмотрим подробнее их характеристики. 

Читать статью>>

Спасибо большое так и думал , просто не знал повлияют ли еще доп дейсвие над переменной на точность результата

а конструкция минус 4096 - это только для DS18B20 - по даташиту иначе он минус не показывает

экспериментирую дальше))))))

Link to comment
Share on other sites

ER10450 – литий-тионилхлоридная батарейка FANSO EVE Energy формата ААА
Компания FANSO EVE Energy расширила номенклатуру продукции, разработав новый химический источник тока (ХИТ) – батарейку литий-тионилхлоридной электрохимической системы (Li-SOCl2; номинальное напряжение 3,6 В) типоразмера ААА – ER10450. Батарейка имеет бобинную конструкцию (тип Energy) и предназначена для долговременной работы при малых токах.
Батарейка может применяться в приборах учета ресурсов, в различных датчиках, устройствах IoT и в других приборах и устройствах, в которых требуется компактный ХИТ соответствующей емкости.
Подробнее >>

Новое семейство HRP/N3 от MEAN WELL – ИП с 350% перегрузкой для промышленных приложений

В промышленных устройствах и установках с электроприводом на двигателях постоянного тока в момент пуска требуется обеспечить повышенный ток. Для решения этой задачи MEAN WELL предлагает вместо ИП с повышенной избыточной мощностью, более оптимальное решение - источник питания с необходимой перегрузочной способностью семейства HRP/N3. 

Новое семейство, представленное в Компэл, экономичнее и расширяет уже существующее HRP/N в увеличении кратности перегрузки. Подробнее>>

А сравнение переменной с числом ее (переменную) не меняет.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Link to comment
Share on other sites

А какой-нибудь язык программирования знаете? Вроде ни в одном сравнение не меняет аргумент.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Link to comment
Share on other sites

По Си рекомендую книгу "Программирование на языке Си" автор Стефан Кочан, третье издание, отличная книга, всё разжёвано до предела, читается очень легко все примеры разобраны прям по строчно, где, что и как.

Будьте проще и люди к вам потянутся.

Link to comment
Share on other sites

Лучше с Асма, логика работы его программы более приближена к логике кристалла. Начинать точно лучше с него, тогда Си покажется безобидным и не страшным :-) Правда где найти книжку по началам асма - не знаю.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Link to comment
Share on other sites

К сожалению в электронке у меня её нету, но советую лучше купить бумажный вариант, у меня она всегда на столе лежит как справочник, потому что нет, нет да и забуду, что-нибудь, стоит в инете 250 рублей: http://www.home-relax.ru/good_book_1070766_3036814.html

Лучше с Асма, логика работы его программы более приближена к логике кристалла. Начинать точно лучше с него, тогда Си покажется безобидным и не страшным :-) Правда где найти книжку по началам асма - не знаю.

Кому как, мне так асм ни разу не понадобился всё время как-то Си хватало да я и не разрабатываю промышленные устройства. А когда говорят, что надо учить асм, чтобы понять устройство мк, то я могу то же сказать и про Си, устройство мк знать просто необходимо в любом случае. К тому же бытует мнение, что авр затачивались прямо таки под Си, не утверждаю т.к самому мне по душе ближе как-то PIC-и :rolleyes:, но в инете часто видел такие мнения.

Будьте проще и люди к вам потянутся.

Link to comment
Share on other sites

авр затачивались прямо таки под Си
А это как? Ведь как работает Си? Он преобразует входной код (в несколько этапов) в ассемблерный, а потом этот ассемблерный - в машинный, в чем можно убедиться, посмотрев файлы, которые он выдает (в AVR studio - *.lss). Но, конечно, отличия там не столь существенны, особенно для простых применений (светодиодиками там поморгать или еще что), как для "компьютрного" Си.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Link to comment
Share on other sites

Сам найдеш?

Надеюсь это не мне а flair007'y? :)

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Link to comment
Share on other sites

Всем конечно спасибо - но чет я не понял про этот флуд я спросил про конкретную книгу! И на знание этого форума могу поспорить со многими завсягдатами )) так - как сам им являюсь

и с языком я определился - сейчас на конкретных примерах углубляюсь в мат. часть!

Link to comment
Share on other sites

Тыц

Тыц

Тыц

Вот пара книг по AVR контроллерам которые завалялись у меня. Время хранения ограничено так что если надо будет - в личку.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Link to comment
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...