реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Вопрос новичка по AVR
VanDoo
сообщение Dec 1 2008, 20:04
Сообщение #1





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



Здравствуйте!

Начинаю изучать микроконтроллеры. Выбрал AVR.
В качестве первого проекта хочу сделать устройство, которое подключается по usb и позволяет управлять 8-ью транзисторными выходами (для коммутации небольшой нагрузки).
Собираюсь приобрести AVR Dragon (стоит ли брать именно его?)
Какую конкретно AtMega лучше выбрать?
Может быть где-нибудь есть подобные схемы?

Заранее большое спасибо!!!


--------------------
http://forum.portal01.ru - всё о пожарной безопасности
Go to the top of the page
 
+Quote Post
Petka
сообщение Dec 1 2008, 20:50
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(VanDoo @ Dec 1 2008, 23:04) *
Здравствуйте!

Начинаю изучать микроконтроллеры. Выбрал AVR.
В качестве первого проекта хочу сделать устройство, которое подключается по usb и позволяет управлять 8-ью транзисторными выходами (для коммутации небольшой нагрузки).
Собираюсь приобрести AVR Dragon (стоит ли брать именно его?)
Какую конкретно AtMega лучше выбрать?
Может быть где-нибудь есть подобные схемы?

Заранее большое спасибо!!!

Удобны мега128 - как один из самых толстых массовых чипов, так и мега8, как один из маленьких, дешёвых, и тоже массовых (с заменами на мегу 48, 88, 168)
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Dec 1 2008, 21:04
Сообщение #3


За битами по регистрам гоняюсь
***

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



Вот готовый проект 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


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
VanDoo
сообщение Dec 1 2008, 21:54
Сообщение #4





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



Изучаю...
Огромное спасибо.


--------------------
http://forum.portal01.ru - всё о пожарной безопасности
Go to the top of the page
 
+Quote Post
domowoj
сообщение Dec 2 2008, 02:27
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Цитата(VanDoo @ Dec 2 2008, 02:04) *
В качестве первого проекта хочу сделать устройство, которое подключается по usb


Что-то Вы сразу замахнулись "на Вильяма нашего, так сказать, Шекспира".

Сложно будет.


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Dec 2 2008, 11:12
Сообщение #6


За битами по регистрам гоняюсь
***

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



Цитата(domowoj @ Dec 2 2008, 06:27) *
Что-то Вы сразу замахнулись "на Вильяма нашего, так сказать, Шекспира".
Сложно будет.

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


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
Electronic)
сообщение Dec 2 2008, 19:56
Сообщение #7


Частый гость
**

Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783



Очень интересно. А на русском подобные ссылки имеются?


--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
Go to the top of the page
 
+Quote Post
shuks
сообщение Dec 5 2008, 21:01
Сообщение #8





Группа: Новичок
Сообщений: 11
Регистрация: 12-04-08
Пользователь №: 36 705



По моему опыту обучение пойдёт намного продуктивнее если ты не будешь тупо копировать чьи-то работы, а сам писать всё от начала и до конца.
Начни просто с мигания светодиодом по счетчику, потом несколько с/д попеременно, потом с ШИМом разберись, потом АЦП и уж потом передача данных по COM / USB
Go to the top of the page
 
+Quote Post
chajnik
сообщение Dec 8 2008, 07:57
Сообщение #9


Участник
*

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



Думаю,мой вопрос для этой темы подойдет.Тоже недавно начал изучать программирование AVR.На СИ и компилятором CVAVR.Уже многому научился.Вот щас никак не могу додуматься-как сделать так,чтобы при кратковременном нажатии кнопки программа выполняла одну работу,а при удерживании например 3 сек.-другую. Понимаю,что нужно считать время,как это сделать,не пойму.
help.gif

Сообщение отредактировал chajnik - Dec 8 2008, 07:58
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Dec 8 2008, 08:20
Сообщение #10


Профессионал
*****

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



Цитата(chajnik @ Dec 8 2008, 11:57) *
Думаю,мой вопрос для этой темы подойдет.Тоже недавно начал изучать программирование AVR.На СИ и компилятором CVAVR.Уже многому научился.Вот щас никак не могу додуматься-как сделать так,чтобы при кратковременном нажатии кнопки программа выполняла одну работу,а при удерживании например 3 сек.-другую. Понимаю,что нужно считать время,как это сделать,не пойму.
help.gif


Зависит от того как у вас реализовано сканирование кнопок.
Если чтото типа такого:
Код
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с

}


Если приведёте ваш вариант сканирования кнопок то подсказать как вам реализовать вашу идею будет проще wink.gif
Go to the top of the page
 
+Quote Post
chajnik
сообщение Dec 8 2008, 08:32
Сообщение #11


Участник
*

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



У меня именно так опрос кнопок,спасибо,буду разбираться.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Dec 8 2008, 08:32
Сообщение #12


Беспросветный оптимист
******

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



Цитата(mempfis_ @ Dec 8 2008, 11:20) *
Зависит от того как у вас реализовано сканирование кнопок.
Если чтото типа такого:

то придётся всё переделать, ибо чушь.
Стоять и ждать 3 секунды, пока нажата кнопка - непозволительная блажь.
Тем более никакой защиты от дребезга.
Нормальный вариант - это опрос по таймеру и выставление соответственных флагов для последующей обработки в основном потоке.
А обработка следующая:
Если флаг стоит более _хх_ (нужное вписать) миллисекунд (обычно 20-50), считаем, сто кнопка нажата и выполняем нужное действие.
Если более _хххх_ мс (3000, например), то выполняем другое действие. Время отсчитывается по тому же таймеру, то есть в каждом прерывании инкрементируем переменную времени.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
chajnik
сообщение Dec 8 2008, 08:40
Сообщение #13


Участник
*

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



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

Сообщение отредактировал chajnik - Dec 8 2008, 09:02
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Dec 8 2008, 09:20
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 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 и как делают все в таком случае - для сканирования кнопок используйте прерывания от одного из таймеров smile.gif

Сообщение отредактировал mempfis_ - Dec 8 2008, 09:20
Go to the top of the page
 
+Quote Post
chajnik
сообщение Dec 8 2008, 09:39
Сообщение #15


Участник
*

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



Все понял.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 10:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.0148 секунд с 7
ELECTRONIX ©2004-2016