Доброго времени суток! Задачка крайне проста, нужно вывести график функции на осциллограф, используя микроконтроллер PIC16F84. Т.е. я так понял мы выводим на ЦАП и смотрим результат на осциллографе. Прогромировать микроконтроллер на Ассемблере. Функция 100*sin(wt)+50sin(3wt) Для начала хотя бы понять как вывести простую пилу или там просто наклонную прямую?
Для пилоообразного сигнала: формируем на выход микроконтроллера линейно увеличивающийся через равные интервалы времени код для параллельного ЦАП. По достижении максимального значения кода повторяем все с начала. И так далее.
Для сложной тригонометрической функции: поступаем почти так же, только код на выходе будет не линейно увеличиваться, а согласно функции. Поскольку выбран крайне слабый микроконтроллер, для которого прямой расчет тригонометрических функций - неосуществимая задача, то пишем таблицу значений выходного кода для ЦАП, рассчитывая эту табличку вручную на калькуляторе, и затем перебираем ячейки таблички с заданным интервалом, выводя эти значения на параллельный выход микроконтроллера.
_________________ Подпись убрал вместе с автором. aen
Студент? сессия, курсач через неделю? ....поздно пить Боржоми, когда почки отказали. Написать за вас - не просите. Раньше надо было учиться. Ну ниче, в армии научат
_________________ Подпись убрал вместе с автором. aen
Студент, только это не курсач, слишком просто тогда. Учеба уже закончилась, теперь ссесия, но в следующем семестре будет большой проект по этой теме, препод настоятельно советовал начать разбираться, вот и пытаемся. Я лаборантом работаю, есть доступ к стендам) Хорошей литературы я на этот счет не нашел, может что посоветете? Впринцыпе основы понятны, но не до конца. Решил использовать ассемблер, что бы понять как именно работает контроллер, а не Си. Вот и спрашиваю какой именно выход выдает сигнал побайтно? И еще некоторые моменты.
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
Рейтинг сообщений: 1443
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4613 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Мурато Мяуконни писал(а):
По крайней мере, стопудово помню, что если на порту был хоть один аналоговый вход, то проблема RMW появлялась.
Путаешь с "хоть один порт был настроен на "вход", все операции записи с настроенными на "выход", выполняются через RMW". Но это - байка, пролетевшая по форумам. Порты, на самом деле, автономны и независимы друг от друга. По этому, без разницы что и как настроено, и любые операции записи в порт выполняются через RMW. И ещё, RMW - это не проблема, это принцип модификации данных.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения