|
Вопрос новичка по AVR |
|
|
|
Dec 1 2008, 20:04
|
Группа: Участник
Сообщений: 11
Регистрация: 1-12-08
Пользователь №: 42 133

|
Здравствуйте!
Начинаю изучать микроконтроллеры. Выбрал AVR. В качестве первого проекта хочу сделать устройство, которое подключается по usb и позволяет управлять 8-ью транзисторными выходами (для коммутации небольшой нагрузки). Собираюсь приобрести AVR Dragon (стоит ли брать именно его?) Какую конкретно AtMega лучше выбрать? Может быть где-нибудь есть подобные схемы?
Заранее большое спасибо!!!
--------------------
|
|
|
|
|
Dec 1 2008, 21:54
|
Группа: Участник
Сообщений: 11
Регистрация: 1-12-08
Пользователь №: 42 133

|
Изучаю... Огромное спасибо.
--------------------
|
|
|
|
|
Dec 2 2008, 11:12
|

За битами по регистрам гоняюсь
  
Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446

|
Цитата(domowoj @ Dec 2 2008, 06:27)  Что-то Вы сразу замахнулись "на Вильяма нашего, так сказать, Шекспира". Сложно будет. Ну, повторить-то будет не сложно, а вот если устройство заработает, опыт будет бесценным. Конечно, просто поморгать светодиодом для начинающего наверное лучше, но эти конструкции уже многократно проверены, в крайнем случае на той-же плате USB можно будет и потренироваться со светодиодом, а после залить рабочую прошивку.
--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
|
|
|
|
|
Dec 2 2008, 19:56
|
Частый гость
 
Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783

|
Очень интересно. А на русском подобные ссылки имеются?
--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
|
|
|
|
|
Dec 5 2008, 21:01
|
Группа: Новичок
Сообщений: 11
Регистрация: 12-04-08
Пользователь №: 36 705

|
По моему опыту обучение пойдёт намного продуктивнее если ты не будешь тупо копировать чьи-то работы, а сам писать всё от начала и до конца. Начни просто с мигания светодиодом по счетчику, потом несколько с/д попеременно, потом с ШИМом разберись, потом АЦП и уж потом передача данных по COM / USB
|
|
|
|
|
Dec 8 2008, 08:20
|

Профессионал
    
Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409

|
Цитата(chajnik @ Dec 8 2008, 11:57)  Думаю,мой вопрос для этой темы подойдет.Тоже недавно начал изучать программирование AVR.На СИ и компилятором CVAVR.Уже многому научился.Вот щас никак не могу додуматься-как сделать так,чтобы при кратковременном нажатии кнопки программа выполняла одну работу,а при удерживании например 3 сек.-другую. Понимаю,что нужно считать время,как это сделать,не пойму.  Зависит от того как у вас реализовано сканирование кнопок. Если чтото типа такого: Код if(!PINC.1) //если кнопка нажата то ждём пока её отпустят { while(!PINC.1); } То вставте в цикл while счётчик и инкриментируйте его (только подберите константу _3000ms ): Код cnt=0; if(!PINC.1) //если кнопка нажата то ждём пока её отпустят { while(!PINC.1) cnt++;
if(cnt < _3000ms) task1(); //при удержании меньше 3с else task2(); //при удержании больше 3с
} Если приведёте ваш вариант сканирования кнопок то подсказать как вам реализовать вашу идею будет проще
|
|
|
|
|
Dec 8 2008, 08:32
|
Участник

Группа: Новичок
Сообщений: 21
Регистрация: 25-08-08
Пользователь №: 39 811

|
У меня именно так опрос кнопок,спасибо,буду разбираться.
|
|
|
|
|
Dec 8 2008, 08:32
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(mempfis_ @ Dec 8 2008, 11:20)  Зависит от того как у вас реализовано сканирование кнопок. Если чтото типа такого: то придётся всё переделать, ибо чушь. Стоять и ждать 3 секунды, пока нажата кнопка - непозволительная блажь. Тем более никакой защиты от дребезга. Нормальный вариант - это опрос по таймеру и выставление соответственных флагов для последующей обработки в основном потоке. А обработка следующая: Если флаг стоит более _хх_ (нужное вписать) миллисекунд (обычно 20-50), считаем, сто кнопка нажата и выполняем нужное действие. Если более _хххх_ мс (3000, например), то выполняем другое действие. Время отсчитывается по тому же таймеру, то есть в каждом прерывании инкрементируем переменную времени.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Dec 8 2008, 08:40
|
Участник

Группа: Новичок
Сообщений: 21
Регистрация: 25-08-08
Пользователь №: 39 811

|
Цитата Стоять и ждать 3 секунды, пока нажата кнопка - непозволительная блажь. В моей программе это не страшно,думаю пример mempfis_ лучше подойдет для меня, с этим- Код cnt я еще не сталкивался.Это что ,переменная,CVAVR на это- _3000ms ошибку выдает,что такое task тоже не знаю.
Сообщение отредактировал chajnik - Dec 8 2008, 09:02
|
|
|
|
|
Dec 8 2008, 09:20
|

Профессионал
    
Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409

|
Цитата(chajnik @ Dec 8 2008, 12:40)  В моей программе это не страшно,думаю пример mempfis_ лучше подойдет для меня, с этим- Код cnt я еще не сталкивался.Это что ,переменная,CVAVR на это- _3000ms ошибку выдает,что такое task тоже не знаю. В CVAVR есть библиотека delay.h delay_ms(), delay_us(). Подключите её через #include <delay.h> Перед функцией main объявите глобальную переменную Цитата unsigned int cnt=0; и константу количества инкрементов этого счётчика которые будут считаться как 3 секунды Код #define _3000ms 3000 Код #include <delay.h>
unsigned int cnt=0; #define _3000ms 3000
void task1(void) { //действия при удержании менее 3 с }
void task2(void) { //действия при удержании более 3 с }
void main(void) { //инициализация мк
for(;;) {
if(!PINC.1) //если кнопка нажата то ждём пока её отпустят { cnt=0; while(!PINC.1) { if(cnt != 0xffff) cnt++;//инкримент с проверкой на границу delay_ms(1);//ждём миллисекунду }
if(cnt < _3000ms) task1(); //при удержании меньше 3с else task2(); //при удержании больше 3с } }
} tsk1(), task2() - это ваши функции в которых вы можете выполнить необходимые вам действия Потренеруйтесь на этом для начала а потом сделайте как вам посоветовал MrYuran и как делают все в таком случае - для сканирования кнопок используйте прерывания от одного из таймеров
Сообщение отредактировал mempfis_ - Dec 8 2008, 09:20
|
|
|
|
|
Dec 8 2008, 09:39
|
Участник

Группа: Новичок
Сообщений: 21
Регистрация: 25-08-08
Пользователь №: 39 811

|
Все понял.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|