Пины и массив

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Сообщения: 11
Зарегистрирован: Вт окт 07, 2008 03:26:32
Откуда: Волгоград

Сообщение Simba »

Подскажите пожалуйста как собрать пины в массив чтоб опрашивать через изменение индекса? В PIC C Compiler всё просто, а в CodeVisionAVR что - то не получается.
Реклама
gan
Открыл глаза
Аватара пользователя
Сообщения: 43
Зарегистрирован: Пн мар 24, 2008 15:36:17
Откуда: Сургут

Сообщение gan »

А так:

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

 for (i=0;i<8;i++) {
if (PORTD & (1<<i)) Bit[i]=1; 
else Bit[i]=0;
                   }
Контактная информация:
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 438
Зарегистрирован: Вт сен 25, 2007 19:40:26
Откуда: Челябинск

Сообщение mr.Kirill »

gan писал(а):А так:

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

 for (i=0;i<8;i++) {
if (PORTD & (1<<i)) Bit[i]=1; 
else Bit[i]=0;
                   }
Для "опроса" все же по-моему правильнее использовать PIND, а не PORTD?
gan
Открыл глаза
Аватара пользователя
Сообщения: 43
Зарегистрирован: Пн мар 24, 2008 15:36:17
Откуда: Сургут

Сообщение gan »

Да, вы правы. Я тоже пока в процессе перехода с PIC-ов на AVR.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 375
Зарегистрирован: Вс мар 04, 2007 13:14:25
Откуда: Украина

Сообщение Krik99 »

можно и так для Code Vision AVR

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

 for (i=0;i<8;i++) { 
byt[i]=PIND & (1<<i);  
}
Изображение
Контактная информация:
Реклама
Родился
Сообщения: 11
Зарегистрирован: Вт окт 07, 2008 03:26:32
Откуда: Волгоград

Сообщение Simba »

Пожалуйста внимательнее читайте вопрос. Я спрашивал не то как организовать опрос пинов одного порта а можно ли в CodeVisionAVR создать из пинов различных портов один массив чтобы обращатся к ним как к элементу массива. В PIC C Compiler это можно, а как в CodeVisionAVR?
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 438
Зарегистрирован: Вт сен 25, 2007 19:40:26
Откуда: Челябинск

Сообщение mr.Kirill »

Simba писал(а):Пожалуйста внимательнее читайте вопрос. Я спрашивал не то как организовать опрос пинов одного порта а можно ли в CodeVisionAVR создать из пинов различных портов один массив чтобы обращатся к ним как к элементу массива. В PIC C Compiler это можно, а как в CodeVisionAVR?
Изначально формулируйте яснее что Вы хотите получить в ответе.
Приведенные варианты отвечают на поставленный в первом посте вопрос, разве не так?
А сейчас Вы уже задали второй вопрос.
Родился
Сообщения: 11
Зарегистрирован: Вт окт 07, 2008 03:26:32
Откуда: Волгоград

Сообщение Simba »

mr.Kirill писал(а):[quote=Изначально формулируйте яснее что Вы хотите получить в ответе.
Приведенные варианты отвечают на поставленный в первом посте вопрос, разве не так?
А сейчас Вы уже задали второй вопрос.
Я писал " чтобы опрашивать через изменение индекса". Приведённые вырианты разве делают это? По моему здесь просто собирается состояние пинов порта в массив. Мне казалось что вопрос поставлен достаточно ясно, но как говорится со стороны виднее.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18708
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

не знаю, как там оно в PIC C делается, но можно сделать аналог так:

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

// описание нового типа "пин порта"
typedef struct{
  char * port;
  char mask;
} pin_struct;

// массив "пинов" разных портов
pin_struct pin_array[] = {
   {&PINA, (1<<PA0)}, // нулевой бит порта А
   {&PINB, (1<<PB4)}, // 4-й бит порта В
   {&PINC, (1<<PC3)} // 3-й бит порта С
};

BOOL result; // булева переменная - TRUE или FALSE 

// теперь обращение к третьему элементу массива pin_array[]
   result = (*(pin_array[2].port) & pin_array[2].mask) != 0;
P.S. предложенный код проверен в WinAVR
Последний раз редактировалось ARV Вт окт 07, 2008 16:09:20, всего редактировалось 1 раз.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 72
Зарегистрирован: Ср сен 17, 2008 08:12:46
Откуда: Санкт-Петербург, Пушкин

Сообщение kent.a »

А можно увидеть пример того что нужно, как это делается на пиках. тогда и недопонимания все исчезнут.
Родился
Сообщения: 11
Зарегистрирован: Вт окт 07, 2008 03:26:32
Откуда: Волгоград

Сообщение Simba »

В PICCC можно например так:
short const cannel[] ={PIN_G3, PIN_E1, PIN_H3, PIN_H2, PIN_H0, PIN_H1};
и всё.
Спасибо за ответ, попробую.
Родился
Сообщения: 11
Зарегистрирован: Вт окт 07, 2008 03:26:32
Откуда: Волгоград

Сообщение Simba »

ARV писал(а):не знаю, как там оно в PIC C делается, но можно сделать аналог так:

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

// описание нового типа "пин порта"
typedef struct{
  char * port;
  char mask;
} pin_struct;

// массив "пинов" разных портов
pin_struct pin_array[] = {
   {&PINA, (1<<PA0)}, // нулевой бит порта А
   {&PINB, (1<<PB4)}, // 4-й бит порта В
   {&PINC, (1<<PC3)} // 3-й бит порта С
};

BOOL result; // булева переменная - TRUE или FALSE 

// теперь обращение к третьему элементу массива pin_array[]
   result = (*(pin_array[2].port) & pin_array[2].mask) != 0;
P.S. предложенный код проверен в WinAVR

К сожалению код не компилируется в CodeVision, ошибка:
operand type 'sfrb' is incompatible with the '&' operator
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18708
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Simba писал(а):К сожалению код не компилируется в CodeVision, ошибка:
operand type 'sfrb' is incompatible with the '&' operator
потому что "умный" CVAVR обращается к порту, как к порту, а WinAVR - как к ячейке памяти :). т.е. "адрес порта" действительно несуразица для Си, а адрес "ячейки" - вполне законная вещь.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

Если умный CAVR ругается, то почему не сделать тупо, просто и надежно, как табуретка...

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

...
////////////////////////////////////////////////// 
char pin_result=0; 
char i=0; //counter
//////////////////////////////////////////////////
   char pin_read(char pin_number)  {
                   char result=0;
          switch (pin_number){// здесь цифрам задаем соответствие пинам
            //------------------------
            case 0:
             return result=PINA.0;
            break;
            //------------------------          
            case 1:
              return result=PINA.1;
            break;
            //-------------------------          
            case 2:
              return result=PINB.3;
            break;
            //-------------------------          
            case 3:
              return result=PINB.4;
            break;      
                                      };
                                         }
...
//опрос:
 pin_result = pin_read(i);
...
Родился
Сообщения: 11
Зарегистрирован: Вт окт 07, 2008 03:26:32
Откуда: Волгоград

Сообщение Simba »

Вообще то я считаю, что компиляторы для МК должны затачиваться на удобство работы с портами, а CodeVision что - то не особо этим блещет по сравнению с другими. Придется видимо осваивать IAR, там с портами вроде тоже не очень, макросы какие-то, но считается более профессиональным, наверное глюков будет меньше.
Родился
Сообщения: 11
Зарегистрирован: Вт окт 07, 2008 03:26:32
Откуда: Волгоград

Сообщение Simba »

Goodefine писал(а):Если умный CAVR ругается, то почему не сделать тупо, просто и надежно, как табуретка...

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

...
////////////////////////////////////////////////// 
char pin_result=0; 
char i=0; //counter
//////////////////////////////////////////////////
   char pin_read(char pin_number)  {
                   char result=0;
          switch (pin_number){// здесь цифрам задаем соответствие пинам
            //------------------------
            case 0:
             return result=PINA.0;
            break;
            //------------------------          
            case 1:
              return result=PINA.1;
            break;
            //-------------------------          
            case 2:
              return result=PINB.3;
            break;
            //-------------------------          
            case 3:
              return result=PINB.4;
            break;      
                                      };
                                         }
...
//опрос:
 pin_result = pin_read(i);
...
Вот именно так я и сделал :))
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

Simba писал(а):...компиляторы для МК должны затачиваться на удобство работы с портами, а CodeVision что - то не особо этим блещет по сравнению с другими...
Далеко не все компиляторы допускают запись вроде:

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

result=PINA.0;
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18708
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Simba писал(а):Вообще то я считаю, что компиляторы для МК должны затачиваться на удобство работы с портами, а CodeVision что - то не особо этим блещет по сравнению с другими. Придется видимо осваивать IAR, там с портами вроде тоже не очень, макросы какие-то, но считается более профессиональным, наверное глюков будет меньше.
осваивайте WinAVR - на небольших проектах разницы не заметите, а на больших - IAR делает на несколько процентов более оптимальный код (по слухам)... зато WinAVR бесплатный, а IAR - пиратствовать надо...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Родился
Сообщения: 11
Зарегистрирован: Вт окт 07, 2008 03:26:32
Откуда: Волгоград

Сообщение Simba »

Поюзаю месяц триал, если понравится поставлю перед моей конторой вопрос о покупке, откажкт - буду думать. WinAvr отпугнул недружественным для меня интерфейсом . Я не линуксоид, и не хочется тратить время и силы на освоение "чуждой" идеологии.
Вымогатель припоя
Сообщения: 543
Зарегистрирован: Чт окт 18, 2007 16:45:30
Откуда: из Питера

Сообщение MetEl »

Goodefine писал(а):
Simba писал(а):...компиляторы для МК должны затачиваться на удобство работы с портами, а CodeVision что - то не особо этим блещет по сравнению с другими...
Далеко не все компиляторы допускают запись вроде:

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

result=PINA.0;
Не плохо бы было, если б они задавали по больше "вопросов".
простое чмо, выдумщик
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»