Страница 296 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт дек 27, 2013 00:28:10
AndTer
BCluster писал(а):вообще народ обленился

Зато ты не поленился по флудить)
Ну не надо... Выше приведённый способ мне знаком... У баскома всё таки интересная функция и я такой в CVAVR не знаю...
Я говорю всё таки об эффективном коде и в плане кол-во итераций и размера программы. Не против даже ассемблерной вставки... А вот изучать команды и регистры ради одной функции... как то наверное лениво... согласен...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт дек 27, 2013 15:40:13
uk8amk
Суть в управлении внешним сдвиговым регистром...
Есть какие то "красивые" решения? В том плане чтобы не было затратно для МК и в плане скорости и в плане размера кода?
Приходится выбирать между скоростью и размером кода. Для повышения скорости выполнения подпрограммы делают разворачивание цикла в линейный код.
Самое нормальное решение здесь - использовать SPI(или USART в режиме SPI) если конкретная AVR-ка позволяет.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт дек 27, 2013 16:13:15
BCluster
AndTer писал(а):Зато ты не поленился по флудить)
Конечно не поленился

Вопрос в том, зачем встраивать какие-то функции, когда они пишутся за время меньшее, чем нужно для поиска их в документации.
Насчет скорости работы - быстрее не получится. Только если использовать аппаратные возможности какого-нибудь SPI. Но думаю что за глаза хватит
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт дек 27, 2013 16:25:43
@nod
Подскажите плиз winavr:
//------------------0-----1-----2-----3-----4-----5-----6-----7-----8------9----dp---minus-blank
char SEGMENTE[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x80, 0x40, 0x00};
Описывается конфигурация цифр.
Вопрос: а где описывается (в каком файле?) за какие ноги дергать (выводы процессора), чтоб они светились (Файлик с исходником прицепил).
(делаю разводку печатки и для удобо... вобщем хочу поменять ноги проца в порту выхода сегментов, чтоб на печатке не пересекались)
(Проэкт термометр:
http://radioparty.ru/index.php/componen ... n2-ds18b20 )
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт дек 27, 2013 19:37:22
Apparatchik
Вот в этом массиве и описывается. Каждый бит отвечает за свой сегмент, если бит установлен - сегмент горит, например цифра 1 установлены 1 и 2 биты - горят два сегмента, которые подключены к этим битам.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт дек 27, 2013 19:52:39
@nod
да, я понимаю, что 3F это светится ноль ( 111111 bin )
мне надо: где привязка сегментов A, B,C, D ИТД к ногам проца
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт дек 27, 2013 19:56:56
Apparatchik
Сегменты подключены к порту D и как я уже говорил каждый пин (бит регистра PORTD) это отдельный сегмент. Включение первого разряда - строка 23, второго - строка 26 и т.д. Где какой сегмент легко вычисляется.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт дек 27, 2013 20:44:08
oleg110592
@nod писал(а):делаю разводку печатки и для удобо... вобщем хочу поменять ноги проца в порту выхода сегментов, чтоб на печатке не пересекались
подключение индикатора "как попало" тут осуждалось:
http://forum.easyelectronics.ru/viewtop ... 30&start=0
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб дек 28, 2013 13:45:14
@nod
Ах, да! Ясно.
Разложим Bin на сегменты и составляем свой код.
Спасибо!
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс дек 29, 2013 19:23:22
R_ura
По юарту приходит байт данных. Он же и должен выводиться в PORTx. Но в Меге8 , к сожалению, при использовании юарта и внешнего кварца не остается ни одного целого порта.
char byte_usart;
#define bit_1 PORTB.1
#define bit_2 PORTB.2
#define bit_3 PORTB.3
#define bit_4 PORTB.4
#define bit_5 PORTB.5
#define bit_6 PORTC.2
#define bit_7 PORTC.3
#define bit_8 PORTC.4
Вот и вопрос, как с минимальными сложностями вывести побитно содержимое byte_usart на ножки мк, если они разбросаны по разным портам?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс дек 29, 2013 19:33:45
Аlex
Читаем каждый бит принятого байта и выводим их на соответствующую ногу МК.
В чём проблема ?

Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс дек 29, 2013 19:41:53
R_ura
Аlex писал(а):Читаем каждый бит принятого байты и выводим их на соответствующую ногу МК.
В чём проблема ?

Хотелось бы более удобный вариант, чем стандартные сишные конструкции, типа:
reg &= (~(1<<(bit)))
((reg & (1<<(bit))) != 0)
Может в CV обращение к битам переменной возможно более удобным способом ?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс дек 29, 2013 19:55:09
Аlex
R_ura писал(а): Хотелось бы более удобный вариант, чем стандартные сишные конструкции, типа:
reg &= (~(1<<(bit)))
А в макросы, типа
setbit,
getbit, их запихнуть ?
Куда уж удобнее ?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс дек 29, 2013 19:58:48
R_ura
Аlex писал(а):R_ura писал(а): Хотелось бы более удобный вариант, чем стандартные сишные конструкции, типа:
reg &= (~(1<<(bit)))
А в макросы, типа
setbit,
getbit, их запихнуть ?
Куда уж удобнее ?
Можно пример?
П.С. Удобнее всего было бы PORTC = byte_usart; Но цоколевка у мк на удивление неудобная..
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс дек 29, 2013 20:07:37
Аlex
Ну, как то приблизительно так:
Код: Выделить всё
#define bit_1 PORTB.1
#define bit_2 PORTB.2
#define bit_3 PORTB.3
#define bit_4 PORTB.4
#define bit_5 PORTB.5
#define bit_6 PORTC.2
#define bit_7 PORTC.3
#define bit_8 PORTC.4
#define setbit(reg, bit) reg|=(1<<(bit))
#define clrbit(reg, bit) reg&=~(1<<(bit))
#define gtebit(reg, bit) (reg&(1<<bit)!=0)
...................
...................
unsigned char reg_tx;
bit_1 = getbit(reg_tx, 0);
bit_2 = getbit(reg_tx, 1);
..... и т.д....
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс дек 29, 2013 20:42:40
R_ura
Аlex писал(а):Ну, как то приблизительно так:
Код: Выделить всё
#define bit_1 PORTB.1
#define bit_2 PORTB.2
#define bit_3 PORTB.3
#define gtebit(reg, bit) (reg&(1<<bit)!=0)
...................
unsigned char reg_tx;
bit_1 = getbit(reg_tx, 0);
bit_2 = getbit(reg_tx, 1);
..... и т.д....
Не работает что-то .
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс дек 29, 2013 20:46:42
Аlex
Что значит "не работает" ? Объясняйте проблемы подробнее, мы не экстрасенсы.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс дек 29, 2013 20:56:35
R_ura
Аlex писал(а):Что значит "не работает" ? Объясняйте проблемы подробнее, мы не экстрасенсы.
По юарту приходит байт , нужно его вывести в порт
#define pin_1 PORTC.1
#define pin_2 PORTC.2
#define pin_3 PORTC.3
#define pin_4 PORTC.4
#define pin_5 PORTC.5
#define pin_6 PORTC.6
#define pin_7 PORTC.7
#define pin_0 PORTC.0
getchar (byte) ;
PORTC = byte; - работает.
С макросом
#define getbit(reg, bit) (reg&(1<<bit)!=0)
getchar (byte) ;
pin_1 = getbit(byte, 1); //
pin_2 = getbit(byte, 2); //
pin_3 = getbit(byte, 3); //
и т.д.
Не работает - постоянно весь порт в одном состоянии, т.е. горят все подключенные к нему светодиоды
С цоколевкой все правильно, сейчас все pin подключены к одному порту, т.к. на макетной плате стоит мега 16, а не мега 8.
Т.е. состояние PORTC не меняется в соответствии с пришедшим байтом.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс дек 29, 2013 21:36:07
Аlex
А если так:
Код: Выделить всё
if(getbit(byte, 1)) pin_1 = 1;
else pin_1 = 0;
Ну и вообще, попробуйте что-нибудь позаписывать в
pin_x. Может в порты побитно даже напрямую не выводится ничего.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс дек 29, 2013 22:07:11
R_ura
Аlex писал(а):А если так:
Код: Выделить всё
if(getbit(byte, 1)) pin_1 = 1;
else pin_1 = 0;
Ну и вообще, попробуйте что-нибудь позаписывать в
pin_x. Может в порты побитно даже напрямую не выводится ничего.
Нет, не работает и так..
Напрямую в порт побитно все записывается.
PORTC.2 =~ PORTC.2;
А эти бытовые маски с переменными, расположенными в ОЗУ работают?