Доброго времени суток! Задачка крайне проста, нужно вывести график функции на осциллограф, используя микроконтроллер PIC16F84. Т.е. я так понял мы выводим на ЦАП и смотрим результат на осциллографе. Прогромировать микроконтроллер на Ассемблере. Функция 100*sin(wt)+50sin(3wt) Для начала хотя бы понять как вывести простую пилу или там просто наклонную прямую?
Для пилоообразного сигнала: формируем на выход микроконтроллера линейно увеличивающийся через равные интервалы времени код для параллельного ЦАП. По достижении максимального значения кода повторяем все с начала. И так далее.
Для сложной тригонометрической функции: поступаем почти так же, только код на выходе будет не линейно увеличиваться, а согласно функции. Поскольку выбран крайне слабый микроконтроллер, для которого прямой расчет тригонометрических функций - неосуществимая задача, то пишем таблицу значений выходного кода для ЦАП, рассчитывая эту табличку вручную на калькуляторе, и затем перебираем ячейки таблички с заданным интервалом, выводя эти значения на параллельный выход микроконтроллера.
_________________ Подпись убрал вместе с автором. aen
Студент? сессия, курсач через неделю? ....поздно пить Боржоми, когда почки отказали. Написать за вас - не просите. Раньше надо было учиться. Ну ниче, в армии научат
_________________ Подпись убрал вместе с автором. aen
Открыта удобная площадка с выгодными ценами, поставляющая весь ассортимент продукции, производимой компанией MEAN WELL – от завоевавших популярность и известных на рынке изделий до новинок. MEAN WELL.Market предоставляет гарантийную и сервисную поддержку, удобный подбор продукции, оперативную доставку по России.
На сайте интернет-магазина посетители смогут найти обзоры, интересные статьи о применении, максимальный объем технических сведений.
Студент, только это не курсач, слишком просто тогда. Учеба уже закончилась, теперь ссесия, но в следующем семестре будет большой проект по этой теме, препод настоятельно советовал начать разбираться, вот и пытаемся. Я лаборантом работаю, есть доступ к стендам) Хорошей литературы я на этот счет не нашел, может что посоветете? Впринцыпе основы понятны, но не до конца. Решил использовать ассемблер, что бы понять как именно работает контроллер, а не Си. Вот и спрашиваю какой именно выход выдает сигнал побайтно? И еще некоторые моменты.
Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO
подробнее>>
Мурато Мяуконни
Заголовок сообщения: Re: PIC16F84 Вывести график на осциллограф
PIC16F84 (особенно без буквы А в конце) - это очень простой, маломощный и очень древний микроконтроллер. Этакий мамонт, большой, неуклюжий и неоправданно дорогой. Но старые преподы-мастодонты очень любят совать его современным студерам для изучения. В принципе, для понимания основ сойдет, но это как каменный век с каменными топорами. Так вот. По этому микроконтроллеру в инете гуляет множество различных самоучителей, простых и видеоуроков, за прошедшие 20 лет его вдоль и поперек истаскали. Литературы - просто завались. От нормальной документации на сайте Микрочипа, до корявых "учителей" типа Корабельникова. Гуглопоиск заправляет.
У микроконтроллера есть два порта - набора выводов с переключаемым направлением вход/выход. Один, PORTB, шириной в 8 бит (1 байт), другой, PORTA шириной 6 бит, неполный. Остальные выводы - питание, внешний кварц и вход сброса. Для вашей тригонометрической функции пределы значения функции будут равны ±150, то есть 300 в беззнаковой величине. А в одном байте можно получить только 256 значений. Значит, потребуется 9 бит - полный PORTB шириной 8 бит (1 байт) и один выход из PORTA - для девятого бита. Фактически этот девятый бит будет знаковым (бит знака числа). Этот микроконтроллер 8-битный, поэтому все операции у него производятся с разрядностью 8 бит. На выход PORTB можно одновременно выдать параллельно 8 бит (1 байт).
Что такое двоичные числа, сколько бит в байте, как работает микроконтроллер и что такое ассемблер - надлежит изучить вам самостоятельно. Всё есть в инете, в учебниках. Потому что за вас вашу работу в лаборатории делать никто не будет. Можно написать и на Си, если знаете его.
_________________ Подпись убрал вместе с автором. aen
Начнем с пилы: Пила у нас от 0 до 255 Т.е. в асемблере мне выводить на порт B сигналы от 00000000 до 11111111 каждый момент времени работы контроллера? Реализуется же цикл пока не переполнится память? Прост не совсем понятно, как потом цифровой сигнал соберется в напряжение, значит ЦАП уже подключен к порту B и сам все делает? Данный микроконтроллер может только выдавать 1 и 0 на двух портах выхода, на этом его функйии заканчиваются, если говорить только об выходе?
Ну да. На выходе порта - параллельный ЦАП, принимающий параллельный код. ЦАП может быть сделан на такой же древней микросхеме КС1118ПА1, либо на более дорогом импортном варианте AD558. Либо примитивный вариант параллельного ЦАПа - на резистивной матрице R-2R (гуглопоиск в теме), но точность преобразования будет низкой и нестабильной. Изучите тему цифро-аналогового преобразования на резистивной матрице (гуглопоиск рулит)
Для линейного увеличения кода нужно написать простейший цикл с инкрементом регистра порта от 0 и... а обнулится порт сам по достижении макс.значения 255 и счет повторится заново. Последовательность действий: - настроить порт Б на режим выхода - очистить регистр порта Б далее цикл: - инкремент регистра порта Б на 1, - отсчет программной задержки, например на несколько миллисекунд. программная задержка - это такой же счет в регистрах, с целью создания интервала. без нее на портах данные будут меняться очень быстро. но на первых порах можно и без нее. с внешним кварцем 4 МГц на выходе получим частоту формируемой пилы около 2 кГц. - повторить
Получится как раз самая настоящая пила.
На ассемблере это будет выглядеть вот так: (забыл как настроить порт на выход в этом ПИКе) clrf PORTB loop: incf PORTB goto loop
_________________ Подпись убрал вместе с автором. aen
Для этого случая совершенно не критично, тут нет аналоговых входов. Проблема RMW была только там, где на порту были аналоговые входы. Я же писал - PIC16F84A - очень древний и очень примитивный микроконтроллер. Современные уже давно имеют раздельные регистры входа и выхода
_________________ Подпись убрал вместе с автором. aen
Может я конечно чего и не помню, сто лет не брал в руки старые ПИКи, чеж хочешь то, мог и запамятовать что-то. Но по-моему именно так и было. По крайней мере, стопудово помню, что если на порту был хоть один аналоговый вход, то проблема RMW появлялась. По остальным случаям не помню. вроде не было
_________________ Подпись убрал вместе с автором. aen
Заголовок сообщения: Re: PIC16F84 Вывести график на осциллограф
Добавлено: Вт дек 20, 2016 18:53:23
Модератор
Карма: 90
Рейтинг сообщений: 1337
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4558 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Мурато Мяуконни писал(а):
По крайней мере, стопудово помню, что если на порту был хоть один аналоговый вход, то проблема RMW появлялась.
Путаешь с "хоть один порт был настроен на "вход", все операции записи с настроенными на "выход", выполняются через RMW". Но это - байка, пролетевшая по форумам. Порты, на самом деле, автономны и независимы друг от друга. По этому, без разницы что и как настроено, и любые операции записи в порт выполняются через RMW. И ещё, RMW - это не проблема, это принцип модификации данных.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения