Atmega32 осциллограф подключение на компьютер

Обновлено: 03.07.2024

Самодельный осциллограф на AVR

Частота измерения: 10 Гц - 7.7 кГц
Макс. входное напряжение: 24В AC / 30В DC
Напряжение питания: 12В DC
Разрешение экрана: 128x64 пикселей
Область экрана осциллограммы: 100x64 пикселей
Информационная область экрана: 28x64 пикселей
Режим триггера: автоматический

Введение

Однажды, просматривая различные интернет сайты по электронике, я наткнулся на очень любопытный проект осциллографа, который был спроектирован с использованием МК PIC18F2550 и графического LCD с контроллером KS0108. Это был веб-сайт Steven Cholewiak. Это была хорошая схема и я решил разработать свой проект осциллографа и использование языка С, на котором я программировал последние года, вместо ассемблера. В качестве среды разработки я использовал WinAVR, которая основывается на open source AVR-GNU компиляторе и прекрасно работает с AVR Studio 4. Графическую библиотеку я разработал сам, специально для данного проекта. Если вы захотите ее использовать для каких-то других проектов, то ее необходимо переделывать. При измерении прямоугольного сигнала, максимальная частота, при которой вы увидите хорошую осциллограмму составляет около 5 кГц. Для других форм сигналов (синусоида или треугольный сигнал) максимальная частота составляет около 1 кГц.

Принципиальная схема AVR-осциллографа приведена на картинке ниже (нажмите для увеличения):

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

Напряжение питания схемы составляет 12 вольт постоянного тока. Из этого напряжения, в дальнейшем получается еще 2 напряжения: +8.2В для IC1 и +5В для IC2, IC3. Устройство может измерять входное напряжение от +2.5В до -2.5В или от 0 до +5В, зависящее от позиции переключателя S1 (выбор типа входного тока: постоянный или переменный). При использовании пробника 1:10, входное напряжение соответственно может быть увеличено в 10 раз. Кроме того, переключателем S2, можно установить дополнительно деление напряжения на 2.

Прошивка ATmega32

Файл прошивки: AVR_oscilloscope.hex, при выборе фьюзов необходимо указать использование внешнего кварца. После, необходимо обязательно отключить JTAG интерфейс, если этого не сделать, то на осциллографе будет отображаться экран инициализации, а после он будет уходить в перезагрузку.

Установка фьюзов AVR

Настройка

Для настройки прибора нужно выполнить всего 2 вещи: настроить контрастность LCD при помощи подстроечного резистора Р2 и выставить центр осциллограммы при помощи подстроечного резистора Р1.

Использование

Вы можете перемещать луч осциллограммы вверх или вниз путем нажатия кнопок S8 и S4. Один квадрат на экране, соответствует 1В.
При помощи кнопок S7 и S3 можно увеличивать или уменьшать частоту измерений. Минимальная частота формы сигнала, которая может быть отображена на LCD составляет 460Гц. Если необходимо посмотреть сигнал с более низкой частотой, например 30Гц, то необходимо нажать S7 для сжатия осциллограммы или S3 для растяжения.
В осциллографе используется автоматический режим триггера. Это означает, что если входной сигнал повторяющийся (к примеру треугольник) то триггер работает хорошо. Но если, форма сигнала постоянно меняется (к примеру какая-то последовательность данных), то для фиксации изображения необходимо нажать кнопку S6. Повторное нажатие S6 возвращает в нормальный режим.

Осциллограф на Atmega32 и LCD Siemens CX65

Это вторая версия цифрового осциллографа на микроконтроллере семейства AVR и графическом дисплее от сотового телефона Siemens.

Компоненты

- Atmega32A-16AU работает на частоте 16МHz от внешнего кристалла;
- LCD TFT 176x132, 65536 цветов, тип LS020(Siemens SX65);
- Внутренний АЦП работает на частоте 2МHz, частота дискретизации составляет 140кHz
- Управление: джойстик от телефона Siemens CX65;
- Батарея Li-Pol 3.6V, 500mAh;
- Питание: +3.3V стабилизированного напряжения.

Программное обеспечение

Программа написана на языке CИ с использованием WinAVR. Она занимает около 3000 строк, 31 Кб флеш-памяти. RAM память также используется по максимуму, код был изменен несколько раз и оптимизирован так, чтобы память была задействована полностью.

Возможности

Осциллограф используется для измерения напряжения переменного тока в диапазоне напряжений до 25В и в диапазоне частот до 10 кГц(хотя можно и больше, но тогда качество изображения будет хуже). Отображение рабочей области имеет размер 118x155 пикселей, участок разделен горизонтальными и вертикальными линиями. В верхней части панели отображается период сигнала для X и Y и напряжение в Вольтах, в правой стороне четыре позиции меню:

- Запуск измерений
- Настройки
- Вольтметр
- Индикатор батареи

Запуск измерения позволяет непрерывно следить за измеряемым сигналом, чтобы остановить нужно нажать на джойстик. Осциллограмма на дисплее автоматически масштабируется, расчитывается амплитуда, период сигнала участка X и Y, которые отображаются на верхней панели. Осциллограмма может быть синхронизирована (на видео она является неустойчивой из-за нестабильности генератора на LM555 от которого заряжается аккумулятор). В настройках вы можете изменить временную базу графика, при этом он будет сжиматься или расходиться по горизонтали. Вы также можете настроить уровень усиления, смещение по вертикальной оси. Кроме того, можно выбрать, как будет отображаться диаграмма в виде линии или в виде точек. Можно переключать коэффициенты на входе делителя напряжения, это может быть полезно, когда необходимо измерить высокое напряжение. Устройство также оборудовано вольтметром, который измеряет напряжение с точностью около 0,03 В. Последний пункт меню - индикатор напряжения. Индикатор показывает текущее напряжение батареи аккумулятора, а также может отображать входное напряжение в Вольтах.

Компания Gabotronics выпускает отладочную плату для изучения возможностей микроконтроллеров Atmel семейства XMEGA, которая представляет собой многофункциональный осциллограф смешанных сигналов и анализатор спектра с генератором сигналов произвольной формы. Дополнительно имеется два цифровых канала для использования прибора в качестве логического анализатора.

LED-драйверы MEAN WELL для промышленных и уличных светодиодных светильников: особенности, преимущества, выбор

Отладочная плата - осциллограф Xminilab-B на микроконтроллере Atmel AVR ATXMEGA32A4

Для визуализации данных, организации пользовательского интерфейса и меню управления используется графический ЖК дисплей с разрешением 128×128 точек. Все электронные компоненты и органы управления размещаются на двухсторонней печатной плате.

Отличительные особенности устройства:

  • основа устройства – микроконтроллер ATXMEGA32A4:
    • Flash-память программ - 32 КБайт;
    • SRAM - 4 КБайт;
    • EEPROM – 1КБайт;
    • осциллограф смешанных сигналов;
    • генератор сигналов произвольной формы;
    • анализатор спектра;

    Спецификация измерительного прибора:

    • осциллограф:
      • 1 аналоговый канал;
      • 2 цифровых канала (уровень – 3.5 В);
      • аналоговая полоса пропускания – 2 МГц;
      • максимальная скорость выборки – 16 Msps;
      • разрешение АЦП – 8 бит;
      • аналоговая синхронизация и внешняя цифровая синхронизация;
      • вертикальный и горизонтальный курсоры;
      • входное сопротивление – 1 МОм;
      • размер буфера – 256;
      • максимальное входное напряжение - ±25 В (при использовании делителя 1:10 входной диапазон ±250 В);
      • 1 аналоговый канал;
      • максимальная скорость конвертирования – 1 Msps;
      • разрешение – 8 бит;
      • низкое выходное сопротивление;
      • размер буфера – 256;
      • максимальное выходное напряжение – ±3.5 В.

      Принципиальная схема прибора

      Основные характеристики АЦП ADS931:

      Выходной каскад генератора сигналов произвольной формы выполнен на двухканальном операционном усилителе AD8039, имеющем полосу пропускания 350 МГц и низкое потребление энергии. Один его канал используется в выходном каскаде генератора, второй канал используется в схеме источника напряжения +2 В для АЦП.

      • встроенный контроллер SED1335;
      • разрешение 128×128 точек;
      • в текстовом режиме – 21×16 символов;
      • 8 КБайт встроенная память для графики и текста;
      • электролюминесцентная подсветка;
      • напряжение питания 5 В.

      Как видно по схеме, для питания микроконтроллера и аналоговой части требуется наличие следующих напряжений: +3.5 В, +5 В, –5 В, а также напряжение для подсветки индикатора.

      Для питания микроконтроллера напряжение 3.5 В поступает с микромощного малошумящего стабилизатора с низким падением напряжения LP2985IM5-3.5. Нагрузочная способность данного стабилизатора 150 мА.

      Для питания операционных усилителей требуется наличие двуполярного источника напряжения +5 В и –5 В. Для решения этой задачи применяется регулятор напряжения MC33375D-5.0 и интегральный DC/DC преобразователь TPS60403 (charge pump – с подкачкой заряда).

      Подсветка ЖК дисплея является электролюминесцентной, поэтому для управления применяется специальный драйвер MIC4832. Управление контрастностью дисплея осуществляется потенциометром R1.

      Конвертер уровней интерфейса RS-232 выполнен на транзитсорах Q1, Q2, Q3.

      Источником тактовой частоты для микроконтроллера является кварцевый резонатор 16 МГц. Управление, навигация по меню, настройка параметров осуществляются с помощью клавиатуры K1-K7 и двух энкодеров.

      Для программирования (а также для отладки ПО) микроконтроллера используется 2-проводный интерфейс PDI. Данный интерфейс поддерживает высокоскоростное программирование всех пространств энергонезависимой памяти, в т.ч. Flash-память, EEPOM, Fuse-биты, Lock-биты и сигнатурный код пользователя. Программирование осуществляется путем доступа к контроллеру энергонезависимой памяти (NVM-контроллер) и выполнения NVM-контроллером команд.

      Загрузки

      • Принципиальная схема (pdf) – скачать
      • Список компонентов (xls) – скачать

      Следующая часть статьи посвящена руководству пользователя, пользовательскому интерфейсу, меню управления и настройкам параметров прибора, а также будет предоставлен исходный код программы и hex-файл для программирования микроконтроллера.

      Компания Gabotronics реализует все необходимые для сборки комплектующие, печатную плату, а также готовое к работе устройство.


      Вот потребовался мне автомобильный осциллограф, посмотрел цены, удивился… Цены как на крыло самолета. Кстати, не понятно почему, ведь параметры осциллографа для тестирования авто крайне низки, как по частотам так и по напряжению. По сему решил сам себе сделать.

      1. Вид осциллографа – USB приставка к ноутбуку, ибо на большом экране смотреть удобно, можно сохранять для последующего анализа ну и т.д. и т.п.
      2. Тип сигнала – Переменный, Постоянный, Положительная полярность. Работа с отрицательными напряжениями не нужна.
      3. Кол-во каналов – 4, больше смысла не вижу, но с возможностью расширения до 8.
      4. Максимальное входное напряжение — вольт 50, выше смысла нет.
      5. Чувствительность — 1 милливольт, больше тоже не надо :-)
      6. Частота — до 20Кгц, для миллисекундных сигналов за глаза хватит, а других там нет :-)
      7. Удобная программная оболочка.

      Начну с самого важного – Оболочки для автомобильного осциллографа. Да да, именно с оболочки. Ибо железо не сложно любое сделать, а вот удобная оболочка это реальный дефицит. Оболочки которые просто тупо показывают сигнал в реальном времени для автомобильного осциллографа крайне не удобны, ибо часто нужно анализировать сигнал продолжительное время и иметь возможность «отмотать» назад. По сему нужна оболочка типа Самописец-Осциллограф. И что б каналов было не менее 4х…

      Вот она какая, на мой взгляд, самая лучшая. Это не реклама, это факт :-) ИМХО конечно.


      Ну вот, с софтом определился, теперь надо определится с интерфейсом, не буду грузить вас своими муками выбора, я остановился на СОМ порте. С ним работать просто, пропускной способности для поставленных задач с избытком, в выбранном софте есть драйвер вывода информации с СОМ пора.

      Теперь железо, а точнее что использовать в роли АЦП. Железо должно быть доступное, стабильное, не дорогое и легко программироваться. Долго не думал, остановился на микроконтроллере АТмега 328р. Программируются эти микроконтроллеры банально на С++, точнее на упрощенном С++.
      Очень удобно то что этот микроконтроллер можно купить уже распаянным на плате с минимально нужной обвязкой., Ардуино сее называется :-) То есть не надо самому плату разводить и паять, удобно. Всем параметрам, из моего ТЗ, АТмега 328р отвечает полностью, по сему использовать буду ее.

      Для миниатюризации я вот такую взял. Она имеет 8 аналоговых входов, отвечающих всем требованиям ТЗ, имеет на борту эмулятор СОМ порта на СН340, питание берет напрямую с USB порта. В общем то что нужно. Ардуинку можно любую использовать на 328р


      Вот схема этой платы. На ней стоит сам микроконтроллер АТмега 328р, банальный эмулятор СОМ порта на СН340, кварц и стабилизатор питания на ЛМке для запитки от внешнего источника, если надо, вот и все, ну пара лампочек и фильтров не в счет :-) То есть все то что нам нужно и ничего лишнего! Не зря говорят — Совершенство в простоте.


      Теперь надо написать программку для микроконтроллера. Нам нужно что б постоянно опрашивался аналоговый вход и данные о величине напряжения постоянно, онлайн так сказать, шли в СОМ порт. Если каналов несколько, то опрашиваются по кругу все нужные входы и данные идут на СОМ порт с разделителем табуляция. Вот так все просто.

      Вот скриншот того что должен выдавать микроконтроллер в СОМ порт для нашей программы PowerGraph.


      Осциллограф у меня будет работать в 4х режимах — 1канал, 2канала, 3канала и 4 канала.
      Переключение между каналами будет осуществляться по кругу нажатием на кнопку.
      При включении канала будет загораться светодиод индикации работы канала.
      Вот написал программку. Сам я не программист, по сему написал как смог, сильно не критикуйте, расстроюсь :-) Программа полностью рабочая и проверена не однократно в деле. Как заливать программу в плату рассказывать не буду, в инете на каждом углу это с картинками рассказано :-)

      Вот сама программа.

      int regim=1;
      int flag=0;
      void setup()
      digitalWrite(07, HIGH);
      Serial.begin(128000);//скорость СОМ порта должна совпатать со скорость в драйвере
      pinMode(2, OUTPUT);
      pinMode(3, OUTPUT);
      pinMode(4, OUTPUT);
      pinMode(5, OUTPUT);
      >
      void loop()
      if(digitalRead(07)==HIGH&&flag==0)//если кнопка нажата
      // и перемення flag равна 0, то …
      regim++;
      flag=1;
      if(regim>4)//ограничим количество режимов
      regim=1;//так как мы используем только одну кнопку,
      // то переключать режимы будем циклично
      >
      >
      if(digitalRead(07)==LOW&&flag==1)//если кнопка НЕ нажата
      //и переменная flag равна — 1, то …
      flag=0;//обнуляем переменную "knopka"
      >
      if(regim==1)//первый режим
      digitalWrite(2, HIGH);//включение светодиода
      digitalWrite(3, LOW);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
      // читаем аналоговый вход pin 0:
      int port0 = analogRead(A0);
      //Преобразовываем аналоговые показания (которые идут от 0 до 1023) в напряжение (0 — 5 В)
      float voltageport0 = port0 * (4.745 / 1023.000);//4.745 опорное напряжение, замеряется при калибровке на плате
      // выводим значение напряжения в порт
      Serial.println(voltageport0,3);// печатаем значение в порт и жмем энтер
      //задержка для стабильности
      delay(1);
      >
      if(regim==2)//второй режим
      digitalWrite(2, HIGH);//включение светодиодов
      digitalWrite(3, HIGH);
      digitalWrite(4, LOW);
      digitalWrite(5, LOW);
      int port0 = analogRead(A0);
      int port1 = analogRead(A1);
      float voltageport0 = port0 * (4.745 / 1023.000);
      float voltageport1 = port1 * (4.745 / 1023.000);
      Serial.print(voltageport0,3);// печатаем значение в порт
      Serial.print(" ");// печатаем таб
      Serial.println(voltageport1,3);// печатаем значение в порт и жмем энтер
      delay(1);
      >
      if(regim==3)//Третий режим
      digitalWrite(2, HIGH);
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(5, LOW);
      int port0 = analogRead(A0);
      int port1 = analogRead(A1);
      int port2 = analogRead(A2);
      float voltageport0 = port0 * (4.745 / 1023.000);
      float voltageport1 = port1 * (4.745 / 1023.000);
      float voltageport2 = port2 * (4.745 / 1023.000);
      Serial.print(voltageport0,3);
      Serial.print(" ");
      Serial.print(voltageport1,3);
      Serial.print(" ");
      Serial.println(voltageport2,3);
      delay(1);
      >
      if(regim==4)//Четвертый режим
      digitalWrite(2, HIGH);
      digitalWrite(3, HIGH);
      digitalWrite(4, HIGH);
      digitalWrite(5, HIGH);
      int port0 = analogRead(A0);
      int port1 = analogRead(A1);
      int port2 = analogRead(A2);
      int port3 = analogRead(A3);
      float voltageport0 = port0 * (4.745 / 1023.000);
      float voltageport1 = port1 * (4.745 / 1023.000);
      float voltageport2 = port2 * (4.745 / 1023.000);
      float voltageport3 = port3 * (4.745 / 1023.000);
      Serial.print(voltageport0,3);
      Serial.print(" ");
      Serial.print(voltageport1,3);
      Serial.print(" ");
      Serial.print(voltageport2,3);
      Serial.print(" ");
      Serial.println(voltageport3,3);
      delay(1);
      >
      >

      Программа закончена и отлажена.
      Приступим к электронной части.

      Схему приводил выше. Из нее видно что плата имеет 8 аналоговых входов, 14 цифровых входов/выходов. Вот и будем работать с ними.


      Аналоговые № 0,1, 2, 3 будем использовать как входы осциллографа. Сделаем для них защиту и дополнительный вход через делитель 1х10, так как подавать на микроконтроллер максимум можно всего 5.2 вольта. С делителем можно будет работать с напряжениями до 50 вольт, что полностью перекрывает наши потребности.
      Цифровые № 2,3,4,5 будем использовать для светодиодов, они будут индицировать включенные аналоговые входы.
      Цифровой №7 будет подключен к кнопке которая будет переключать режимы моего осциллографа.
      Еще будет кнопка Бут режима. Плата по умолчанию в бут режиме, но для работы это не удобно, ибо управление идет через RESET. При обращении к СОМ порту идет инициализация СОМ порта и чип эмулятор посылает резет на микроконтроллер. То есть при запуске программы плата ребутится и сбрасывает настройки которые выставили кнопкой, это не удобно. Для того что бы этого безобразия не было, я сее отключаю с помощью кнопки. Она подключает вход микроконтроллера «RESET» к электролитическому конденсатору 10Мкф, конденсатор сглаживает посылку на перезагрузку. Эта же цепь используется при заливке прошивки, по сему на момент программирования надо конденсатор отключать. Назвал эту кнопку Бут кнопкой :-)

      Ну вот, как подключать понятно, осталось воплотить в железе.

      Начнем с защиты и делителя.
      Защиту будет обеспечивать стабилитрон на 5.1в. А делитель будет обычный на резисторах.
      Так как сигналы у нас будут низкочастотные, это сильно упрощает жизнь. В расчетах делителя не надо учитывать внутреннее сопротивление приемника, не надо согласовывать вход с делителем, не надо учитывать волновое сопротивление кабеля и разъемов.
      Надо просто посмотреть в даташите на микроконтроллер на какое сопротивление выхода оптимизирован его АЦП, и сделать делитель с таким выходным сопротивлением. Так мы добьемся максимальной точности в 0.005 вольта. В даташите написано что он оптимизирован под 10Ком выходного сопротивления нагрузки. Внутреннее сопротивление АЦП 100Мом…


      Вот такую схему я посчитал. R1 и R2 собственно сам делитель, R2 еще задает сопротивление выхода делителя, я его взял 10Ком, так как ЦАП оптимизирован именно на такое сопротивление. R3 и VD1 это защита от перенапряжения. На вход АЦП нельзя подавать больше 5.2в. VD1 стабилитрон на 5.1в, можно использовать любой. R3 токоограничивающий резистор, ограничивает ток стабилитрона когда он открывается. Вот такой простой делитель с защитой.


      Вот так все просто :-)


      Ну раз схему разработали то настала пора воплотить это все в «железе».

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

      Вот такой набор деталей у меня.


      Для начала подготовим корпус. Просверлим все отверстия.


      Далее, навесным монтажом, смонтируем делители прямо на блоке разъемов.
      Вот так, просто – надежно — удобно.


      Теперь примерим плату, проведем формовку выводов делителя и на них напаяем плату.
      Вот так вот. Выходит очень удобно и компактно.


      Смонтируем в корпус светодиоды, кнопку, переключатель и конденсатор. Вот так. Длинна проводов достаточная но не избыточная.


      Почти все готово, осталось впаять плату в корпус.


      Привинтить блок разъемов в корпус. Взять синюю изоленту, без нее ни как! Сделать ограничитель для УСБ провода.


      Теперь можно закрыть корпус, залить прошивку и проверить работу. У меня все ОК.


      Вот и все, мой автомобильный осциллограф готов.
      Им можно смотреть-диагностировать расходомер(МАФ), генератор, катушки, датчики положения колена и распредвалов. Смотреть правильность установки ГРМ, Смотреть форсунки, по пульсации топлива в рампе можно косвенно смотреть работу насоса и регулятора давления топлива… В общем полезный зверек в хозяйстве. Особенно он полезен когда какое либо устройство отказало не полностью, а ушло от параметров и мозг не видит этого.


      Пора приступать к испытанием на авто.
      Все отлично и очень удобно. Как и планировал :-)


      Тему датчиков в этом посте не затрагиваю, ибо очень она объемная. Но все датчики легко самому изготовить и емкостные и индуктивные и контактные… Может отдельно напишу об них…


      Вот так просто можно сделать себе качественный автомобильный осциллограф.
      На этом все, ни гвоздя вам ни жезла :-)



      Несколько месяцев назад, во время сёрфинга в интернете, я наткнулся на осциллограф на микроконтроллере PIC18F2550 и графическом дисплее на контроллере KS0108 . Это был сайт Steven Cholewiak. Я ещё никогда не видел осциллограф на одном микроконтроллере. Для меня это было воодушевляющим и я решил сделать нечто подобное, но на языке C. Лучшим решением для меня было использовать WinAVR, он базирован на основе общедоступного компилятора AVR-GNU и отлично работает с AVR studio 4. Графическая библиотека, которую я использовал, была создана мною специально для этого проекта. Она не для общего использования. Если вы хотите включить её в свой код, вам надо будет переделать её под ваши нужды. Максимальная частота которую может отобразить этот осциллограф это 5 кГц, для меандра. Для других сигналов (синус, треугольник) - 4 кГц.

      Описание
      Напряжение питания схемы - 12В. С помощью преобразователей оно преобразуется в 8.2 В для IC1 и 5 В для IC2 и IC3. Эта схема может измерять напряжение от -2.5 В до +2.5 В или от 0 В до +5 В в зависимости от состояния переключателя S1 (переменный или постоянный ток). Используя делитель 1:10 можно измерять в 10 раз большее напряжение. Кроме того с помощью S2 можно дополнительно разделить входное напряжение на 2.

      Программирование ATmega32.
      AVR_oscilloscope.hex - прошивка для микроконтроллера. При прошивке выставьте FUSE биты микроконтроллера на тактирование от внешнего кварца. После прошивки обязательно отключите JTAG! Если этого не сделать, при включении вы увидите начальный экран и при переходе на экран осциллографа вы опять увидите начальный экран.

      Калибровка.
      Только две вещи нуждаются в калибровке. Это переменные резисторы P1 и P2. P1 нужен для перемещения луча в центр экрана, а P2 для настройки контрастности дисплея.

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

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