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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
AndTer
Поставщик валерьянки для Кота
Сообщения: 2406
Зарегистрирован: Ср фев 23, 2011 12:12:31

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

Сообщение AndTer »

BCluster писал(а):вообще народ обленился :facepalm:

Зато ты не поленился по флудить)
Ну не надо... Выше приведённый способ мне знаком... У баскома всё таки интересная функция и я такой в CVAVR не знаю...
Я говорю всё таки об эффективном коде и в плане кол-во итераций и размера программы. Не против даже ассемблерной вставки... А вот изучать команды и регистры ради одной функции... как то наверное лениво... согласен...
Глупый не задает вопросы. Глупый и так все знает.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

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

Сообщение uk8amk »

Суть в управлении внешним сдвиговым регистром...
Есть какие то "красивые" решения? В том плане чтобы не было затратно для МК и в плане скорости и в плане размера кода?


Приходится выбирать между скоростью и размером кода. Для повышения скорости выполнения подпрограммы делают разворачивание цикла в линейный код.

Самое нормальное решение здесь - использовать SPI(или USART в режиме SPI) если конкретная AVR-ка позволяет.
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

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

Сообщение BCluster »

AndTer писал(а):Зато ты не поленился по флудить)

Конечно не поленился :)
Вопрос в том, зачем встраивать какие-то функции, когда они пишутся за время меньшее, чем нужно для поиска их в документации.
Насчет скорости работы - быстрее не получится. Только если использовать аппаратные возможности какого-нибудь SPI. Но думаю что за глаза хватит
Аватара пользователя
@nod
Встал на лапы
Сообщения: 98
Зарегистрирован: Вт июл 29, 2008 01:45:38
Откуда: Днепропетровск

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

Сообщение @nod »

Подскажите плиз winavr:

//----------
char SEGMENTE[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x80, 0x40, 0x00};

Описывается конфигурация цифр.

Вопрос: а где описывается (в каком файле?) за какие ноги дергать (выводы процессора), чтоб они светились (Файлик с исходником прицепил).

(делаю разводку печатки и для удобо... вобщем хочу поменять ноги проца в порту выхода сегментов, чтоб на печатке не пересекались)

(Проэкт термометр: http://radioparty.ru/index.php/componen ... n2-ds18b20 )
Вложения
thermometer.c
(4.47 КБ) 193 скачивания
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

Вот в этом массиве и описывается. Каждый бит отвечает за свой сегмент, если бит установлен - сегмент горит, например цифра 1 установлены 1 и 2 биты - горят два сегмента, которые подключены к этим битам.
«И всё-таки она вертится!»
Аватара пользователя
@nod
Встал на лапы
Сообщения: 98
Зарегистрирован: Вт июл 29, 2008 01:45:38
Откуда: Днепропетровск

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

Сообщение @nod »

да, я понимаю, что 3F это светится ноль ( 111111 bin )
мне надо: где привязка сегментов A, B,C, D ИТД к ногам проца
Аватара пользователя
Apparatchik
Держит паяльник хвостом
Сообщения: 908
Зарегистрирован: Вс май 23, 2010 13:55:42
Откуда: Украина, Александрия

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

Сообщение Apparatchik »

Сегменты подключены к порту D и как я уже говорил каждый пин (бит регистра PORTD) это отдельный сегмент. Включение первого разряда - строка 23, второго - строка 26 и т.д. Где какой сегмент легко вычисляется.
«И всё-таки она вертится!»
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

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

Сообщение oleg110592 »

@nod писал(а):делаю разводку печатки и для удобо... вобщем хочу поменять ноги проца в порту выхода сегментов, чтоб на печатке не пересекались

подключение индикатора "как попало" тут осуждалось: http://forum.easyelectronics.ru/viewtop ... 30&start=0
Аватара пользователя
@nod
Встал на лапы
Сообщения: 98
Зарегистрирован: Вт июл 29, 2008 01:45:38
Откуда: Днепропетровск

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

Сообщение @nod »

Ах, да! Ясно.
Разложим Bin на сегменты и составляем свой код.
Спасибо!
R_ura
Грызет канифоль
Сообщения: 293
Зарегистрирован: Сб май 29, 2010 00:08:48
Откуда: Харьков

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

Сообщение 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 на ножки мк, если они разбросаны по разным портам?
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Читаем каждый бит принятого байта и выводим их на соответствующую ногу МК.
В чём проблема ? :roll:
R_ura
Грызет канифоль
Сообщения: 293
Зарегистрирован: Сб май 29, 2010 00:08:48
Откуда: Харьков

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

Сообщение R_ura »

Аlex писал(а):Читаем каждый бит принятого байты и выводим их на соответствующую ногу МК.
В чём проблема ? :roll:


Хотелось бы более удобный вариант, чем стандартные сишные конструкции, типа:
reg &= (~(1<<(bit)))
((reg & (1<<(bit))) != 0)

Может в CV обращение к битам переменной возможно более удобным способом ?
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

R_ura писал(а): Хотелось бы более удобный вариант, чем стандартные сишные конструкции, типа:
reg &= (~(1<<(bit)))
А в макросы, типа setbit, getbit, их запихнуть ?
Куда уж удобнее ?
R_ura
Грызет канифоль
Сообщения: 293
Зарегистрирован: Сб май 29, 2010 00:08:48
Откуда: Харьков

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

Сообщение R_ura »

Аlex писал(а):
R_ura писал(а): Хотелось бы более удобный вариант, чем стандартные сишные конструкции, типа:
reg &= (~(1<<(bit)))
А в макросы, типа setbit, getbit, их запихнуть ?
Куда уж удобнее ?


Можно пример?

П.С. Удобнее всего было бы PORTC = byte_usart; Но цоколевка у мк на удивление неудобная..
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение А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);
..... и т.д....
R_ura
Грызет канифоль
Сообщения: 293
Зарегистрирован: Сб май 29, 2010 00:08:48
Откуда: Харьков

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

Сообщение 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);
..... и т.д....


Не работает что-то .
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Что значит "не работает" ? Объясняйте проблемы подробнее, мы не экстрасенсы.
R_ura
Грызет канифоль
Сообщения: 293
Зарегистрирован: Сб май 29, 2010 00:08:48
Откуда: Харьков

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

Сообщение 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 не меняется в соответствии с пришедшим байтом.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

А если так:

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

if(getbit(byte, 1))  pin_1 = 1;
else                 pin_1 = 0;

Ну и вообще, попробуйте что-нибудь позаписывать в pin_x. Может в порты побитно даже напрямую не выводится ничего.
R_ura
Грызет канифоль
Сообщения: 293
Зарегистрирован: Сб май 29, 2010 00:08:48
Откуда: Харьков

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

Сообщение R_ura »

Аlex писал(а):А если так:

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

if(getbit(byte, 1))  pin_1 = 1;
else                 pin_1 = 0;

Ну и вообще, попробуйте что-нибудь позаписывать в pin_x. Может в порты побитно даже напрямую не выводится ничего.


Нет, не работает и так..

Напрямую в порт побитно все записывается.
PORTC.2 =~ PORTC.2;

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

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