РадиоКот >Лаборатория >Цифровые устройства >
От цифрового вольтметр до цифрового осциллографа часть 1.
Данная статья даёт основу для создания своего цифрового осциллографа на примере цифрового вольтметра, который чуть можно преобразовать и получить цифровой осциллограф (о преобразовании будет рассказано в части второй). Предел измерения от 0В до 2,56В дискретность по уроню - 8бит. Почему? Данная статья писалась для ознакомления:
связи микроконтроллера с компьютером
написание программы для компьютера, работающая с ком-портом (на примере компонента SlyDiman)[1]
пример настройки АЦП, УСАРТ"а.
Программа для компьютера писалась в Borland C++ Builder, прогамма для Mega16 писалась в WinAVR[2].
Схема:
Сам собрал на макетке, а для НИИ (в котором сейчас все в отпуске) спаял плату, аккуратно соеденив всё проводами, потому что модернизировалась бесконечно. На рис. 1 фотка того, что я собрал дома для проверки работы программ.
Ну-с приступим-с к написанию программ. Как все культурные коты и кошки писать наши программы начнём с алгоритма!!!, но сначало определимся с форматом команды, которые будем посылать с компьютера на микроконтроллер и обратно (См. табл. 1).
StCmd - это "сигнализация" о том, что сейчас посылаем комманду
CMD - сама комманда
Size - размер поля Дата + размер поля Cmd
Data - сами данные
Какие команды посылать в МК и в компьютер??? Вопрос не сложный, тут надо придумать то, что надо. Но самые первые команды, которые приходят в голову это "выбор канала АЦП", "начать измерения", "остановить измерения". Возможно добавить ещё парочку, к примеру "последовательность переключения каналов", "установление интервала измерения" и таких подобных комманд можно придумать кучу. Но пока хватит. Все команды зписаны в файле "global.h"
Напишем алгоритм, а потом и код программы. Алгоритм смотрите на рисунке, а код скачивайте после статьи.
Полное представление алгоритм о программе не даёт, потому что не возможно рисовать для каждой мелочи квадратик. Принцип работы программы следующий: организована два буффера для приёмника и передатчика УСАРТ"а. Когда данные принимаются от компьютера срабатывает прерывание и принятый байт записывается в буффер приёмника, потом происходит извлечение и обработка. По такому же принципу устроен и передатчик.
Самое противное это переполнение буффера. Переполнение буффера возможно, если загрузка в массив осуществляется быстрее чем извлечение. Поэтому запуск АЦП происходит по переполнению таймера 0. Вообще почему именно буфферы? Как мне кажется это ускорит работу МК, не будет пустых простаиваний в ожидании передачи, приёма команды.
Алгоритм отправки сообщения представлен на следующем рисунке:
Флаг готовности устанавливается только, тогда когда нечего передавать. В программе происходит периодически проверка на готовность флага "readyUSART" и пустоту буффера. Если флаг "readyUSART" установлен в "0", то идёт передача данных в комп, иначе ничего не идёт. В подпрограмме прерывания, идёт тоже проверка на пустоту буффера, если он пуст то передавать нечего, и устанавливается флаг "readyUSART" в "1". В основном коде программы идёт проверка на этот флаг и на пустоту буффера, если они не "0" то начинается передача в компьютер.
С программой для МК мы закончили. Всё написано.
Формат сообщения передачи от компьютера в микроконтроллер у нас такой же как и для МК. Алгоритм будет похожим на тот, который мы уже написали для МК, отличие будет состоять в том, что мы воспользуемся стандартным прерывание по приёму, а передача будет осуществляться непосредственно по нажатию кнопок. Начнём с того, что разместим компоненты на форме.
У меня получилось так:
Что есть что?
1. это компонент Ком - порта (SlyDiman) вот с его помощью мы отправляем и получаем битики.
2. этот компонент для организации выпадающего меню
3. это не компонент, это выпадающее меню, которое получается при помощи компонента "2"
4. это панель, на него и будем выводить результат измерения АЦП
5. что-то вроде панели на котором хранятся каналы АЦП
6. это графический компонент при помощи которого будем визуализировать сигнал, просто для красоты
7. радиобуттоны для выбора канала
8. кнопка начать АЦ-преобразование
9. кнопка закончить АЦ-преобразование
10. галочка для записи в файл
11. статус бар, в котором будет храниться информация, о com-порте, о "нормально" и "плохо" переданных данных.
Я думаю каждая кнопка сама за себя говорит. В борланде можно посмотреть как всё это работает. Обратите внимание на компонент SlyDiman и его метод "OnDataReceived". Это прерывания на приём байтов от МК. Возможно также использовать и другой компонент, как мне кажется это один из доступных.
Программировал Мегу16 ByteBlaster"ом, лучше конечно иметь джатаг, а то мучений туча.
Прилагаю небольшой кусочек видео работы этого вольтметра. Как проверял? К сожалению дома генератора не имею, зато имею мегу8 запрограммил её так, что она генерит с одной ноги порта прямоугольные импульсы. И завёл только на первый канал АЦП. Остальные ноги висят в воздухе и по переменно я их сажал на землю.
В этой статье заложен принцип змерения и передачи данных в компьютер. Для цифрового осциллографа следует увеличивать быстродействие АЦП и скорость передачи данных в компьютер, а именно использовать USB. Следующим этапом станет подбор микроконтроллера с встроенным USB к примеру это может быть at91sam7.
Планы в будущее: очень большие!!!
Всем удачи!!!
Поздравляю с днём рОждения, Кота!!!главное чтобы всегда были свежие мысли, главное чтобы они воплощались во что-то материальное, к примеру в железу и чтоб РАБОТАЛО, если не с первого раза то со второго. По меньше мучений с электронами и дырками. Удачи во всём.
Вопросы, как обычно, складываем тут.
Файлы:
Программа - 01.rar
Прошивка - 02.rar
Как вам эта статья?
|
Заработало ли это устройство у вас?
|
|
|