INT 21h

Hi, I am Vladimir Smagin, SysAdmin and Kaptain. Telegram Email / GIT / RSS / GPG

АЦП (ADC) в AVR mega88 (mega8, mega48, mega168, mega328)

№ 5146 В разделах: Electronics Programming от May 6th, 2013,
В подшивках:

По работе мне понадобилось сделать датчик поворота руля. Самый простой и точный способ это выдернуть шифратор из обычной компьютерной мыши, пришаманить его к рулевой колонке, а потом тупо считать подаваемые импульсы. А что если руководитель проекта подумал, что сделать это с помощью переменного резистора гораздо круче? Ну раз он захотел, то почему бы и нет? Ну подумаешь точность немного упадет 🙂 Все равно компьютер будет подруливать.

Чтобы ADC заработал нужно подключить AGND, AREF и AVCC к питанию. Резистор нужно подключить к ADC0 согласно схеме на рисунке ниже.
sNRkfEiZeFSjInT7nvBGsBg

Теперь необходимо инициализировать АЦП. Включаем нужный пин на вход (я это сделал довольно грубо и одним махом сделал входом весь порт C), устанавливаем делитель в ADCSRA на 256, в DIDR0 отключаем ненужные входы АЦП 1, а нужные 0 и настраиваем мультиплексор.

void initADC(void) {
   DDRC = 0;
   PORTC = 0xFF; 
   PRR |= (1<<PRADC);
   ADCSRA = (1<<ADPS0)|(1<<ADPS1)|(1<<ADPS2);
   DIDR0=0b00111110;
   ADMUX = (1<<MUX0);
}

Чтобы снизить шумы можно применить LC фильтр, описаный в даташите

adc_noise_reduce

Теперь можно начать читать из АЦП значения. Они будут изменяться от 0 до 1023.

  int adc_value=0;
  while (1) {
      sumsung_clr();
      sumsung_goto(0,0);
      fprintf_P(&display,PSTR("%02d\n"), adc_value);
      _delay_ms(300);
      ADCSRA |= (1<<ADSC)|(1<<ADEN);
      while((ADCSRA & (1<<ADSC))!=0) ;
      adc_value=ADC; 
  }

Должно получиться что-то типа такого

2013-05-07 00.34.21

Демонстрационный стенд с подключеным экраном

2 комментариев »

Samsung (aka Sumsung) 2002 VFD module AVR library

№ 4767 В разделах: Electronics Programming от January 13th, 2013,
В подшивках: ,

Как выглядит дисплей, ищется в магазинах по словам “samsung vfd 20×2” или “20T202DA2J”

sumsung_vfd_2002_avr_library sumsung_vfd_2002_back_avr_library

Я его брал за 15 баксов, в нем нет кириллицы и он имеет последовательный порт. В библиотеке для AVR используется аппаратный SPI от mega32, но пока я пытался освоить этот модуль я использовал программный SPI, который тоже есть в библиотеке, но жутко закомментированый.

Начать работать очень легко! Инициализация SPI sumsung_init (), потом настройка sumsung_setup (1,1,1) (включить дисплей, включить курсор, мигать курсором) и очищаем экран sumsung_clr(). Чтобы отправить текст нужно использовать sumsung_text ("(C) Smagin Vladimir,\n"), где \n – перенос на 2ю строку в 0 колонку. Потом можно рисовать и текст второй строки sumsung_text ("2013."). Чтобы перенести курсор на нужную позицию используйте sumsung_goto(19,1) – перенесет курсор в 20ю колонку второй строки (от 0 до 19 по горизонтали и от 0 до 1 по вертикали). В любом случае, демонстрационная программа прилагается к библиотечке.

Код библиотеки находится в моем репозитории.

Няшное видео демонстрационной программы

  1. Включить экран, показать курсор, мигание
  2. Вывод строк и очистка экрана
  3. Переходы по экрану
  4. Выключить мигание
  5. Выключить дисплей
  6. Включить дисплей и курсор
  7. Мигать курсором

Распиновка
// 1 GND
// 2 VCC
// 3-SIO D11-MOSI
// 4-STB D10-Slave Select
// 5-SCK D13-SCK

Мой проект часов с погодой на этом дисплее https://blindage.org/?p=9733

Нет комментариев »

Часы электронные с календарем, термометром и синхронизацией по Bluetooth

№ 4507 В разделах: Electronics Programming от September 11th, 2012,
В подшивках: ,

Работают они на микроконтроллере mega48, часах ds1307, термометре ds18b20 и индикаторе LM1640 с чипом TM1640.

Есть и второй вариант с вакуумно-люминисцентным дисплеем (можно и жидкокристаллический прикрутить), но он не так интересен, т.к. слишком простая будет переделка на него. Но если хотите, то могу сделать это за дополнительную плату специально для вас 🙂

image

Синхронизатор взят из прошлого проекта.

Традиционное видео

И ночная фотография

Светят они ночью просто замечательно 🙂 Ночник даже не нужен 🙂

https://git.blindage.org/21h/clock-tm1640

Нет комментариев »

Часы для моего друга на attiny2313 и ds1307

№ 4487 В разделах: Electronics Programming от September 5th, 2012,
В подшивках: ,

Схема этого чудо девайса обалденно простая. К микроконтроллеру по I2C подключается часовая микросхема DS1307. Почему контроллер, если можно было обойтись генератором, счетчиком и декодером в индикаторы? А потому, что синхронизироваться часы будут по Bluetooth 🙂 Программа синхронизации мультиплатформенна и написана на Lazarus.

В выбраном мной микроконтроллере ATTiny2313 используется не аппаратный TWI (I2C), а полуфабрикат USI, с которым я задолбался разбираться и просто использовал готовую софтовую библиотеку. I2C используется для передачи информации от часовой микросхемы DS1307 в микроконтроллер, где полученная информация преобразуется в приятный вид и выведется на индикатор с помощью динамической развертки и сдвигового регистра 74HC595. При подключении DS1307 не забудьте подключить и вывод SQW к INT1 микроконтроллера, а также подтянуть его резистором на 10 кОм к Vcc. Дело в том, что DS1307 настроена программой на “тикание” выводом SQW с частотой 1 Гц, который подключен к ноге внешнего прерывания микроконтроллера. Это избавляет микроконтроллер от ежесекундного опроса часовой микросхемы, тупо увеличивая значение счетчика с каждым вызовом этого прерывания. Также на вывод DS1307 для батарейки (нога 3) можно повесить батарейку, которая будет помогать удерживать в микросхеме часов время пока основное питание не работает. Не стоит забывать об установке 4 транзисторов КТ315Б, иначе вы перегрузите ваш микроконтроллер.

Теперь по поводу настройки. У этих часов нет кнопок управления, зато из Китая заказан охуенный bluetooth модуль, который будет подключен к UART микроконтроллера для настройки часов. Если у вас нет модуля, но очень хочется настроить, то перед опросом часов есть закомментированые строки с настройкой. Устанавливаете там время (сейчас в коде 30 секунд, 58 минут и 3 часа утра) и прошиваете. Как только часы включились в указанное вами время эти строки снова комментируете и еще раз прошиваете чтобы этот код не настроил часы при следующем включении. Теперь время будет зависеть от качества установленного вами кварца и жизни батарейки 🙂

Синхронизатор написан на Lazarus с подключеной библиотекой synaser. Вставляете в компьютер Bluetooth адаптер, делаете сопряжение с модулем в часах, указываете полученый последовательный порт в строке ввода и нажимаете единственную кнопку. Исходник программы также лежит в репозитории.

Вы могли заметить нестыковку на видео с минутами. Из-за ошибки в коде передавался параметр в системе счисления с основанием 16, а не 10.

Нет комментариев »

Индикатор JY-LM1640 и библиотека для AVR (нет, не та кривизна для Arduino)

№ 4373 В разделах: Electronics Programming от June 30th, 2012,
В подшивках: ,

Купил индикатор этой зимой и никак не мог его завести (ох уж эти китайцы). Даташит не был шитом, он был щитом. Кривым китайским щитом. Наконец-то вышла документация на английском! О, как же я этого ждал!

Есть в интернетах библиотека для Arduino, но она никак не применима для нормальных проектов. Но мне было лень писать код заново, поэтому моя библиотека основана на библиотеке Батисты. Пока что библиотека очень простая и практически ничего не умеет, но как только я более менее оформлю код вы сможете использовать его с любым микроконтроллером AVR.

Видео с демонстрашкой. Простите что так медленно говорю. 5 утра же 🙂

JY-LM1640 (TM1640) code repository

Нет комментариев »

Яндекс.Метрика

Fortune cookie: Q: How many Aggies does it take to eat an armadillo? A: Three, one to eat it, and two to watch for traffic.