Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с портами в AVR. 
:(
    Опции темы
Nosaer
Дата 1.6.2012, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 25.8.2010

Репутация: нет
Всего: нет



    Здравствуйте!
    Столкнулся с задачей и не знаю как реализовать, надеюсь на вашу помощь.
    Необходимо последовательно подавать "1" на большое количество выводов. Задача осложняется тем, что выводы в рамках одного порта подключаются не последовательно.
т.е. в каком то цикле, мы поочередно подключаем сначала PORTB.1, PORTB.4, PORTB.5, PORTB.2, PORTB.3. Затем в этом же цикле еще и выводы другого порта, например С.
    Другими словами просто прогнать каждый порт в цикле не получится. Нужно как то создать список где они будут записаны в той последовательности в которой нужны, и уже гонять цикл по этому списку. Что у меня реализовать как раз таки не получается.
    Микроконтроллер AVR. Язык С/С++.
PM MAIL   Вверх
LeonidPr
Дата 1.6.2012, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2012
Где: г. Чебоксары

Репутация: нет
Всего: 1



Могу предложить такую идею.
объявить структуру вида:
Код

struct portvals_t {
     BYTE PORTA_Val;
     BYTE PORTB_Val;
     BYTE PORTC_Val;
};


Затем объявить константный массив, например
Код

const portvals_t Values[]={
{0x02,0x04,0x01},
{0x01,0x08,0x02}
и т.д.
};

Затем в цикле пробегать по этому массиву и на каждой итерации выбрасывать в регистры портов значения, хранящиеся в структуре Values[i].
P.S. Я не программировал AVR, но есть опыт работы с другими контроллерами, там такой подход вполне должен работать, думаю, что и в AVR заработает.

Это сообщение отредактировал(а) LeonidPr - 1.6.2012, 22:05
--------------------
pkunzip.zip
PM MAIL   Вверх
Nosaer
Дата 1.6.2012, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 25.8.2010

Репутация: нет
Всего: нет



2LeonidPr, спасибо

В C++ не особо силен, опыта мало, но задумка в целом понятна. 

П.С. Буду рад, если кто то еще идею предложит.
PM MAIL   Вверх
LeonidPr
Дата 2.6.2012, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2012
Где: г. Чебоксары

Репутация: нет
Всего: 1



Дык тут и не C++ а обычный Си.   smile 
Можете реализовать на асме, если вам удобнее. Суть то от этого не меняется. Главное что-бы работало, и работало правильно и надежно.

Это сообщение отредактировал(а) LeonidPr - 2.6.2012, 14:21
--------------------
pkunzip.zip
PM MAIL   Вверх
Nosaer
Дата 2.6.2012, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 25.8.2010

Репутация: нет
Всего: нет



LeonidPr да мне хоть С/ хоть С++.
Мне на Python куда привычнее.
Но все равно спасибо)
PM MAIL   Вверх
northener
Дата 3.6.2012, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: нет
Всего: 20



Цитата(Nosaer @  1.6.2012,  22:43 Найти цитируемый пост)
Буду рад, если кто то еще идею предложит. 


Цитата(Nosaer @  1.6.2012,  20:44 Найти цитируемый пост)
Нужно как то создать список где они будут записаны в той последовательности в которой нужны

Список фиксированный или его нужно создавать/менять в рантайме?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Nosaer
Дата 3.6.2012, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 25.8.2010

Репутация: нет
Всего: нет



Список фиксированный.
PM MAIL   Вверх
northener
Дата 4.6.2012, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: нет
Всего: 20



Цитата(Nosaer @  3.6.2012,  12:51 Найти цитируемый пост)
Список фиксированный. 

Ну тогда тут других идей больше нет. Обратитесь в Центр Помощи.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
UniBomb
Дата 5.6.2012, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 97



Если планируется использовать не все выводы порта, то предложенный LeonidPr вариант надо немного доработать. Надо завести ещё один массив. В первом массиве должна хранится информация о том, какие пины выставлять в "1", а во втором соответственно обнулять. И изменять значения не через присваивания, а с помощью битовых операций И ("&") и ИЛИ ("|").

Ещё вариант - программно объединить нужные выводы в группы. Например в этой статье рассказывается как это сделать средствами С++. На том же ресурсе была статья, как сделать аналогичное на Си средствами препроцессора, но ссылки найти не могу.
PM MAIL ICQ Skype   Вверх
alexSl
Дата 27.6.2012, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


проходил мимо



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 22.2.2008

Репутация: нет
Всего: нет



Цитата(UniBomb @  5.6.2012,  08:33 Найти цитируемый пост)
... На том же ресурсе была статья, как сделать аналогичное на Си средствами препроцессора, но ссылки найти не могу. 

http://we.easyelectronics.ru/Soft/rabota-s...ez-plyusov.html

PM MAIL   Вверх
slav0n
Дата 4.7.2012, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 3.7.2012

Репутация: нет
Всего: нет



Цитата(alexSl @  27.6.2012,  13:17 Найти цитируемый пост)
http://we.easyelectronics.ru/Soft/rabota-s...ez-plyusov.html

Ух! Как дрыганье ногами МК будоражит умы индивидуомов.  smile 
PM MAIL   Вверх
LeonidPr
Дата 5.7.2012, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2012
Где: г. Чебоксары

Репутация: нет
Всего: 1



Мне понравилось в контроллерах на ядре Cortex-M3 ногами дрыгать. Через bit-banding. Одно удовольствие.
--------------------
pkunzip.zip
PM MAIL   Вверх
pettimm
Дата 19.11.2013, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 24.9.2005

Репутация: 1
Всего: 1



Ну что, получилось?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.0511 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.