53. Термометр с датчиком DS18B20, светодиодными индикаторами и PIC16F84A (Урок 45. Теория)
HTML-код
- Опубликовано: 2 дек 2015
- Спасибо за Like и за Подписку на мой канал.
Получть информацию о канале можно и со страницы в вконтакте! Страница в вконтакте: mychippic
Описание к видео:
Урок является продолжением 51 и 52 урока. В уроке была написана программа на языке ассемблер для микроконтроллера PIC16F84A, позволяющая выводить данные о температуре, полученные от датчика DS18B20 на светодиодные индикаторы. В уроке показано, как полученую информацию от датчика DS18B20 преобразовать, чтоб определить измеренную датчиком температуру. Далее показано, как можно осуществить вывод измеренной температуры на светодиодные индикаторы. В схеме используются индикаторы с общим анодом и npn транзисторы. Схема собрана в программе для моделирования электронных схем ISIS 7 Proteus. В уроке также рассказано, как можно исправить код программы чтоб использовать светодиодные индикаторы с общим катодом или pnp транзисторы.
Документацию для датчика DS18B20 можно скачать по ссылке (на английском):
drive.google.com/file/d/0B3lF...
Документацию для датчика DS18B20 можно скачать по ссылке (переведённую на русский язык. Возможны ошибки или опечатки): drive.google.com/file/d/0B3lF...
Код программы, написанной в уроке (.txt): drive.google.com/file/d/0B3lF...
Код программы, написанной в уроке (.asm):
drive.google.com/file/d/0B3lF...
Программа была написана в программе MPLAB X и использовался компилятор mpasm
Жду уроков с прерываниями, ЦАП и АЦП) как видите, даже ночью сижу смотрю ваши уроки) сейчас нашими 5:33) Благодарю вас за бесценный труд
Приветствую Михаил Петрович! Жду не дождусь следующих уроков)
+Сергей Козьмин На этой неделе не получилось сделать видео, но на следующей неделе с понедельника сниму новый урок и постараюсь выложить его в тот же день.
Спасибо Михаил Петрович ждем расширяющих знания уроков и в электронике и в программировании (разумеется на ассемблере).
Предлагаю записать уроки по работе с eeprom. Еще хотелось бы узнать как организовать хранение больших чисел в памяти, больше тысячи, например для хранения статистики каких-то измерений.
а будут уроки с LCD дисплеями?
О! Увидел тут вопрос про прерывания! Меня тоже очень интересует прерывание INT0/ Вроде бы все уроки смотрел.. но кажись ещё не было прерываний...
+Игорь Флейфле Да, про прерывания уроков ещё не было, но всё к этому идёт) Уроки будут, но попозже.
Здравствуйте, как всегда замечательный урок. О чем собираетесь рассказывать в ближайшим (и не очень) будущем, если не секрет?
+PRIOR PRO Ну в начале, далеко не убегая расскажу про интерфейс One-Wire, который был использован в последних трёх уроках, а потом в зависимости сколько времени свободного будет. Возможно будут уроки расширяющие знания в электронике или расширяющие знания в программировании)
+MyChipPic Спасибо за ответ)
Приветствую Михаил Петрович! В комментариях после 20 го урока Вы про АЦП обещали начать рассказывать и переход наPic (Pic16f88 или Pic12f629). Вначале будут уроки по АЦП, которые уже находятся в Pic микроконтроллерах, а после о подключении микросхем АЦП к Pic и их взаимодействии с Pic микроконтроллерами.
+Сергей Козьмин Здравствуйте! Уроки по АЦП будут когда будет переход на Pic16f88. В них присутствуют встроенный АЦП. Но в начале я разберу полностью микроконтроллеры PIc16F84A. Быстро разобрать PIc16F84A не получается. Нет времени, чтоб часто делать видеуроки.
+MyChipPic А часто и не надо, нужно прожевать изложенный материал и поиграться с ним
+Сергей Козьмин В АЦП ничего сложного нет, можно самому разобраться. Там несколько регистров всего. С помощью даташита к МК - это не сложно. Я думаю перед АЦП нужно пройти запись и чтение в EEPROM, т.к. данные из АЦП нужно где-то хранить. Хотя даташит и немного свободного времени, ничего сложного.
Подскажите , смогу я использовать при изучении Ваши уроков DIP-18 PIC16F84A-04 / P, опасаюсь последних значений, прочитал здесь forum.radiospec.ru/index.php?showtopic=5645 ,что такие программируется на заводе !
+Дмитрий Вавилов На сайте Микрочипа документация для этих копусов такая же как и для 16-и выводных ww1.microchip.com/downloads/en/DeviceDoc/35007C.pdf Просто минусы питания у микроконтроллеров объедините и также можете поступить с +питания. 04 / P - Это значит, что максимальная частота кварцевого резонатора считается 4 МГц, выше использовать не желательно. P - пластиковый корпус. Я правильно понял и ответил на ваш вопрос?
Привет. А в этом кусочке обязательны 4-я и 6-я строчки?
One_Wire_Init
bcf PORTDQ,DQ;
bsf STATUS,5
bcf TRISDQ,DQ;
bcf STATUS,5
call delay_500us
bsf STATUS,5
bsf TRISDQ,DQ;
bcf STATUS,5
call delay_500us
return
ну, там осуществляется переход в 0-й банк памяти, потом задержка и снова в 1-ый банк
Спасибо за урок и уроки . А Вы владеете языком СИ , если да , то будут ли уроки ?
+vladimir melnikov Здравствуйте!) Да, я пользуюсь языком Си!) И очень часто его применяю, когде нужно, что-то очень быстро сделать) Я планировал рассказывать про язык Си, но пока не знаю, когда я на него перейду. Наверно после того, как будет освоен ассемблер, а дальше будет переход от ассемблера к Си.
MyChipPic Очень хорошо !!Буду ждать с не терпением . Ещё раз спасибо за Ваши уроки . С меня лайки !
+vladimir melnikov Могу вам посоветовать программу для написания программ для микроконтроллеров PIC на языке С: MicroC. В зависимости от версии программы в ней происходят изменения, но в интернете есть материал про этой программе, а также коды программ для разных устройств можно найти в справке данной программы. Там и есть программа для термометра, также там и картинки с подключением схемы приводятся. Можете найти справку, в протеусе собрать схему и запрограммировать виртуальный микроконтроллер программой, которая была написана в программе MicroC и так постепенно осваивать программу MicroC)
MyChipPic Если можно , то будет отлично.
Здравствуйте Михаил.Как переделать подпрограмму DELAY ,чтобы вызывать ее и передавать в нее величину задержки,которая нам нужна в данном месте программы?Спасибо за Ваши уроки,которые помогают сделать первые шаги в Ассемблере и почувствовать вкус программирования на уровне приближенном к микроконтроллеру
+alex miska Здравствуйте. Спасибо. Два варианта. Либо использовать другой способ для задержки либо изменить немного код задержки. Когдва вы расчитываете задержку к примеру на 200 мкс, то получается следующий код:
delay movlw .66
movwf Reg_1
decfsz Reg_1,F
goto $-1
nop
Время задержики в 200 мкс будет определяется в данном случае числом 66. Если это число мы увеличим, то задержка будет больше, если уменьшим, то будет меньше. Но мы можем использовать вместа числа некоторый регистра, в котором будет хранится число, а потом менять значение в этом регистре. Пример:
movlw .66
movwf Reg_Del
call delay ; Задержка будет на 200 мкс, как и в предыдущем примере
movlw .100
movwf Reg_Del
call delay ; Задержка будет больше, так как Reg_Del=100, а не 66.
delay movf Reg_Del,0
movwf Reg_1
decfsz Reg_1,F
goto $-1
nop
Таким образом можно менять время задержки. Надеюсь идея понятна.
+MyChipPic Спасибо,понятно.Вот нашел среду разработки FLOWCode компании MATRIX MULTIMEDIA использующую блок- схему алгоритма.Ваша оценка?
alex miska Ни чего об этом не слышал. Если появится время, то посмотрю обязательно)
Я знаю, что это такое. Для программирования микроконтроллеров, по моему мнению, не годится. Потому что требует очень много ресурсов, памяти. Та же мигалка, написанная с помощью FLOWCode занимает больше памяти, больше строк. А мы экономим строки, пользуясь различными приемами программирования, так как число строк ограниченно))
Подскажите на сколько строк можно прыгать командой go to +\-128, или больше?
Вроде как на любое количество
Спасибо большое!
Михаил, уроки замечательные!
А точность DS18B20 нельзя ли поменять? Вроде как по даташиту там исходно самое высокое разрешение стоит, поэтому и преобразование целых 750 миллисекунд длится, а можно сделать меньше, и точность в полградуса...
+Игорь Руденко Можно поменять и уменьшить точность. Я наверное сделаю урок и по настройке датчика черзе урок или два, а может и следующий.
+MyChipPic Ок! Было бы оч неплохо)) хотя и самому надо хоть немного мозгами шевелить, но каковы лекции?! Я о том, что подача материала организована блестяще; нет излишнего теоретизирования с одной стороны, и мало какие детали ускользают от внимания лектора - с другой. Практические приложения - в точку! После первых пяти уроков мы с сыной уже собрали новогоднюю гирляндочку для настольной ёлки (PIC16F84). Ген "случайных" чисел, всё как положено...)))) Спасибо!
+Игорь Руденко на сколько я понял, точность датчика можно сделать до десятых, надо младший полубайт - младшего байта разложить в таблицу и округлить, обращаясь к таблице выдавать десятые
1 столбец- значение полубайта, 2 столбец- величина , 3 столбец- округление
0001 0.0625 1
0010 0.125 1
0011 0.1875 2
0100 0.25 2
0101 0.3125 3
0110 0,375 4
0111 0.4375 4
1000 0.5 5
1001 0.5625 6
1010 0.625 6
1011 0.6875 7
1100 0.75 8
1101 0.8125 8
1110 0.875 9
1111 0.9375 9
если интересно могу сбросить подредактированую программу, в протеусе работает, может проверите на практике
+Andrey Petrov Ок, Андрей! Приблизительно понял))) но не совсем. Речь идёт о точности преобразования которая связана со временем преобразования. Если надо что-то быстро мерить, то с точностью установленной по умолчанию (12-бит) не получится, т.к. время преобразования в этом случае составляет 750 мс, почти секунду! Можно сделать 12, 11, 10, и 9 бит точности, в последнем случае время конвертирования составит 93,75 мс по даташиту (одна десятая секунды). Я уже собрал схему натурную и всё получилось. Делаем: Init, Write 'CC', Write '4E', Write '00', Write '00' , Write '1F' - после этого термометр меряет бстро с точностью 0,5 градуса, если к этому дописать Init, Write 'CC', Write '48', то слово состояния (1F) в ПЗУ запишется и заданная точность сохранится даже после выключения питания.
+MyChipPic Спасибо! Я сделал, вроде получилось. См мой ответ Andrey Petrov-у ниже. Проверил, выключал питание, считывал слово состояния - всё о'к!
Добрый день!!!
Михаил Петрович, подскажите пожалуйста, в Proteus собрал схему, скачал вашу программу, скомпилировал в MPLAB X IDE v2.35.
Но вот беда, на индикаторе постоянно отображает значение -001
А если убрать резистор между ножкой DQ и VCC, отображает значение 000
не зависимо от настройки термометра... Что я сделал не так???
Где копать???
Заранее благодарен!!!
+Юрий Колтуник Здравствуйте!) Отправьте фотографию вашей схемы в протеусе, а то в голову сразу ни чего не приходит. И ещё проверьте, чтоб в протеусе, частота работы микроконтроллера PIC16F84A была 4МHz
+MyChipPic ВЫ ГЕНИЙ ПРОСТО!!!!
Вопрос решился сразу же!!!
Частота стояла 1MHz. Исправил на 4MHz и все заработало!!!
Большое спасибо!!!
Юрий Колтуник Пожалуйста))Успехов)
+MyChipPic Спасибо. Сейчас вот как раз автозапуск в Авто проэктирую на PIC 12F629.
Благодаря Вашим урокам разобрался с микроконтроллерами. Было много нюансов и сложностей, но после просмотра уроков... ВСЕ ПОЛУЧИЛОСЬ!!!
Жду новые уроки!!!
Спасибо Вам за крутые уроки!!!
+MyChipPic Ещё просьба есть. С прерываниями урок бы!!! Как-то сам не могу.
Михаил Петрович !!! Хэлп!!! Я сейчас работаю с pic12f629. Я включаю таймер TMR0
BSF STATUS,RP0
MOVLW B'0000111'
MOVWF OPTION_REG
BCF STATUS,RP0
CLRF TMR0
КАК ВЫКЛЮЧИТЬ ТАЙМЕР? Его постоянно приходится обнулять
+Артем Апальков Попробуйте в пятом бите регистра OPTION_REG установить 1, тогда таймер будет считать внешние импульсы, поступающие на ножку GP2/T0CKI. Если импульсы на эту ножку поступать не будут, то и таймер считать не будет. Когда захотите снова заставить таймер работать, то запишите 0 в пятый бит.
+MyChipPic СПАСИБО Михаил Петрович. Заработала. Вернее перестала маячить.
Артем добрый день!А можешь подсказать как на этом контроллере настроить порты на выход??Что то у меня не получилось по даташиту...
Добрый вечер Михаил Петрович вы хоть посмотрели прошивки те что я вам скинул?
+jeka djon Ваш вопрос не простой, чтоб дать быстрый ответ. Нужно время, чтоб разобраться. А такого времени мне сейчас самому не хватает, что делать свою работу.
а подскажите вот есть прошивка для 8300м на пике 683 как в прошивке поменять подписку на классы триколора мне подсказали на форуме что надо менять в еепром открыть прогай icprog прошивку и поменять открыл прогай я еепром нот не чего не понял
0000: 3B 15 11 12 CA 07 11 CA ;...Ê..Ê
0008: 06 C2 66 56 86 4D 03 62 .ÂfV†M.b
0010: FF 15 82 02 04 11 54 52 ÿ.‚...TR
0018: 49 43 4F 4C 4F 52 20 54 ICOLOR T
0020: 56 00 FF FF FF FF 0A 52 V.ÿÿÿÿ.R
0028: 55 22 80 F8 57 04 27 50 U"€øW.'P
0030: 00 00 00 66 2E 00 66 18 ...f..f.
0038: BB 12 00 00 00 00 00 00 ».......
адрес еепром
+jeka djon чтоб разобраться, что же там скрыто, нужно посмотреть в документации к устройству. По сути это ячейки памяти в которых хранятся значения в двоичном коде, как и в регистрах общего назначения. Но в отличии от оперативной памяти, значения в них сохраняются и при выключенном питании. Обычно там хранят некоторые постоянные величины, которые нужно менять в зависимости от применения устройства в определённых условиях. Например у вас в программе есть некоторые числа, которые используются с какими-то целями. Эти числа в контроллере не изменяться, если не перепрошить новой прошивкой с другими числами. Но вы не хотите менять прошивку, а только хотите изменить это число или позволить кому-то изменять это число. Тогда вы можете сохранить это число в память EEPROM и прошивка будет считывать с этой памяти это число и использовать его, точно так же как было до этого. Но теперь, чтоб заменить значение этого числа, вам достаточно будет поменять значение, которое хранится в памяти EEPROM. И не нужно будет лезть в код прошивки, чтоб найти где поменять что-то в коде и не нужно будет лишний раз перепрошивать микроконтроллер, что может привести к выходу изстроя микроконтроллера.
Тут значения представленны в шестнадцатеричном коде. В начале указан начальный ядрес ячейки, после двоеточия содержимое ячеек. В первой строчке у вас указаны 8 ячеек, счёт с нуля. А то что идёт после, не имеет значения для нас. На новой строчке, опкать указан адрес. Так как выше было 8 ячеек начиная с нуля, то адрес следующей ячейки будет 0008, потом указано содержимое ячеек, а потом опять не нужная для нас информация. и так далее. (Не нужная информация - это те же значения ячек, просто представленные не в виде чисел, а в виде символов).
Нужно в определённые ячейки памяти внести изменения. Можно в прошивке найти строчки, которые записывают нужные данные в EEPROM и изменить эти данные. Либо не перепрошивать микроконтроллер а перепрошить только память с новыми значениями в нужных ячейка, а в другие ячейки записать те же значения, что и были. Вот тут немного о EEPROM www.microchip.ru/files/d-sheets-rus/pic16_7.pdf Перепрошить EEPROM можно и с PicKit2 microchip.com.ru/Support/PICkit2_art.html