Осциллограф на atmega128 своими руками

Обновлено: 06.07.2024

С год назад надоело мне мучаться со старым глючным осциллом, и решил найти схемку простенького прибора на время.
Нашел на форуме Робоклуба, автор bodja.
Прибор простой и вполне достойный (если нет промышленного).
Вполне можно сделать автономным, чтобы вытащить в поле
Вот на фото пример замера с Clone AVR (вверху клон, ниже осциллограммы)
На нижнем экране осциллограмма с помехой (потому что проба проходила без щупа, с простыми проводками).

Прибор как альтернатива, а не панацея, теперь подарил его другу, а себе приобрел промышленный.
P.S.: Надеюсь тему создал где надо.

В догонку.
К осциллу само собой нужен еще генератор, вот отличная схема.
Прежде чем собирать потусовался по их форуму, и заметил там посты от /RR/, с нашего форума.
Он тоже собрал прибор, посмотрев на его конструкцию корпуса истек слюнями (да и буржуи там в восторге от его варианта)

Было дело
Кнопки плохо написаны - несколько сработок на 1 нажатие часто случается. Руки всё не дойдут переписать.

/RR/, а вы не пробовали подтягивающие резисторы по шине клавиатуры поставить по 4,7-10к на + питания, вроде как постабильней, пашет, и если использовать кнопки резиновые с графитовым покрытием (с сопротивлением повыше), тоже получше работает.

_________________
Доброй ночи и удачи!

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

В этой статье я хочу вам рассказать о своем опыте изготовления замечательного и популярного у радиолюбителей, осциллографического пробника Хамелеона. В сети есть много информации по нему, но все же я рассказать подробно о своем Хамелеоне.

Итак, плату решено было приобрести, так как она двусторонняя и местами дорожки довольно таки мелкие, поэтому изготовить ее в домашних условиях проблематично (хотя и возможно). Еще одна трудность это дисплей. Так как, в Хамелеоне применяется дисплей от телефона Siemens CX65, который давным-давно снят с производства. Именно поэтому начинать изготовление следует в первую очередь с поиска дисплея. В телефонах Siemens CX65 использовались 3 типа дисплея, на контроллере LS020, LPH8836, и еще один тип который никак не подходит для Хамелеона. Самый предпочтительный первый тип дисплея (LS020), второй (LPH8836), тоже можно использовать, прошив соответствующей прошивкой контроллер, но скорость работы с этим типом дисплея меньше.


Детали для Хамелеона лучше приобрести все и сразу. Если будете приобретать плату, то часто продавцы предлагают и комплектующие к ней. Это гораздо быстрее и удобнее, а приобретать по отдельности – та еще головная боль. Монтаж лучше начинать с резисторов и конденсаторов, затем паять стабилитроны, транзисторы и микросхемы. Если плата у вас не заводского изготовления, а самостоятельного, придется пересчитать входные цепи. Подробно этот процесс описан в инструкции, которая лежит в архиве вместе с прошивкой и платой. Наибольшую сложность в Хамелеоне составляет монтаж процессора (Atmega32), и АЦП (AD9280). Шаг выводов довольно маленький, особенно в АЦП, поэтому при монтаже нужно проявлять аккуратность. Еще одна деталь, на которую стоит обратить внимание: в конструкции применяются танталовые конденсаторы, и “плюс” у них находится с той стороны, где полоска. При переполюсовке, устройство работать не будет. Советую до прошивки не запаивать R9-R11, R19, R14-R18 (Эти резисторы иногда мешают при прошивке), ну и не запаивать дроссель L1. Под кварц обязательно подложить прокладку, вырезать ее можно из обычного картона. Прошивать МК можно любым программатором, которых в сети полно. Прошивается он внутрисхемно, для этого нужно подпаять соответствующие выводы программатора к контактным площадкам на схеме. Подключаем программатор выбираем нужный hex-файл и прошиваем. После успешной прошивки переходим на фьюзы, внимательно смотрим, какие поставить, какие убрать и программируем их.

Осциллограф хамелеон своими руками

После прошивки запаиваем недостающие резисторы, подпаиваем дисплей, дроссель пока не запаиваем, подаем питание, 3.7В на контакты подключения батареи и зажимаем центральную кнопку. При этом прибор должен запустится на экране появится изображение, правда его видно только когда на экран падает свет, так как дроссель подсветки не установлен. После выключаем прибор, устанавливаем дроссель L1, и пытаемся вновь включить, при этом должна запустится подсветка экрана. Часто при первом включении луч уходит вверх, вернуть его на место можно стрелками “вверх”, ”вниз” в рабочем режиме прибора. Проконтролировать правильность настройки можно с помощью обычной батарейки. Выбираем режим DC, подключаем к щупам батарейку, смотрим на отклонение луча вверх, затем подключаем батарейку обратной полярностью и смотрим на отклонение луча вниз. И вверх и вниз луч должен отклонится одинаково. Померять отклонение (напряжение), можно в режиме сканирования, нажимаем центральную клавишу, затем кнопку вниз, появится первый маркер, затем еще раз вниз – появится второй маркер, а в верхнем правом углу значение напряжения. Там же отображается длительность и частота. Если включать прибор с одновременно нажатой кнопкой вниз – переходим в режим настроек. Здесь можно задать цвет фона, сетки, луча и т.д Также здесь можно задать тональность звукового сигнала и проконтролировать значение напряжения на батарее. Если раньше не работали с осциллографом, советую немного почитать о его режимах и функциях, это облегчит работу с Хамелеоном.

Ну и напоследок осталось самое интересное – поместить плату в корпус. Размеры моего корпуса 92*50*25мм. В боковых стенках пропиляны пазы под плату и она отлично там лежит. Дисплей закреплен с помощью силикона к передней панели. Батарейка прикреплена ко дну с помощью двустороннего скотча. Получился маленький компактный прибор. Отличие только в том что в авторском варианте кнопки управления слева, у меня они справа (просто поменял назначение кнопок вверх-вниз и влево-вправо местами, порезал дорожки и соеденил потом проводниками). Распайка щупа делается просто: если смотрим на мини-джек, то самый толстый – это минус, средний это сигнал. Крайний это вход внешней синхронизации, применяется редко.

Портативный осциллограф собран на ATmega32. Графический индикатор ЖКИ 128 х 64. Максимальная частота сигнала, на которой может работать этот осциллограф - 5 кГц меандр. При синусоидальном или треугольном сигнале максимальная частота всего лишь 1 кГц. Наилучшим решением для меня было WinAVR, так как она базируется на открытом AVR-GNU компиляторе и работает совместно с AVR studio 4.

Схема осцилографа

Параметры:

Измеряемая частота - до 5 кГц (меандр)

Напряжение питания - 12V DC

Дисплей - 128х64 px

Используемая область - 100х64 px


Описание

Рабочее напряжение схемы - 12 вольт. Далее, преобразовываем в +8.2V для IC1 и +5V для IC2 для IC3. Эта схема имеет входной диапазон напряжений от -2,5 вольт до +2,5 вольта или от 0 до +5 вольт в зависимости от положения S1 (переем./пост. ток). При использовании делителя можно расширить этот диапазон. Регулировка контраста дисплея Контраст дисплея можно установить при помощи P2. Максимальное напряжение на входе 30 вольт для постоянного и 24 вольта для переменного тока.

Программирование ATmega32

Прошиваем ATmega32. Файл AVR_oscilloscope.hex, при прошивке выставить Fuse биты микроконтроллера для тактирования от внешнего кристалла.
После этого, вы должны отключить интерфейс JTAG от микроконтроллера ATmega32. Если Вы не будете делать этого, то mega32 перейдет навсегда в начальный экран.

Калибровка

Две вещи, которые вы должны откалибровать - Настроить контраст ЖК монитора (P2) и Перемещение луча в центр монитора (P1), для этого подайте на схему питание и подкрутите P2 до яркого отображения на дисплее. Затем подкрутите P1 до перемещения луча в центр экрана.


Применение

Вы можете переместить луч вверх или вниз экрана, нажимая кнопки S8 или S4, чтобы измерить напряжение сигнала. 1 В на 1 квадрат. С помощью S7 и S3 вы можете увеличить или уменьшить скорость измерения. Этот осциллограф имеет автозапуск. Если ваш сигнал не устойчив, Вы можете закрепить экран, нажимая S6.

А почему бы и нет? Все необходимое чтобы нарисовать график изменения напряжения в бытовой электросети на борту Arduno имеется. (заодно и частоту узнаем).

Единственная проблема - переменный ток из розетки меняется в электрической цепи не только по величине, но и по направлению, а измерять отрицательные значения напряжений блок АЦП не умеет. Поэтому придется добавить в схему отдельный блок на операционном усилителе который будет конвертировать поступающие на вход значения напряжений в привычный для АЦП диапазон 0. 5V. Это также позволит значительно увеличить входное сопротивление (сам прибор будет вносить минимальное влияние на измеряемую цепь).

Питается осциллограф от напряжения 12V. Схема на операционном усилителе рассчитана таким образом, что производит конвертацию входного напряжения в диапазоне от -15. +15V в диапазон 0. 5V. ОУ питается от отдельного источника опорного напряжения собранного на линейном стабилизаторе 7805. Это же напряжение подается на вход AREF микроконтроллера. Также подключено 4 кнопки и монохромный дисплей с параллельным интерфейсом и разрешением 240*128 точек. Схему подключения дисплея мне было рисовать лень - все было спаяно по таблице да и на моем канале есть отдельная статья про этот дисплей.

Устройство собрано на ардуино-подобной платформе Mega 2560 R3 Core на базе микроконтроллера ATmega2560 от производителя INHAOS. Плата полностью обратно-совместима с оригинальной платой Arduino Mega 2560 - хотя по факту ей конечно не является. (на ней выведены дополнительные порты ввода/вывода, отсутствует встроенный стабилизатор напряжения и USB-UART преобразователь). За то в магазине INHAOS можно приобрести удобную макетную плату под пайку с мощным стабилизатором напряжения выполненным на базе линейного стабилизатора 7805 и промаркированными отверстиями для подключения периферии.

Для начала проведем тест вольтметра:

Скетч вольтметра очень простой:

Строка для вычисления напряжения имеет небольшое смещение:
float V = map(v, 0, 1023, -148, 152);
так как резисторы применяемые в схеме имели небольшую погрешность по сопротивлению.
Ни каких хитрых формул пересчета не требуется - и вы можете отдыхать пока Arduino за Вас работает.

Самодельный "двухполярный" вольтметр на Arduino работает как нужно - можно приступать к реализации алгоритмов по рисованию на дисплее синуса переменного тока из бытовой электросети.

Тырим картинку из Википедии и разбираемся с ней

По оси i мы будем измерять напряжение на входе ОУ. А вот сколько этих измерений (и с каким временным интервалом) потребуется сделать, чтобы нарисовать 1 период (T)?

Частота в сети f=50Гц
T=1/50 = 0,02 секунды или 20 миллисекунд
Для отрисовки одного периода Т я буду делать 100 измерений.
Одно измерение нужно будет проводить каждые 0.2 миллисекунды, или с частотой 5000 Гц

Естественно, что дисплей с такой частотой обновляться не сможет и поэтому придется применить следующий фокус:

  • делаем 200 измерений и сохраняем значения в оперативную память (для наглядности построим сразу 2 периода)
  • отображаем график из полученных значений на дисплее

Для того чтобы отмерять эти самые 0.2 миллисекунды будем использовать аппаратный 16 разрядный счетчик таймер 1. Запись полученных значений будем сохранять в процедуре прерываний, а картинку рисовать после сбора этих самых 200 значений.

Посчитаем прескалер таймера и количество тиков:

Собственно говоря тут и считать то особо нечего - при использовании делителя 1 как только счетчик будет иметь значение 3199 - вызываем прерывание, делаем измерение, пишем результат в массив размещенный в оперативной памяти. (подойдет и делитель 8 (считаем до 399).

Читайте также: