Страница 296 из 421

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

Добавлено: Пт дек 27, 2013 00:28:10
AndTer
BCluster писал(а):вообще народ обленился :facepalm:
Зато ты не поленился по флудить)
Ну не надо... Выше приведённый способ мне знаком... У баскома всё таки интересная функция и я такой в 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
Читаем каждый бит принятого байта и выводим их на соответствующую ногу МК.
В чём проблема ? :roll:

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

Добавлено: Вс дек 29, 2013 19:41:53
R_ura
Аlex писал(а):Читаем каждый бит принятого байты и выводим их на соответствующую ногу МК.
В чём проблема ? :roll:
Хотелось бы более удобный вариант, чем стандартные сишные конструкции, типа:
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;

А эти бытовые маски с переменными, расположенными в ОЗУ работают?