Страница 260 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб май 11, 2013 17:30:57
vitalik_1984
Так это потому что область памяти одна и та же.
Вот читается или нет. Вообще пишут, что так нельзя делать как вы посоветовали.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб май 11, 2013 20:09:12
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 в низкий уровень?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб май 11, 2013 21:58:07
Apparatchik
MS24 писал(а):...или еще нужно самостоятельно выставлять SS в низкий уровень?
именно, а потом в высокий, короче ручками.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб май 11, 2013 23:27:01
vitalik_1984
Насколько я понял - если только один приемник можно и не использовать данный вывод, просто установить в активный уровень, а вот если принимающих несколько, то выбирать кому сейчас принимать нужно через подачу активного уровня через данный вывод. если МК является только мастер устройством, то вывод SS на нем не используется.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс май 12, 2013 11:23:47
MS24
А выставлять, (в моем случае atmega8) PORTB.2 = 0 - таким образом?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс май 12, 2013 12:21:58
vitalik_1984
Вы бы еще поточнее описали что вы там делаете, а то же непонятно, что у вас за схема, мастер или что, сколько устройств.
А так да ноль на ножке именно так устанавливается.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс май 12, 2013 12:42:02
MS24
vitalik_1984 писал(а):Вы бы еще поточнее описали что вы там делаете, а то же непонятно, что у вас за схема, мастер или что, сколько устройств.
А так да ноль на ножке именно так устанавливается.
Я пытаюсь запустить датчик давления MPL115A1. делаю вот по статье
http://we.easyelectronics.ru/part/cifro ... 115a2.html
Только там датчик общается по I2C, а у меня по SPI. Я до этого с этим протоколом не работал, логику понимаю, программно могу реализовать, но хочу аппаратный задействовать, он быстрее. Вот столкнулся с непониманием как именно выставлять SS, до этого думал, что он тоже аппаратно выставляется =)
Сейчас вот пока не могу понять, как выкачивать от туда коэффициенты, какой командой(
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс май 12, 2013 12:51:22
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;
отдеально строковые массивы получаются, а вот структуры из них никак....
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс май 12, 2013 13:26:21
ChipKiller
DDark писал(а):строковые массивы получаются, а вот структуры из них никак...
... для создания собственных типов используйте
typedef
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс май 12, 2013 13:29:10
a_skr
наверно так:
Код: Выделить всё
typedef struct
{
unsigned char name[10][11];
unsigned char value[10][5];
unsigned char count;
} submenu;
submenu menu[4];
и причем тут CVAVR? обычный C.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс май 12, 2013 15:08:12
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;
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс май 12, 2013 15:28:53
a_skr

что это?
или инициализировать при объявлении массива:
Код: Выделить всё
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}
};
или по ходу выполнения:
и еще не забудьте про размерности, "PREFERENCES" - уже 12 байт.
вообще, нерациональный расход ОЗУ получается.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс май 12, 2013 16:10:32
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 лежит то что надо, но в массив почему то не передается
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн май 13, 2013 14:00:53
DDark
уперся как в стену.. как обойти? ну или как вы создаете менюшки?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн май 13, 2013 15:23:52
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].
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн май 13, 2013 15:41:32
DDark
а... ну у меня перед объявлением массива было FLASH прописано... поэтому не работало.. ну а так занято уже 572 байта, но в принципе могу и уложиться))
спасибо огромное!!!!
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн май 13, 2013 20:46:01
Сериг
Всем мяу

Товарищи,есть у кого пример работы с меню под индикатор wh1602 или подобный?
Не понимаю как мне заставить при нажатии кнопки,переходить в определенное меню и ждать до тех пор,пока в этом меню не произойдет нажатие какой-то из кнопок.
Буду Мяусьма признателен!
Спасибо.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт май 14, 2013 13:57:42
DDark
ну я вот как раз делаю менюшку с цр1604, но она у меня примитивная.. 2 кнопочки - одна переключает подменюшки с разной информацией а вторая - листает список вниз циклически
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт май 14, 2013 13:59:40
ibiza11
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт май 14, 2013 14:22:10
Сериг
ibiza11 писал(а):Сериг,
вот
Спасибо!почитаю.
DDark писал(а):ну я вот как раз делаю менюшку с цр1604, но она у меня примитивная.. 2 кнопочки - одна переключает подменюшки с разной информацией а вторая - листает список вниз циклически
можно посмотреть код?