VanDoo 0 1 декабря, 2008 Опубликовано 1 декабря, 2008 · Жалоба Здравствуйте! Начинаю изучать микроконтроллеры. Выбрал AVR. В качестве первого проекта хочу сделать устройство, которое подключается по usb и позволяет управлять 8-ью транзисторными выходами (для коммутации небольшой нагрузки). Собираюсь приобрести AVR Dragon (стоит ли брать именно его?) Какую конкретно AtMega лучше выбрать? Может быть где-нибудь есть подобные схемы? Заранее большое спасибо!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petka 0 1 декабря, 2008 Опубликовано 1 декабря, 2008 · Жалоба Здравствуйте! Начинаю изучать микроконтроллеры. Выбрал AVR. В качестве первого проекта хочу сделать устройство, которое подключается по usb и позволяет управлять 8-ью транзисторными выходами (для коммутации небольшой нагрузки). Собираюсь приобрести AVR Dragon (стоит ли брать именно его?) Какую конкретно AtMega лучше выбрать? Может быть где-нибудь есть подобные схемы? Заранее большое спасибо!!! Удобны мега128 - как один из самых толстых массовых чипов, так и мега8, как один из маленьких, дешёвых, и тоже массовых (с заменами на мегу 48, 88, 168) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nanobyte 0 1 декабря, 2008 Опубликовано 1 декабря, 2008 · Жалоба Вот готовый проект USB-Parallel Output: http://www.obdev.at/products/avrusb/powerswitch.html На сайте ещё много других USB-проектов. Посмотрите на USBTiny: http://www.xs4all.nl/%7Edicks/avr/usbtiny/ Также можно попробовать IgorPlugUSB, который стал классическим: http://www.cesko.host.sk/hardware.php Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VanDoo 0 1 декабря, 2008 Опубликовано 1 декабря, 2008 · Жалоба Изучаю... Огромное спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
domowoj 0 2 декабря, 2008 Опубликовано 2 декабря, 2008 · Жалоба В качестве первого проекта хочу сделать устройство, которое подключается по usb Что-то Вы сразу замахнулись "на Вильяма нашего, так сказать, Шекспира". Сложно будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nanobyte 0 2 декабря, 2008 Опубликовано 2 декабря, 2008 · Жалоба Что-то Вы сразу замахнулись "на Вильяма нашего, так сказать, Шекспира". Сложно будет. Ну, повторить-то будет не сложно, а вот если устройство заработает, опыт будет бесценным. Конечно, просто поморгать светодиодом для начинающего наверное лучше, но эти конструкции уже многократно проверены, в крайнем случае на той-же плате USB можно будет и потренироваться со светодиодом, а после залить рабочую прошивку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serg24 0 2 декабря, 2008 Опубликовано 2 декабря, 2008 · Жалоба Очень интересно. А на русском подобные ссылки имеются? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shuks 0 5 декабря, 2008 Опубликовано 5 декабря, 2008 · Жалоба По моему опыту обучение пойдёт намного продуктивнее если ты не будешь тупо копировать чьи-то работы, а сам писать всё от начала и до конца. Начни просто с мигания светодиодом по счетчику, потом несколько с/д попеременно, потом с ШИМом разберись, потом АЦП и уж потом передача данных по COM / USB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
chajnik 0 8 декабря, 2008 Опубликовано 8 декабря, 2008 (изменено) · Жалоба Думаю,мой вопрос для этой темы подойдет.Тоже недавно начал изучать программирование AVR.На СИ и компилятором CVAVR.Уже многому научился.Вот щас никак не могу додуматься-как сделать так,чтобы при кратковременном нажатии кнопки программа выполняла одну работу,а при удерживании например 3 сек.-другую. Понимаю,что нужно считать время,как это сделать,не пойму. Изменено 8 декабря, 2008 пользователем chajnik Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mempfis_ 0 8 декабря, 2008 Опубликовано 8 декабря, 2008 · Жалоба Думаю,мой вопрос для этой темы подойдет.Тоже недавно начал изучать программирование 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с } Если приведёте ваш вариант сканирования кнопок то подсказать как вам реализовать вашу идею будет проще ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
chajnik 0 8 декабря, 2008 Опубликовано 8 декабря, 2008 · Жалоба У меня именно так опрос кнопок,спасибо,буду разбираться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 8 декабря, 2008 Опубликовано 8 декабря, 2008 · Жалоба Зависит от того как у вас реализовано сканирование кнопок. Если чтото типа такого: то придётся всё переделать, ибо чушь. Стоять и ждать 3 секунды, пока нажата кнопка - непозволительная блажь. Тем более никакой защиты от дребезга. Нормальный вариант - это опрос по таймеру и выставление соответственных флагов для последующей обработки в основном потоке. А обработка следующая: Если флаг стоит более _хх_ (нужное вписать) миллисекунд (обычно 20-50), считаем, сто кнопка нажата и выполняем нужное действие. Если более _хххх_ мс (3000, например), то выполняем другое действие. Время отсчитывается по тому же таймеру, то есть в каждом прерывании инкрементируем переменную времени. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
chajnik 0 8 декабря, 2008 Опубликовано 8 декабря, 2008 (изменено) · Жалоба Стоять и ждать 3 секунды, пока нажата кнопка - непозволительная блажь.В моей программе это не страшно,думаю пример mempfis_ лучше подойдет для меня, с этим-cnt я еще не сталкивался.Это что ,переменная,CVAVR на это- _3000ms ошибку выдает,что такое task тоже не знаю. Изменено 8 декабря, 2008 пользователем chajnik Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mempfis_ 0 8 декабря, 2008 Опубликовано 8 декабря, 2008 (изменено) · Жалоба В моей программе это не страшно,думаю пример 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 и как делают все в таком случае - для сканирования кнопок используйте прерывания от одного из таймеров :) Изменено 8 декабря, 2008 пользователем mempfis_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
chajnik 0 8 декабря, 2008 Опубликовано 8 декабря, 2008 · Жалоба Все понял. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться