52. Программа для обмена данными между DS18B20 и PIC16F84A (Урок 44. Теория)

Поделиться
HTML-код
  • Опубликовано: 24 ноя 2015
  • Спасибо за Like и за Подписку на мой канал.
    Получть информацию о канале можно и со страницы в вконтакте! Страница в вконтакте: mychippic
    Описание к видео:
    В уроке показано как написать программу для обмена данными между термометром DS18B20 и микроконтроллером PIC16F84A. Реализована инициализация термометра, передача и приём байтов информации между микроконтроллером PIC16F84A и термометром DS18B20. Программа написана на языке Assembler в программе MPLAB X. Программа проверена на схеме собранной в программе Proteus.
    Программа для обмена данными (.txt)
    drive.google.com/file/d/0B3lF...
    Программа для обмена данными (.asm)
    drive.google.com/file/d/0B3lF...

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

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

    Напористо, динамично, понятно. Поставлю учителю 5. :)

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

      +3comma62 Спасибо!))

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

    Жаль нельзя поставить два лайка.

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

    Михаил Петрович спасибо за уроки, все очень понятно и разжевано. С нетерпением жду следующих уроков, надеюсь их будет много! Михаил Петрович есть ли возможность разобрать подключение контроллера к pH датчику, собрать металлоискатель, датчик давления и прочие? Может даже какие то автомобильные датчики. Извиняюсь за свой аппетит но по вопросам контроллеров другие авторы не далеко заходят в своих уроках.

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

      +Сергей Козьмин Здравствуйте) Да, будут уроки с подключением разных датчиков в дальнейшем, либо создание своих датчиков) Параллельно будет рассказано о программировании микроконтроллеров в начале PIC16F84A, а потом и других контроллеров PIC.

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

      +MyChipPic Здравствуйте Михаил Петрович! Очень радует что уроки на ассемблере, С устойчиво воспринимаю как быдлокод HEX зависит от компилятора а его все таки люди делают. Так как информации по Pic , было мало 4 года назад не смог их освоить. На AVR делаю простецкие вещи типа самой простой сигнализации. Ваши уроки меня с двоюродным братом уже вдохновили достать заброшенные 1684A,628A вместе с Pic kit2 у нас в Казахстане все это очень легко добывается в связи с близостью с Китаем. Спасибо за уроки. Действительно ждем уроков с разнообразными датчиками и как вы пишите создание своих датчиков, от этих мыслей у меня голова кругом пошла как у Бендера от содержимого в стульях)))

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

      +Сергей Козьмин Очень рад что вас вдохновлют уроки действовать!) Вдвоём заниматься PICами экономней) Можно оптом и подешевле много чего заказать) Удачи вам с братом)

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

      +Сергей Козьмин какая разница какие датчики главное документация чтоб понять протокол обмена а уж написать прогу зная протокол любой сможет

    • @user-ki8op8fp7i
      @user-ki8op8fp7i 6 лет назад

      Датчики бывают аналоговые и цифровые. Для аналоговых нужен АЦП

  • @user-dd8dm1sc5o
    @user-dd8dm1sc5o 7 лет назад +2

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

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

    БРАВО!!!

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

    Михаил Петрович, я сегодня пока работал на работе работу, меня посетила идея... Михаил Петрович, почему бы не написать Вам, в продолжении темы, обмен данными между двумя пиками??? Например: на первом пике 4 кнопки (pic12f629), а на втором исполнительные механизмы, или светодиоды, для простоты восприятия. Между ними один провод, типа асинхронной передачи данных. Или три МК в линии, тогда нужно вводить байт инициализации.

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

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

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

    Появилось желание подключить датчик DS18B20 "Паразитным" способом. Показать студентам. Почитав документацию к датчику, понял, что нужно подать питание на шину данных через транзистор не более чем через 10us . Включать транзистор нужно после команды H'44'. Сделал так :
    MOVLW H'44'
    CALL ONE_WIRE_WRITE_BYTE
    BSF PORTA,3
    CALL DIN_INDICATION_200
    BCF PORTA,3
    А в процедуре DIN_INDICATION_200 изменил так:
    movlw b'1001'; NPN
    movwf PORTA
    В протеусе все работает. Но на практике боюсь пробовать, в документации написано, что при "паразитном" подключении падение напряжения может быть 1.5мА. А вдруг я включаю и выключаю транзистор не в то время!
    Помогите пожалуйста!!!

  • @uzdovski
    @uzdovski 6 лет назад

    Для того, чтобы избавиться от Message [305], нужно указать куда мы сохраняем значение. В данном случае, значение должно быть сохранено в регистре One_Wire_Byte.
    rrf One_Wire_Byte - Message [305]
    rrf One_Wire_Byte,1 - будет правильно.

  • @umn9wka
    @umn9wka 7 лет назад +1

    Спасибо большое за уроки. Не понимаю зачем для того чтобы отправить единицу нужно отпустить линию , а не просто веревести бит DQ в 1.

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

      Здравствуйте, Дарья. Дело в том, что в датчике температуры есть полевой транзистор. Когда мы подаём питание на датчик температуры, ток почти ни чем не ограничен, когда транзистор открыт. Поэтому, если мы будем питать с ножки МК, то ток будет большим, а это может привести к тому, что упадёт напряжение питания, так же как это бывает при КЗ. Поэтому, стоящий подтягивающий резистор не позволяет добиться КЗ. Он ограничивает ток.

  • @alexandrkontsedalov3613
    @alexandrkontsedalov3613 5 лет назад

    Михаил Петрович, поправьте ссылку на текст программы .asm. Сейчас под ней лежит HEX код

  • @15s.98
    @15s.98 4 года назад

    Все замечательно. Вот только не могу понять. Зачем после того, как опустили вывод (лог. 0) ,вы переходите в нулевой банк, после задержки возвращаетесь опять в первый?Тут нет необходимости переключать 5 бит STATUSа

  • @YokoSakh
    @YokoSakh 5 лет назад

    А почему вы не используете xc8? Так де удобнее и быстрее писать такой код...

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

    Михаил Петрович, спасибо огромное за уроки! А где скачать код программы этого урока ?

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

      +Дмитрий Вавилов Под видеозаписью, перед комментариями написана информация о видео и там же есть кнопка "ЕЩЁ". Когда на неё нажимаете, то появляется текст описания к видео. В этом описании указана ссылка на код программы. Так и в других уроках вы сможете найти код или другую полезную информацию. drive.google.com/file/d/0B3lFUSB8ZK9RRHFNcFJ2OHFnZEE/view?usp=sharing - это код программы этого урока, но в формате txt. Просто скопируйте текст в свой проект. А если вам нужен hex файл, то проект с кодом ещё нужно будет скомпилировать. Удачи)

  • @DonDon-pl4ok
    @DonDon-pl4ok 8 лет назад

    Здравствуйте, объясните в следующих видео как подключить к одному порту множество кнопок, и программу для распознания, на какую кнопку мы нажали, то есть допустим 8 светодиодов, и 8 кнопок, подключенных к одному порту, и нажав на кнопку загорается светодиод, за который отвечает кнопка,,,

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

      +Don Don странная конструкция а зачем для неё вообше микроконтролер нужен

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

    Здравствуйте, Михаил! У меня вопрос: Требуется ли какая-либо специальная настройка Протеуса для схемы из данного урока? Собрал схему, как у вас, загрузил ваш .hex - файл в МК, но результат симуляции - все 1 на порту "B" через 3 секунды после начала симуляции. Тоесть сначала все светодиоды не горят, а через 3 секунды они все загораются и больше не гаснут. Возможно есть какой-то тайный ритуал, который я по незнанию не выполнил, возможно нужно что-то перенастроить в самой модели DS18B20? Из файла примеров Протеуса загрузил схему 1-Wire DS1822 термодатчик + PIC16F628, там всё работает, но в чем отличие я так и не понял. Протеус у меня 7.1, WINDOWS 8.1.

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

      +Villiam JetWings Если вы делаете всё по моих урокам, не познакомившись с некоторыми особенностями PIC16F628, то причина может быть просто в том, что у вашего микроконтроллера ножки имют больше функций, не только управление внешними устройствами и управление из вне. Поэтому сам микроконтроллер стоит настроить. Чтоб ножки работали также как у PIC16F84A нужно где-то в начале программы, прописать строчки:
      .....
      CMCON equ 1Fh ; Регистр, который отвечает за встроенные компараторы в PIC16F628
      .....
      org 0 ;Начало и сразу можно настроить ножки
      clrf PORTA
      MOVLW 0x07
      MOVWF CMCON ; Отключаем компараторы и ножки рабоают в обычном для нас режиме.
      bsf STATUS,5
      ....
      end
      ;Если не сработает, будет думать дальше)
      P.S. для новичков. Многочие подразумевает код программы, который уже есть)

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

      Михаил, нет, вы не поняли) Схему я повторил с использованием PIC16F84A, использовал ваш hex - файл, т.е. всё аналогично уроку. Про PIC16F628 я написал, что нашел в Протеусе в папке с примерами работу этого контроллера и термотетра. Возможно, у вас осталась схема из данного урока? Возможно её можно запустить в Proteus 7.1?

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

      Михаил, я нашел свою ошибку! Спасибо вам большое за оперативную помощь) Всё оказалось до безобразия просто и глупо: забыл выставить в Протеусе Processor clock friquency. Я думал, это частота машинного цикла, т.е. 1/4 частоты генератора, но оказалось что нет( Поставил 4MHz вместо 1 MHz, и всё заработало)))

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

      +Villiam JetWings Кстати такая проблема встречается непервый раз. Где-то уже что-то подобное уже было и проблема решалась также. Дабалю попозже анотацию, которая предупреждает, что нужно проверить частоту)

    • @ivanavlasevich9005
      @ivanavlasevich9005 4 года назад

      @@villiamjetwings Если бы не вы, я бы не нашёл ошибку! Спасибо, что написали этот вопрос в комментариях

  • @mikhailalexeenko5541
    @mikhailalexeenko5541 6 лет назад

    Автор, есть у вас на примете источник на тему: Синтез узлов микропроцессорной системы на основе автоматов и комбинационных схем. Или что-либо в этом роде.

    • @mikhailalexeenko5541
      @mikhailalexeenko5541 6 лет назад

      Какой микр-лер взять на изучение. Цель - делать программаторы для разного рода интерфейсов. Пример - ПРограммирование embadded контроллера ноутбука. и тд.

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

    а приём осуществлять только через команду переноса в право и флага C или есть какие то ещё способы

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

      Можно и по другому) Как вам будет удобней с учётом возможностей контроллера) Совсем не обязательно использовать мой вариант) Может у вас получится лучше или удобней)

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

    Михаил Петрович, подскажите как называется программа для расчета задержки, или где ее можно скачать??? Спасибо.

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

      +Артем Апальков Программа расчета задержек Николая Марова.Скачать можно на этой странице: ikarab.narod.ru/Delay.html

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

      +Артем Апальков про прогу задержек в 3 уроке расказанно

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

    У меня ещё вопрос по коду:
    One_Wire_Init
    bcf PORTDQ,DQ; PORTA,0
    bsf STATUS,5
    bcf TRISDQ,DQ; TRISA,0
    bcf STATUS,5
    call delay_500us
    bsf STATUS,5
    bsf TRISDQ,DQ; TRISA,1
    bcf STATUS,5
    call delay_500us
    return
    Обязательно ли возвращаться в банк 0 каждый раз после изменения направления порта? Ведь после задержки 500 мкС мы снова переходим в банк 1. Я провёл эксперимент в Протеусе, адресуются ли регистры Reg_1, Reg_2 из банка 1. Протеус ошибки не выдал. На реальной схеме не проверял. Ещё раз вопрос: обязательно ли переходить в банк 0 перед выполнением подпрограммы задержки в данном коде?

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

      +Villiam JetWings Да, можно не переходить в банк 0, в представленном кусочке кода.

  • @user-dv2mh2uy6m
    @user-dv2mh2uy6m 6 лет назад

    Здравствуйте,как можно скачать asm файл например с урока 52

    • @user-ej7sq7ky5p
      @user-ej7sq7ky5p 3 года назад

      не позорься, внеси в текст программы txt вот и получишь asm

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

    Инициализация и отправка команд от микроконтроллера должна производиться после каждого принятия повторяющейся последовательности байтов данных от термометра?
    Я попробовал поставить слово begin после инициализации и отдачи команд микроконтроллером
    org 0
    bsf status,5
    clrf trisb
    clrf trisa
    bcf status,5
    call one_wire_initializing
    movlw H'CC'
    call one_wire_write_byte
    movlw H'44'
    call one_wire_write_byte
    call delay_750ms
    call one_wire_initializing
    movlw H'CC'
    call one_wire_write_byte
    movlw H'BE'
    call one_wire_write_byte
    begin
    call one_wire_read_byte
    movwf portb
    call delay_1s
    call one_wire_read_byte
    movwf portb
    call one_wire_read_byte
    movwf portb
    goto begin
    ....
    в протеусе промигали две разных комбинации и прога остановилась на последнем байте.

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

      Да, должно производится после каждого принятия пары байт данных от термометра (далее 1-wire устройства)
      Дело в том, что в начале идёт инициализация, потом команда связанная с выбором 1-wire устройства (отправка первого байта), а потом уже функциональная команда (отправка второго байта). После получения функциональной команды 1-wire устройством, 1 wire устройство должно выполнить эту команду и потом снова ожидать инициализации. Т.е. 1-wire устройство сообщило вам температуру в виде двух байт, потому что вы отправили соответствующую функциональную команду, а потом 1-wire устройство отправлять уже ни чего не будет, потому что его об этом не просят. И всё остальное время 1-wire устройство не интересует то, что творится на линии, только если это что-то не аналогично инициализации.

    • @marisarze6705
      @marisarze6705 7 лет назад +1

      Спасибо большое, сейчас пытаюсь разобраться с внешним ацп DS2450S. Пока ещё не посмотрел последующие уроки, они в этом помогут надеюсь.

  • @4uva4ello59
    @4uva4ello59 7 лет назад

    Вопрос такой каверзный. - Зачем прописывать регистры в "шапке" программы? Не проще ли использовать директиву #include в нашем случае. Все эти регистры уже прописаны в этом файле...

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

      Об этом рассказано в следующих уроках. Всему своё время.

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

    Здравствуйте я что то запутался но как я понял инициализация проводится постоянно и получается что между банками памяти постоянно будет переход

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

      Да, правильно. Действия должны быть следующими: 1. Инициализация 2. Команда связанная с адресом 3. Полное выполнение одной команды. Если нужно отправить новую команду, то опять повторяем все пункты.

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

      Да для меня пока сложновато но буду стараться разобраться сам и с вашей помощью заранее спасибо а значения с датчика мы должны сначала в аккумулятор а потом в регистр?

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

    Как?
    и если это в программе pic simulator ide тоже самое ?

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

      Ответ скрывается в документации к микроконтроллеру. Там в главе о цифровых входах и выхода рассказано и возможно даже приведён пример, какие регистры нужно настроить.

  • @user-te5bj8sp1y
    @user-te5bj8sp1y 5 лет назад

    привет помоги зделать инкубатор диопозон роботы с 35 до 38

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

    А если pic16f876A и DS18B20 что мы будем помнять в программу?

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

      Нужно будет настроить ножки как цифровые входы выходы, а дальше всё то же самое.

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

    Михаил Петрович, спасибо огромное за уроки!
    Есть одна задача, которая состоит в том, чтобы управлять 8 LED подключенными, к примеру на порту "B". Идея заключается в следующем: 8 LED и бегущий огонь туда-сюда, но задача в том что бы первый LED загорался на 100% и переходил на 2-ой со 100% свечением, а первый при этом плавно затухал т.е. 75%, 3-ий LED 100% 2-ой 75% 1-ый 50% и т.д. Т.е. "бегущий огонь со шлейфом". возможно ли сделать данный эффект на контроллере PIC 16f84a, если да, подскажите, пожалуйста, как это возможно реализовать. Заранее спасибо!

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

      +NeoGlass Здравствуйте. Можно это реализовать на микроконтроллере PIC16F84A, но придётся подумать над программой, если понятен механизм управления яркостью свечения. Если не понятен механизм, то придётся поискать информацию про широтно-импульсную модуляцию (ШИМ) и управление яркостью с помощью ШИМ. ШИМ можно реализовать на микроконтроллере PIC16F84A программно, но существуют микроконтроллеры PIC, в которых есть аппаратный ШИМ, поэтому написать программу на них будет проще. Поэтому разберитесь, что такое ШИМ и поищите в интеренте, как можно организовать ШИМ на микроконтроллерах либо придумайте свой способ организации. В начале заставьте один светодиод постепенно загараться и тухнуть, а потом уже попробуйте разобратьс с отальными. Удачи)

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

      +MyChipPic Pic16f84a ШИМ потянет, т.к. я делал уже устроуство для чистки форсунок, где использовал ШИМ. Думаю отладка этой программы займет время, думаю протеус не смоделирует на 100%.

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

      +MyChipPic Спасибо большое, дали направление, буду изучать

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

      +NeoGlass Приготовьтесь отладку делать на столе. И еще, в цепь тактового генератора RC поставьте переменный резистор. Так проще подобрать скорость линейки, чем менять переменные в программе

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

      +Артем Апальков тоже интересует эта тема, а можете описать поподробнее, или, если есть возможность, выслать asm файл. Литературы мало удалось найти именно для pic16f84a, Буду очень признательна за любую помощь!

  • @augustsevasix681
    @augustsevasix681 6 лет назад

    наверное время измерения, все таки 750 мс ?

  • @user-ej7sq7ky5p
    @user-ej7sq7ky5p 3 года назад

    я не понял rrf

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

    Михаил Петрович, оцените и подскажите стоит ли покупать этот бюджетный программатор??? ruclips.net/video/qA0ekcv-sNw/видео.html
    megalvov.blogspot.ru/2015/02/usb-k150-pic.html

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

      +Артем Апальков Не пользовался, поэтому сказать что-то о нём не смогу. Могу сказать, что один мой студент купил себе китайский PicKit2 без надписи Microchip, который стоил в два или три раза дешевле и программатор нормально работал, по крайней мере на чтение и запись микроконтроллеров.

  • @user_user_320
    @user_user_320 3 года назад +1

    Как? Преподаватель который "умеет" работать с микроконтроллерами, не знает как правильно обозначается мили-секунды и микро-секунды?
    Много воды, нет сценария. Как по мне, такие не качественные видео набивают водой мозги новичкам.
    P. S.
    Посмотрел на канале много видео уроков, но опять же, много та дурного. Были бы видео качественные, вопросов нет. Дизлайк и отписка