WinAVR

Спидометр (тахометр) на микроконтроллере AVR. WinAVR (Часть1)

Просмотров: 30942Комментарии: 0
AVR.НачинающимЭлектроника. Схемотехника
Обещался переделать спидометр под WinAVR, поэтому давайте начнем. Заодно эта статья будет примером работы с таймером в режиме захвата (настройку этого режима смотрите в Таймеры счетчики микроконтроллеров AVR). Здесь приведу пример программы, которая будет выводить на экран скорость движения (м/с) и пройденное расстояние (м). Итак, подключаем символьный дисплей к порту D, а на вход ICP будем подавать сигнал с нашего датчика. В Протеусе заменим этот датчик на генератор импульсов. Принцип измерения состоит в том чтобы посчитать время между импульсами на входе ICP микроконтроллера. И зная расстояние пройденное между импульсами сможем посчитать скорость. Приведу здесь полный код программы, так как она совсем небольшая, а в конце можно будет скачать проект в WinAVR. Здесь настроил таймер/счетчик так, чтобы он досчитывал до 16000 за 1с, т.е. максимальное время между импульсами будет равно 4с. Если за это время не придет импульс на ножку ICP, таймер/счетчик обнулится и начнет счет заново. Таким образом, зная до скольки счетчик досчитает за одну секунду мы можем посчитать время между импульсами, для этого разделим значение счетчика за 1с на значение счетчика между импульсами. Пройденное расстояние узнаем откалибровав наш прибор. 
Далее...

Побитовые операции и их применение в WinAVR

Просмотров: 28739Комментарии: 3
AVR.НачинающимЭлектроника. Схемотехника
Битовые операции применяются повсеместно при программировании микроконтроллеров. Мы ими пользуемся при работе с регистрами МК, при работе с переменными программы и др. Вот и решил описать их и объяснить применение на каких-нибудь простых примерах. Буду по порядку описывать побитовые операции и сразу приводить примеры.

Операция НЕ (Побитовое отрицание)
Эта операция изменяет значение бита на противоположное. 
Если применить эту операцию к байту, то результатом будет байт с измененными на противоположные битами. В WinAVR операция НЕ обозначается "~" и ставится перед числом к которому она применяется. Например:
unsigned char res=~(0b00110011);
После этого значение переменной res=0b11001100

Библиотека графического LCD 128x64

Просмотров: 22246Комментарии: 4
AVR.НачинающимЭлектроника. Схемотехника
Решил тут недавно поработать с экранчиком WG12864 и оформил результаты в виде небольшой библиотеки для WinAVR. Используя эту библиотеку можно рисовать точку, линию, прямоугольник, круг, символ и строку на экране (поддержка английских и русских символов), можно настроить, чтобы графика выводилась на белом фоне или на черном. Конечно, можно еще совершенствовать эту библиотеку, но это буду делать по мере использования дисплея.
Итак, эта библиотека подходит для ЖКИ с управляющим контроллером KS0108. Состоит из трех файлов - lcd12864.h, lcd12864.c, chars.h. Файл chars.h содержит коды символов, а файлы lcd12864.h и lcd12864.c и есть собственно библиотека для работы с дисплеем. Подключается аналогично библиотеке символьного ЖКИ - Подключение библиотеки символьного ЖКИ в WinAVR
Хотя, кратко и здесь опишу подключение:
  1. Создаем проект в WinAVR и копируем файлы библиотеки в папку с проектом.
  2. Добавляем в основном файле программы заголовочный файл lcd12864.h.
  3. В Makefile, в разделе SRC=$(TARGET).c добавляем через пробел файл lcd12864.c. Должно получиться так: SRC=$(TARGET).c lcd12864.c.
  4. Теперь можем работать с функциями дисплея.

Чтение и запись EEPROM в WinAVR. Продолжение

Просмотров: 19315Комментарии: 1
AVR.НачинающимЭлектроника. Схемотехника

В предыдущей статье мы пробовали записывать и читать память EEPROM микроконтроллеров AVR используя функции WinAVR. Тогда мы работали с байтами и словами (тоже самое - char и int). А что если мы хотим записать long int, массив переменных (опять же  char, int, long int) или float? Давайте разберем все по порядку.

Чтение/запись dword (long int)
Итак, переменная типа long int (размер переменной в WinAVR - 4 байта). Для чтения и записи переменной этого типа в файле eeprom.h есть функции - eeprom_read_dword, eeprom_write_dword.

Порты ввода-вывода микроконтроллеров AVR

Просмотров: 21951Комментарии: 1
AVR.НачинающимЭлектроника. Схемотехника
Порты ввода-вывода являются основным средством связи микроконтроллеров AVR с окружающим миром. Упрощенная схема порта ввода-вывода показана на рисунке

Внешние прерывания МК AVR

Просмотров: 79765Комментарии: 4
AVR.НачинающимЭлектроника. Схемотехника
Что же такое прерывание? Прерывание это событие, при котором происходит приостановка основной программы и переход на выполнение подпрограммы прерывания. Чтобы узнать какие же есть прерывания в МК, откроем даташит микроконтроллера и нажмем на вкладку Interrupts и там в самом начале увидим таблицу векторов прерываний. Для МК mega8 она выглядит вот так.

Чтение и запись EEPROM в WinAVR

Просмотров: 22582Комментарии: 3
AVR.НачинающимЭлектроника. Схемотехника
Решил вот написать короткую заметку по работе с EEPROM в AVR. EEPROM (Electrically Erasable Programmable Read-Only Memory) - электрически стираемое перепрограммируемое ПЗУ. 
Итак, давайте каким нибудь простым способом научимся читать и записывать данные в память EEPROM микроконтроллера.  Запись, чтение и обновление данных в EEPROM производится функциями определенными в файле eeprom.h (в папке с установленной WinAVR - \avr\include\avr\eeprom.h). С помощью этих функций могут быть прочитаны и записаны отдельные байты, двухбайтные данные (так называемое слово - word) и блоки данных. В этой заметке разберем как читать/писать отдельные байты и слова. Потому что, если писать о других типах и блоках данных, тогда заметка превратится в большую статью. При объявлении переменной в EEPROM должен быть определен атрибут для раздела ".eeprom". Обычно он определен в файле eeprom.h, но можно и перестраховаться и добавить в нашу программу
#ifndef EEMEM
#define EEMEM__attribute__ ((section (".eeprom")))
#endif

Подключение библиотеки символьного ЖКИ в WinAVR

Просмотров: 26732Комментарии: 1
AVR.НачинающимЭлектроника. Схемотехника

Как-то скачал lcd библиотеку и начал подключать ЖКИ и пару часов промучался. И вот вспомнил об этом и чтобы такое больше не повторялось решил кратко написать как подключать эту библиотеку, начиная с создания проекта и создания makefile файла. Итак, давайте по порядку после открытия AVRStudio: 

  1.  Project ->New Project, в появившемся окне выбираем AVR GCC,  ставим галочку Create Initial File и Create File, в Project Name пишем название проекта, например LCD
  2. Копируем в папку с проектом lcd_lib.h, lcd_lib.c (скачать можно ниже), Makefile (ниже о нем).
  3. Project -> Configuration Options, в появившемся окне Use External Makefile выбираем Makefile в папке с проектом, жмем Ok.
  4. Слева в колонке с файлами проекта правой кнопкой на Header Files, выбираем Add Existing Header File и выбираем файл lcd_lib.h в папке с проектом.
  5. Тоже самое для Source Files и добавляем lcd_lib.c
  6. В компилируемом файле (в нашем случае LCD.c) добавляем #include “lcd_lib.h
  7. Project->Save Project
  8. Используем функции библиотеки в программе.
  9. Build Project (F7) 

Далее...