CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Так это потому что область памяти одна и та же.
Вот читается или нет. Вообще пишут, что так нельзя делать как вы посоветовали.
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Сообщения: 172
Зарегистрирован: Пн мар 19, 2012 13:04:11

Сообщение MS24 »

Ребят, объясните пожалуйста, вот если используешь аппаратный SPI, кто устанавливает вывод SS? Т.е когда ты реализуешь его программно, ты сам должен делать это, а в даташите указанны только 2 фунцкции:
void SPI_MasterTransmit(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)))
;
}
для передачи, и приема

char SPI_SlaveReceive(void)
{
/* Wait for reception complete */
while(!(SPSR & (1<<SPIF)))
;
/* Return data register */
return SPDR;
}
Т.е просто запихивать туда байт и радоваться жизни, или еще нужно самостоятельно выставлять SS в низкий уровень?
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

Сообщение Apparatchik »

MS24 писал(а):...или еще нужно самостоятельно выставлять SS в низкий уровень?
именно, а потом в высокий, короче ручками.
«И всё-таки она вертится!»
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Насколько я понял - если только один приемник можно и не использовать данный вывод, просто установить в активный уровень, а вот если принимающих несколько, то выбирать кому сейчас принимать нужно через подачу активного уровня через данный вывод. если МК является только мастер устройством, то вывод SS на нем не используется.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Нашел транзистор. Понюхал.
Сообщения: 172
Зарегистрирован: Пн мар 19, 2012 13:04:11

Сообщение MS24 »

А выставлять, (в моем случае atmega8) PORTB.2 = 0 - таким образом?
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Вы бы еще поточнее описали что вы там делаете, а то же непонятно, что у вас за схема, мастер или что, сколько устройств.
А так да ноль на ножке именно так устанавливается.
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Сообщения: 172
Зарегистрирован: Пн мар 19, 2012 13:04:11

Сообщение MS24 »

vitalik_1984 писал(а):Вы бы еще поточнее описали что вы там делаете, а то же непонятно, что у вас за схема, мастер или что, сколько устройств.
А так да ноль на ножке именно так устанавливается.
Я пытаюсь запустить датчик давления MPL115A1. делаю вот по статье
http://we.easyelectronics.ru/part/cifro ... 115a2.html
Только там датчик общается по I2C, а у меня по SPI. Я до этого с этим протоколом не работал, логику понимаю, программно могу реализовать, но хочу аппаратный задействовать, он быстрее. Вот столкнулся с непониманием как именно выставлять SS, до этого думал, что он тоже аппаратно выставляется =)
Сейчас вот пока не могу понять, как выкачивать от туда коэффициенты, какой командой(
Открыл глаза
Сообщения: 73
Зарегистрирован: Вт июн 22, 2010 20:15:17

Сообщение DDark »

подскажите как реализовать в CodeVisonAVR подобную штуку

type submenu = record
name: array[1..10] of string[10];
value: array[1..10] of string[4];
count: byte;
end;

var
menu: array[1..4] of submenu;

отдеально строковые массивы получаются, а вот структуры из них никак....
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Сообщение ChipKiller »

DDark писал(а):строковые массивы получаются, а вот структуры из них никак...
... для создания собственных типов используйте typedef
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Сообщение a_skr »

наверно так:

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

typedef struct
{
  unsigned char name[10][11];
  unsigned char value[10][5];
  unsigned char count;
} submenu;

submenu menu[4];
и причем тут CVAVR? обычный C.
Открыл глаза
Сообщения: 73
Зарегистрирован: Вт июн 22, 2010 20:15:17

Сообщение DDark »

спасибо огромное! однако че то я не соображу почему когда начинаю присваивать значения выскакивает "Missing ("
подскажите пожалуйста...

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

typedef struct
{
  unsigned char name[10][11];
  unsigned char value[10][5];
  unsigned char count;
} submenu;

submenu menu[4];

menu[0].name[0] = "Status:";
menu[0].name[1] = "Temp:";
menu[0].name[2] = "Rotates:";
menu[0].name[3] = "Generation:";
menu[0].name[4] = "SENSORS";
menu[0].name[5] = "H2 GENERATOR";
menu[0].name[6] = "PREFERENCES";

menu[0].value[0] = "1:";
menu[0].value[1] = "2";
menu[0].value[2] = "3";
menu[0].value[3] = "4";
menu[0].value[4] = "5";
menu[0].value[5] = "6";
menu[0].value[6] = "7";

menu[0].count = 7;
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Сообщение a_skr »

:facepalm: что это?
или инициализировать при объявлении массива:

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

typedef struct
{
  unsigned char name[3][11];
  unsigned char value[3][5];
  unsigned char count;
} submenu;
submenu menu[3]=
{
  {"11","22","33", "11","22","33", 5},
  {"44","55","66", "11","22","33", 5},
  {"77","88","99", "aa","bb","cc", 5}
};
или по ходу выполнения:

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

strcpy(menu[0].name[0], "123");
и еще не забудьте про размерности, "PREFERENCES" - уже 12 байт.
вообще, нерациональный расход ОЗУ получается.
Открыл глаза
Сообщения: 73
Зарегистрирован: Вт июн 22, 2010 20:15:17

Сообщение DDark »

Огромное спасибо! начало получаться!)
скажите, а если перед объявлением массива приписать директиву FLASH он же расположит его во флеш памяти а не в ОЗУ?

и еще такой вопрос.. допустим есть структура

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

typedef struct
{
  unsigned char name[3][11];
  unsigned char value[3][5];
  unsigned char count;
} submenu;
submenu menu[3]=
{
  {"11","22","33", "11","22","33", 5},
  {"44","55","66", "11","22","33", 5},
  {"77","88","99", "aa","bb","cc", 5}
};
а как сделать что то типа

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

unsigned char x = 123;
sprintf(menu[0].value[0], "%03d\n" , x);
  
подскажите пожалуйста, а то проблема в несовпадении типов... strcpy тож не нравится несовпадение char и *char

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

unsigned char text[];
unsigned char *ololo;

sprintf(text,"%04d\n",chislo); 
ololo = &(menu[0].value[0][0]);     
strcpy (ololo, text);
после этого по адресу ololo лежит то что надо, но в массив почему то не передается
Открыл глаза
Сообщения: 73
Зарегистрирован: Вт июн 22, 2010 20:15:17

Сообщение DDark »

уперся как в стену.. как обойти? ну или как вы создаете менюшки?
Вымогатель припоя
Сообщения: 630
Зарегистрирован: Пн июн 14, 2010 13:07:29
Откуда: Жуковский

Сообщение a_skr »

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

unsigned char x = 123;
sprintf(menu[0].value[0], "%03d\n" , x);
strcpy(menu[0].name[0], "123");
у меня это компилируется без ошибок и предупреждений.

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

unsigned char text[];
unsigned char *ololo;
sprintf(text,"%04d\n",chislo); 
ololo = &(menu[0].value[0][0]);     
strcpy (ololo, text);
после этого по адресу ololo лежит то что надо, но в массив почему то не передается
ololo уже указывает на menu[0].value[0], значит если оно лежит по адресу ololo - то оно лежит по адресу menu[0].value[0].
Открыл глаза
Сообщения: 73
Зарегистрирован: Вт июн 22, 2010 20:15:17

Сообщение DDark »

а... ну у меня перед объявлением массива было FLASH прописано... поэтому не работало.. ну а так занято уже 572 байта, но в принципе могу и уложиться))
спасибо огромное!!!!
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

Сообщение Сериг »

Всем мяу :)
Товарищи,есть у кого пример работы с меню под индикатор wh1602 или подобный?
Не понимаю как мне заставить при нажатии кнопки,переходить в определенное меню и ждать до тех пор,пока в этом меню не произойдет нажатие какой-то из кнопок.
Буду Мяусьма признателен!
Спасибо.
Открыл глаза
Сообщения: 73
Зарегистрирован: Вт июн 22, 2010 20:15:17

Сообщение DDark »

ну я вот как раз делаю менюшку с цр1604, но она у меня примитивная.. 2 кнопочки - одна переключает подменюшки с разной информацией а вторая - листает список вниз циклически
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

Сериг, вот
Ставим плюсы: )
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

Сообщение Сериг »

ibiza11 писал(а):Сериг, вот
Спасибо!почитаю.
DDark писал(а):ну я вот как раз делаю менюшку с цр1604, но она у меня примитивная.. 2 кнопочки - одна переключает подменюшки с разной информацией а вторая - листает список вниз циклически
можно посмотреть код?
Ответить

Вернуться в «AVR»