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

Комментарии • 59

  • @user-im9fi5ee4i
    @user-im9fi5ee4i 8 лет назад +2

    Жду уроков с прерываниями, ЦАП и АЦП) как видите, даже ночью сижу смотрю ваши уроки) сейчас нашими 5:33) Благодарю вас за бесценный труд

  • @user-pd9ty2zt4s
    @user-pd9ty2zt4s 8 лет назад +2

    Приветствую Михаил Петрович! Жду не дождусь следующих уроков)

    • @MyChipPic
      @MyChipPic  8 лет назад +1

      +Сергей Козьмин На этой неделе не получилось сделать видео, но на следующей неделе с понедельника сниму новый урок и постараюсь выложить его в тот же день.

  • @user-pd9ty2zt4s
    @user-pd9ty2zt4s 8 лет назад +1

    Спасибо Михаил Петрович ждем расширяющих знания уроков и в электронике и в программировании (разумеется на ассемблере).

  • @netroman23
    @netroman23 8 лет назад +2

    Предлагаю записать уроки по работе с eeprom. Еще хотелось бы узнать как организовать хранение больших чисел в памяти, больше тысячи, например для хранения статистики каких-то измерений.

  • @BratstvoKruka
    @BratstvoKruka 6 лет назад +1

    а будут уроки с LCD дисплеями?

  • @user-wy9jf2eb8o
    @user-wy9jf2eb8o 8 лет назад

    О! Увидел тут вопрос про прерывания! Меня тоже очень интересует прерывание INT0/ Вроде бы все уроки смотрел.. но кажись ещё не было прерываний...

    • @MyChipPic
      @MyChipPic  8 лет назад

      +Игорь Флейфле Да, про прерывания уроков ещё не было, но всё к этому идёт) Уроки будут, но попозже.

  • @priorpro9896
    @priorpro9896 8 лет назад +2

    Здравствуйте, как всегда замечательный урок. О чем собираетесь рассказывать в ближайшим (и не очень) будущем, если не секрет?

    • @MyChipPic
      @MyChipPic  8 лет назад +4

      +PRIOR PRO Ну в начале, далеко не убегая расскажу про интерфейс One-Wire, который был использован в последних трёх уроках, а потом в зависимости сколько времени свободного будет. Возможно будут уроки расширяющие знания в электронике или расширяющие знания в программировании)

    • @priorpro9896
      @priorpro9896 8 лет назад +1

      +MyChipPic Спасибо за ответ)

  • @user-pd9ty2zt4s
    @user-pd9ty2zt4s 8 лет назад

    Приветствую Михаил Петрович! В комментариях после 20 го урока Вы про АЦП обещали начать рассказывать и переход наPic (Pic16f88 или Pic12f629). Вначале будут уроки по АЦП, которые уже находятся в Pic микроконтроллерах, а после о подключении микросхем АЦП к Pic и их взаимодействии с Pic микроконтроллерами.

    • @MyChipPic
      @MyChipPic  8 лет назад +2

      +Сергей Козьмин Здравствуйте! Уроки по АЦП будут когда будет переход на Pic16f88. В них присутствуют встроенный АЦП. Но в начале я разберу полностью микроконтроллеры PIc16F84A. Быстро разобрать PIc16F84A не получается. Нет времени, чтоб часто делать видеуроки.

    • @DiagnostArt
      @DiagnostArt 8 лет назад

      +MyChipPic А часто и не надо, нужно прожевать изложенный материал и поиграться с ним

    • @DiagnostArt
      @DiagnostArt 8 лет назад +1

      +Сергей Козьмин В АЦП ничего сложного нет, можно самому разобраться. Там несколько регистров всего. С помощью даташита к МК - это не сложно. Я думаю перед АЦП нужно пройти запись и чтение в EEPROM, т.к. данные из АЦП нужно где-то хранить. Хотя даташит и немного свободного времени, ничего сложного.

  • @dimsondimson8613
    @dimsondimson8613 8 лет назад

    Подскажите , смогу я использовать при изучении Ваши уроков DIP-18 PIC16F84A-04 / P, опасаюсь последних значений, прочитал здесь forum.radiospec.ru/index.php?showtopic=5645 ,что такие программируется на заводе !

    • @MyChipPic
      @MyChipPic  8 лет назад

      +Дмитрий Вавилов На сайте Микрочипа документация для этих копусов такая же как и для 16-и выводных ww1.microchip.com/downloads/en/DeviceDoc/35007C.pdf Просто минусы питания у микроконтроллеров объедините и также можете поступить с +питания. 04 / P - Это значит, что максимальная частота кварцевого резонатора считается 4 МГц, выше использовать не желательно. P - пластиковый корпус. Я правильно понял и ответил на ваш вопрос?

  • @user-im9fi5ee4i
    @user-im9fi5ee4i 8 лет назад

    Привет. А в этом кусочке обязательны 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

    • @user-im9fi5ee4i
      @user-im9fi5ee4i 8 лет назад

      ну, там осуществляется переход в 0-й банк памяти, потом задержка и снова в 1-ый банк

  • @user-vlad385
    @user-vlad385 8 лет назад +2

    Спасибо за урок и уроки . А Вы владеете языком СИ , если да , то будут ли уроки ?

    • @MyChipPic
      @MyChipPic  8 лет назад +1

      +vladimir melnikov Здравствуйте!) Да, я пользуюсь языком Си!) И очень часто его применяю, когде нужно, что-то очень быстро сделать) Я планировал рассказывать про язык Си, но пока не знаю, когда я на него перейду. Наверно после того, как будет освоен ассемблер, а дальше будет переход от ассемблера к Си.

    • @user-vlad385
      @user-vlad385 8 лет назад +2

      MyChipPic Очень хорошо !!Буду ждать с не терпением . Ещё раз спасибо за Ваши уроки . С меня лайки !

    • @MyChipPic
      @MyChipPic  8 лет назад

      +vladimir melnikov Могу вам посоветовать программу для написания программ для микроконтроллеров PIC на языке С: MicroC. В зависимости от версии программы в ней происходят изменения, но в интернете есть материал про этой программе, а также коды программ для разных устройств можно найти в справке данной программы. Там и есть программа для термометра, также там и картинки с подключением схемы приводятся. Можете найти справку, в протеусе собрать схему и запрограммировать виртуальный микроконтроллер программой, которая была написана в программе MicroC и так постепенно осваивать программу MicroC)

    • @user-vlad385
      @user-vlad385 8 лет назад

      MyChipPic Если можно , то будет отлично.

  • @alexmiska2115
    @alexmiska2115 8 лет назад

    Здравствуйте Михаил.Как переделать подпрограмму DELAY ,чтобы вызывать ее и передавать в нее величину задержки,которая нам нужна в данном месте программы?Спасибо за Ваши уроки,которые помогают сделать первые шаги в Ассемблере и почувствовать вкус программирования на уровне приближенном к микроконтроллеру

    • @MyChipPic
      @MyChipPic  8 лет назад

      +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
      Таким образом можно менять время задержки. Надеюсь идея понятна.

    • @alexmiska2115
      @alexmiska2115 8 лет назад

      +MyChipPic Спасибо,понятно.Вот нашел среду разработки FLOWCode компании MATRIX MULTIMEDIA использующую блок- схему алгоритма.Ваша оценка?

    • @MyChipPic
      @MyChipPic  8 лет назад

      alex miska Ни чего об этом не слышал. Если появится время, то посмотрю обязательно)

    • @user-im9fi5ee4i
      @user-im9fi5ee4i 8 лет назад

      Я знаю, что это такое. Для программирования микроконтроллеров, по моему мнению, не годится. Потому что требует очень много ресурсов, памяти. Та же мигалка, написанная с помощью FLOWCode занимает больше памяти, больше строк. А мы экономим строки, пользуясь различными приемами программирования, так как число строк ограниченно))

  • @user-cp7bk6sv5i
    @user-cp7bk6sv5i 7 лет назад

    Подскажите на сколько строк можно прыгать командой go to +\-128, или больше?

    • @MyChipPic
      @MyChipPic  7 лет назад

      Вроде как на любое количество

    • @user-cp7bk6sv5i
      @user-cp7bk6sv5i 7 лет назад

      Спасибо большое!

  • @xmansy1
    @xmansy1 8 лет назад +3

    Михаил, уроки замечательные!
    А точность DS18B20 нельзя ли поменять? Вроде как по даташиту там исходно самое высокое разрешение стоит, поэтому и преобразование целых 750 миллисекунд длится, а можно сделать меньше, и точность в полградуса...

    • @MyChipPic
      @MyChipPic  8 лет назад +4

      +Игорь Руденко Можно поменять и уменьшить точность. Я наверное сделаю урок и по настройке датчика черзе урок или два, а может и следующий.

    • @xmansy1
      @xmansy1 8 лет назад +1

      +MyChipPic Ок! Было бы оч неплохо)) хотя и самому надо хоть немного мозгами шевелить, но каковы лекции?! Я о том, что подача материала организована блестяще; нет излишнего теоретизирования с одной стороны, и мало какие детали ускользают от внимания лектора - с другой. Практические приложения - в точку! После первых пяти уроков мы с сыной уже собрали новогоднюю гирляндочку для настольной ёлки (PIC16F84). Ген "случайных" чисел, всё как положено...)))) Спасибо!

    • @AndreyPetrov78
      @AndreyPetrov78 8 лет назад

      +Игорь Руденко на сколько я понял, точность датчика можно сделать до десятых, надо младший полубайт - младшего байта разложить в таблицу и округлить, обращаясь к таблице выдавать десятые
      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
      если интересно могу сбросить подредактированую программу, в протеусе работает, может проверите на практике

    • @xmansy1
      @xmansy1 8 лет назад +1

      +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) в ПЗУ запишется и заданная точность сохранится даже после выключения питания.

    • @xmansy1
      @xmansy1 8 лет назад

      +MyChipPic Спасибо! Я сделал, вроде получилось. См мой ответ Andrey Petrov-у ниже. Проверил, выключал питание, считывал слово состояния - всё о'к!

  • @yuren110
    @yuren110 8 лет назад

    Добрый день!!!
    Михаил Петрович, подскажите пожалуйста, в Proteus собрал схему, скачал вашу программу, скомпилировал в MPLAB X IDE v2.35.
    Но вот беда, на индикаторе постоянно отображает значение -001
    А если убрать резистор между ножкой DQ и VCC, отображает значение 000
    не зависимо от настройки термометра... Что я сделал не так???
    Где копать???
    Заранее благодарен!!!

    • @MyChipPic
      @MyChipPic  8 лет назад +1

      +Юрий Колтуник Здравствуйте!) Отправьте фотографию вашей схемы в протеусе, а то в голову сразу ни чего не приходит. И ещё проверьте, чтоб в протеусе, частота работы микроконтроллера PIC16F84A была 4МHz

    • @yuren110
      @yuren110 8 лет назад

      +MyChipPic ВЫ ГЕНИЙ ПРОСТО!!!!
      Вопрос решился сразу же!!!
      Частота стояла 1MHz. Исправил на 4MHz и все заработало!!!
      Большое спасибо!!!

    • @MyChipPic
      @MyChipPic  8 лет назад

      Юрий Колтуник Пожалуйста))Успехов)

    • @yuren110
      @yuren110 8 лет назад

      +MyChipPic Спасибо. Сейчас вот как раз автозапуск в Авто проэктирую на PIC 12F629.
      Благодаря Вашим урокам разобрался с микроконтроллерами. Было много нюансов и сложностей, но после просмотра уроков... ВСЕ ПОЛУЧИЛОСЬ!!!
      Жду новые уроки!!!
      Спасибо Вам за крутые уроки!!!

    • @yuren110
      @yuren110 8 лет назад

      +MyChipPic Ещё просьба есть. С прерываниями урок бы!!! Как-то сам не могу.

  • @DiagnostArt
    @DiagnostArt 8 лет назад

    Михаил Петрович !!! Хэлп!!! Я сейчас работаю с pic12f629. Я включаю таймер TMR0
    BSF STATUS,RP0
    MOVLW B'0000111'
    MOVWF OPTION_REG
    BCF STATUS,RP0
    CLRF TMR0
    КАК ВЫКЛЮЧИТЬ ТАЙМЕР? Его постоянно приходится обнулять

    • @MyChipPic
      @MyChipPic  8 лет назад

      +Артем Апальков Попробуйте в пятом бите регистра OPTION_REG установить 1, тогда таймер будет считать внешние импульсы, поступающие на ножку GP2/T0CKI. Если импульсы на эту ножку поступать не будут, то и таймер считать не будет. Когда захотите снова заставить таймер работать, то запишите 0 в пятый бит.

    • @DiagnostArt
      @DiagnostArt 8 лет назад +1

      +MyChipPic СПАСИБО Михаил Петрович. Заработала. Вернее перестала маячить.

    • @user-dk4sn3vw7o
      @user-dk4sn3vw7o 7 лет назад

      Артем добрый день!А можешь подсказать как на этом контроллере настроить порты на выход??Что то у меня не получилось по даташиту...

  • @jekakmv9725
    @jekakmv9725 8 лет назад

    Добрый вечер Михаил Петрович вы хоть посмотрели прошивки те что я вам скинул?

    • @MyChipPic
      @MyChipPic  8 лет назад

      +jeka djon Ваш вопрос не простой, чтоб дать быстрый ответ. Нужно время, чтоб разобраться. А такого времени мне сейчас самому не хватает, что делать свою работу.

    • @jekakmv9725
      @jekakmv9725 8 лет назад

      а подскажите вот есть прошивка для 8300м на пике 683 как в прошивке поменять подписку на классы триколора мне подсказали на форуме что надо менять в еепром открыть прогай icprog прошивку и поменять открыл прогай я еепром нот не чего не понял

    • @jekakmv9725
      @jekakmv9725 8 лет назад

      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 ».......

    • @jekakmv9725
      @jekakmv9725 8 лет назад

      адрес еепром

    • @MyChipPic
      @MyChipPic  8 лет назад +1

      +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