Перейти к содержанию

Термометр


Рекомендуемые сообщения

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

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

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

#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) но и добавляла надпись на дисплей например дом улица и тд - что бы знать с какова датчика идет сигнал

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

Ссылка на комментарий
Поделиться на другие сайты

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 раз.

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

Ссылка на комментарий
Поделиться на другие сайты

<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, короче вот так.

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

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Ты ведь производишь действия не с переменной temp, в которой хранится значение температуры, так что не повлияет.

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

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

Сам найдеш?

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

Тыц

Тыц

Тыц

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Ну-вы и сравнили. Вот когда будете строить сварочный инвертор на такую частоту-то там нужно  будет учитывать скин эффект. А на частоты до 75кгц-можно забить, отбить и не принимать во внимание. Тем более-что все стараются аппараты до 200А строить. На кольце плотность тока до 15А на мм ^2, на Ш от 10А на  мм^2 А вентилятор-он все лишние тепло сдует ко льдам в Антарктиде.
    • Добрый вечер всем!  Проблема следующая: Есть флешка с записанной файловой системой через USB MASS STORAGE DEVICES. При "втыкании"  в порт USB открывается на ПК диск с содержимым. Я подключил библиотеку Fatfs и прописал низкоуровневые функции чтения и записи в файле diskio.c Работаю с файлом так:   disk_initialize(SDFatFs.drv); if(f_mount(&SDFatFs,(TCHAR const*)USER_Path,0)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_f_mount!\r\n"); } else { if(f_open(&MyFile,"01.WAV",FA_READ)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_open_File1!\r\n"); } else { Usart1_Send_String("open_File_OK1!\r\n"); } if(f_open(&MyFile,"01.wav",FA_READ)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_open_File2!\r\n"); } else { Usart1_Send_String("open_File_OK2!\r\n"); UINT testBytes=0; f_read(&MyFile, buff1, 512, &testBytes); sprintf(buf1, "TestBytes=%d\r\n", testBytes); Usart1_Send_String(buf1); Usart1_Send_hex((char*)buff1, 512); Usart1_Send_String("read_File_complite!\r\n"); f_close(&MyFile); } } подправил diskio.c так:   DRESULT disk_read ( BYTE pdrv, /* Physical drive nmuber to identify the drive */ BYTE *buff, /* Data buffer to store read data */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to read */ ) { DRESULT res; //res = disk.drv[pdrv]->disk_read(disk.lun[pdrv], buff, sector, count); sprintf(buffer0, "sector=%lu\r\n", sector); Usart1_Send_String(buffer0); w25qReadPage(buff, sector*2); w25qReadPage(buff + 256, sector*2+256); res=RES_OK; return res; } #if _USE_WRITE == 1 DRESULT disk_write ( BYTE pdrv, /* Physical drive nmuber to identify the drive */ const BYTE *buff, /* Data to be written */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to write */ ) { DRESULT res; //res = disk.drv[pdrv]->disk_write(disk.lun[pdrv], buff, sector, count); w25qWritingByUSB(sector, (uint8_t*)buff); res=RES_OK; return res; } #endif /* _USE_WRITE == 1 */ функцию чтения на самом деле пробовал прописывать по разному, все равно не корректно работает... Выдает в отладке такое:   Program start!.... sector=0 // это обращение к функции чтения DRESULT disk_read (); Error_open_File1! sector=0 // это обращение к функции чтения DRESULT disk_read (); Error_open_File2! Что я забыл еще добавить?
    • В былые годы запрещалось размещать на форуме бессмысленные темы. Видать, с тех пор правила существенно изменились.
    • скачай новый архив. там есть важные изменения в комповой программе, по сравнению с той, что я отправлял в личке. исправлены недоделки и добавлены проверки на некорректные действия.
    • Здесь все индивидуально, точного ответа нет. Тип фоторезиста, качество фотошаблона, расстояние и время засветки, длина волны св.диодов, "полоскание" в химии ... Надо все пробовать самому, ручками, опыт придет со временем, ничего сложного там нет. На форуме есть ветка, почитайте.
    • Привет.  Хочу попробовать поработать с фоторезистом. Есть пару десятков ультрафиолетовых светодиодов, общей мощностью 4 вата. Хватит ли этой мощности для обработки платок размером 10 на 10 см или надо искать что-то дополнительно? 
×
×
  • Создать...