Форум закрыт для публикаций и работает только для чтения.
Отзывы о работе магазина и товарах просим оставлять на сайте интернет-магазина https://ekits.ru

AVR для начинающих.

Обсуждение вопросов программирования контроллеров AVR

Модераторы: Alexl81, Vitalii

Hilo
Сообщения: 3
Зарегистрирован: 05 мар 2011, 23:16
Контактная информация:

Re: AVR для начинающих.

Сообщение Hilo » 06 мар 2011, 12:50

Alexl81 писал(а):Я лично программирую на языке Си. В программе CodeVision. Но прошиваю SPA0008.
Добрый день! Вы прошиваете прямо из CodeVision? У меня не получилось заставить CodeVision увидеть SPA0008. Подскажите, какие настройки программатора в среде надо сделать? Может тонкости какие-то есть?

Hilo
Сообщения: 3
Зарегистрирован: 05 мар 2011, 23:16
Контактная информация:

Re: AVR для начинающих.

Сообщение Hilo » 06 мар 2011, 13:09

Alexl81 писал(а):Я лично программирую на языке Си. В программе CodeVision. Но прошиваю SPA0008.
Уважаемый Alexl81! Подскажите, как Вам удалось заставить работать CodeVision через SPA0008 ? У меня не вышло, к сожалению, хотя через AB программатор шьет без проблем. Версия CodeVision 1.25.9.

Alexl81
Сообщения: 997
Зарегистрирован: 10 окт 2010, 11:09
Откуда: Россия, Свердловская обл., Екатеринбург
Контактная информация:

Re: AVR для начинающих.

Сообщение Alexl81 » 06 мар 2011, 21:54

Здравствуйте. Т.к. спрашивают, как прошить? Подробно опешу, как прошить контроллер с помощью программатора SPA0008 другими .hex файлы. На примере возьмём программу Code Vision. Создаём в Code Vision свою программу (к примеру, Timer1) со всеми необходимыми настройками, сохраняем её (получаем Timer1.hex файл). Далее в Algorithm Builder создаём новый проект, в «опции проекта».
1.jpg
Опции проекта
1.jpg (18.51 КБ) 7991 просмотр
выбираем нужный контроллер, выбираем частоту CPU, настраиваем все «fuse bit».
2.jpg
Fuse bits
2.jpg (35.9 КБ) 7991 просмотр
жмём применить, и сохранить. Копируем свой файл в папку «C:\Program Files\Algorithm Builder\V544\COMM ADAPTER\ALG» стоит по умолчанию, в этой папке создается проект – который делали выше. Подключаем файл своего проекта, (может быть в формате .hex, .rom, .bin) в строке локального текстового редактора пишем «Load: Timer1.hex» (пример).
3.jpg
Подключение внешнего файла
3.jpg (28.5 КБ) 7991 просмотр
Сохраняем, жмем кнопку «Запуск с кристаллом».
4.jpg
Запуск с кристаллом
4.jpg (29.99 КБ) 7991 просмотр
В появившемся окне жмём кнопку «Старт».
5.jpg
Программирования кристалла
5.jpg (39.65 КБ) 7991 просмотр
Теперь файл Timer1.hex прошит в контроллер.

Hilo
Сообщения: 3
Зарегистрирован: 05 мар 2011, 23:16
Контактная информация:

Re: AVR для начинающих.

Сообщение Hilo » 06 мар 2011, 22:20

Попробовал, все получилось отлично! Alexl81, спасибо за подробнейшую инструкцию!

Alexl81
Сообщения: 997
Зарегистрирован: 10 окт 2010, 11:09
Откуда: Россия, Свердловская обл., Екатеринбург
Контактная информация:

Re: AVR для начинающих.

Сообщение Alexl81 » 07 мар 2011, 20:26

Здравствуйте. Хотел поделиться, как настроить таймер. Прочитав несколько источников литературы, нашел более понятный способ настройки таймера в Code Vision (возможно кому-то пригодится). К примеру настроим таймер который тикает с частотой 1секунда. Откроем Code Vision, выберем генератор кода Wizard'.
1.Wizard.jpg
Wizard
1.Wizard.jpg (20.68 КБ) 7988 просмотров
На первой закладки выберем контроллер ATmega8535, и частоту CPU 1000000МГц (к примеру).
2.Chip.jpg
Chip
2.Chip.jpg (43.45 КБ) 7988 просмотров
Далее на закладки Timer выберем Timer1.
3.Timer.jpg
Timer
В параметре Clock Value (значение частоты) выберем 1000кГц (без пред делителя частоты), в параметре Interrupt on (прерывание по) выберем стрелками «1» Compare A Match (сравнение), ставим галочку. Вводим в поле Comp. A: нужное нам число сравнения.
По поводу числа рассмотрим по подробнее. Для нужной частоты тиканья подсчитываем число сравнения. 1000кГц(частота) / 1(нужное нам тиканье) = 1000 = 0х03E8 в шестнадцатеричном исчислении. Теперь это число вводим в поле Comp. A:, таймер будет срабатывать 1 раз в секунду. Вот что получилось.
4.Что получили.jpg
Что получили
Далее нажимаем Generate program у нас генерируется начальный код.
5.Генерируем.jpg
Генерируем код программы
5.Генерируем.jpg (35.21 КБ) 7988 просмотров
Теперь в код дописываем нужный нам код и всё. К примеру допишем х++.
// Timer1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
// Place your code here
Х++;
}
Теперь у нас каждую секунду будет инкрементироваться переменная х. Вроде всё. Удачных экспериментов.

Alexl81
Сообщения: 997
Зарегистрирован: 10 окт 2010, 11:09
Откуда: Россия, Свердловская обл., Екатеринбург
Контактная информация:

Re: AVR для начинающих.

Сообщение Alexl81 » 07 мар 2011, 23:28

Здравствуйте. Теперь давайте разберём подключение LCD (WH0802) в Code Vision. Открываем Code Vision, нажимаем шестерёнку Wizard. В первой закладке как обычно настраиваем тип контроллера, частоту тактирования.
1.Chip.jpg
Chip
1.Chip.jpg (41.53 КБ) 7987 просмотров
Выбираем закладку Alphanumeric LCD, ставим галочку.
2.LCD.jpg
LCD
2.LCD.jpg (31.59 КБ) 7987 просмотров
У нас появляется выбор Characters/Line (количество знаков в линии), т.к. WH0802 восемь знаков на линию, то выбираем цифру 8. Теперь выбираем, к каким ножкам контроллера будем подключать WH0802. Я использовал для примера SEM0007M-8535-16 у которого есть разъем для подключения WH0802. Ноги контроллера выбираем в соответствии со схемой модуля SEM0007M-8535-16. Вот как должно быть настроена для модуля SEM0007M-8535-16.
3.LCD настроен.jpg
LCD настроен
Далее рассмотрим как правильно выводить символы на экран WH0802. Для примера вывел 2 строчки.
4.Пример.jpg
Пример кода
Команда lcd_dotoxy(0,0); - указывает место расположения первого символа. К примеру если надо вывести с 3 символа, то будет выглядеть так: lcd_dotoxy(2,0); - заметим что цифра «0» означает первый символ, а цифра «2» третий символ. В программе Code Vision рус. алфавит не распознаётся (я не смог заставить выводить его). Поэтому чтоб вывести используем код из таблицы от WH0802, но для ввода кода используем команду lcd_putchar(), не нужно ставить кавычки (“ ”), просто вписываем цифры. А для вывода букв англ. алфавита используем команду lcd_puts(“ “) уже с кавычками. Для примера выведем в 1 строке «Привет. » (без кавычек), во 2 строке «Как дела» (без кавычек, на вопросительный знак не хватило место).
5.Пример.jpg
Пример фото
Ну вот вроде всё. Успехов в программировании.

Alexl81
Сообщения: 997
Зарегистрирован: 10 окт 2010, 11:09
Откуда: Россия, Свердловская обл., Екатеринбург
Контактная информация:

Re: AVR для начинающих.

Сообщение Alexl81 » 08 мар 2011, 21:06

Здравствуйте. Рассмотрим ШИМ на модуле SEM0007M-8535-16. ШИМ - это широтно-импульсная модуляция. Вот так выглядит сигнал на экране осциллографа.
1.Сигнал.jpg
Сигнал
1.Сигнал.jpg (8.93 КБ) 7985 просмотров
Применение ШИМ позволяет 1) Регулировать мощность нагрузки. Коммутирующий ключ работает в импульсном режиме, меньше выделяется тепла на ключе, меньше потерь на ключе. 2) ЦАП (Цифро-Аналоговый Преобразователь) с помощью ШИМ вы можете выводить аналоговый сигнал, добавив простой ФНЧ (Фильтр Нижних Частот) резистор и конденсатор. Ну начнём. Запускаем Code Vision, жмём Wizard, настраиваем контроллер ATmega8535, CPU 1000000Гц.
2.Настройка CPU.jpg
Настройк CPU
2.Настройка CPU.jpg (22.84 КБ) 7985 просмотров
Будем делать на Timer2 (8-бит), по даташиту видим что для Timer2 выход OC2 на ноге PD7. Можно применить и другие таймеры к примеру Timer0, Timer1 – по желанию. Вывод PD7 делаем на вывод.
3.Вывод OC2 на выход.jpg
Вывод OC2 на выход
3.Вывод OC2 на выход.jpg (26.58 КБ) 7985 просмотров
Переходим на закладку “Timer2”, устанавливаем частоту “Clock Value” (я поставил 1МГц), “Mode” меняем на “Fast PWM top=0xFF”, выход “Output” ставим “Non-Inverted PWM” (Не инвертирующий), ставим галочку “Compare Match Interrupt” совпадение с регистром, указываем число в регистр “Compare” (я указал 0xFF).
4.Настройка ШИМ.jpg
Настройка ШИМ
4.Настройка ШИМ.jpg (37.56 КБ) 7985 просмотров
Генерируем код, и всё готово. Вот часть программы, которая влияет на регулировку выхода.
5.Часть кода 1.jpg
Часть кода 1
5.Часть кода 1.jpg (21.79 КБ) 7985 просмотров
Для примера подключим светодиод FYL-5013ED-E (оранжевый), через резистор 470Ом 0,25Вт. При выше указанных настройках ШИМ (OCR2=0xFF в десятичном это 255), светодиод будет гореть в полный накал.
6.Яркий.jpg
Яркий
Изменим OCR2 на 0x19 (в десятичном это 25). Светодиод заметно станет светить тусклее.
7.Часть кода 2.jpg
Часть кода 2
7.Часть кода 2.jpg (21.42 КБ) 7985 просмотров
8.Тусклый.jpg
Тусклый
Теперь изменим OCR2 на 0x00 (в десятичном это 0). Светодиод перестанет светить. Точнее будет светится как накал, практически не видно.
9.Часть кода 3.jpg
Часть кода 3
9.Часть кода 3.jpg (20.01 КБ) 7985 просмотров
10.Не горит.jpg
Не горит
Регулировку светодиода можно сделать от двух кнопок «+» и «-», которые меняют значения регистра OCR2. В контроллере ATmega8535 есть 4 ШИМ-а, которые могут регулироваться по раздельности. Ну, вот вроде всё. Всем удачи, и хороших результатов в программировании.

Demonizer
Сообщения: 30
Зарегистрирован: 09 ноя 2010, 17:17
Контактная информация:

Re: AVR для начинающих.

Сообщение Demonizer » 08 мар 2011, 22:18

Для баскома будет немного проще тот же пример:
upperline
LCD "Ёpёіeї"
lowerline
LCD "Kaє гe»a?"
http://robozone.su/2008/07/10/bascom-av ... plejj.html

Alexl81
Сообщения: 997
Зарегистрирован: 10 окт 2010, 11:09
Откуда: Россия, Свердловская обл., Екатеринбург
Контактная информация:

Re: AVR для начинающих.

Сообщение Alexl81 » 09 мар 2011, 15:54

Demonizer писал(а):Для баскома будет немного проще тот же пример:
upperline
LCD "Ёpёіeї"
lowerline
LCD "Kaє гe»a?"
http://robozone.su/2008/07/10/bascom-av ... plejj.html
И чем проще? То что вы написали, от этого LCD работать не будет. Тоесть надо ещё библиотеку. В Code Vision тоже библиотека, и назначаешь какой порт куда и всё.

Demonizer
Сообщения: 30
Зарегистрирован: 09 ноя 2010, 17:17
Контактная информация:

Re: AVR для начинающих.

Сообщение Demonizer » 09 мар 2011, 23:22

Ну, если принципиально:

Код: Выделить всё

$regfile = "m8515.dat"                                  
$crystal = 4000000 
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portc.7 , Rs = Portc.6
locate 1,1 : LCD "Ёpёіeї"
locate 2,1 : LCD "Kaє гe»a?" 
От этого работать будет)
Я бы задолбался каждый символ по-отдельности выводить :shock:

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей