Обсуждаем контроллеры компании Atmel.
Ответить

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

Сб мар 17, 2007 12:30:55

Надо типа массив для чтения, массив констант и что бы находился в программной памяти. На асме я делал так:
mas:
.db 1, 3, 5

Наверное, в CVAVR надо так,
flash unsigned char mas[] = {1,3,5}; ?

Сб мар 17, 2007 12:44:16

Да. верно, надо использовать слово flash

Сб мар 17, 2007 13:42:31

А есть в си функции для преобразования в 10тичную систему?

Сб мар 17, 2007 14:27:23

в CVAVR есть - посмотри в хелпе "BCD" типа. библиотека BCD.H

Сб мар 17, 2007 17:55:05

Я ищу для 4 байтных значений, немного написал, но кода добавилось аж на 1К! :cry:
Мне нужно преобразовать 2-4байтное значение для вывода на 5 светодиодных индикаторов
Последний раз редактировалось Tohey Сб мар 17, 2007 18:03:26, всего редактировалось 1 раз.

Сб мар 17, 2007 18:28:54

Для преобразования числа в строку есть itoa() и ltoa()
Последний раз редактировалось Abaktyсh Сб мар 17, 2007 18:56:25, всего редактировалось 2 раз(а).

Сб мар 17, 2007 18:43:05

А как уВАс устроена функция вывода на индикаторы?

Я часто использую конструкцию типа

print (a, b, c, d, e, t),

где a..e - выводимые символы, t - время их отображения, мс.
Внутри функции используется switch для выбора отправляемого на индикатор кода.
Если надо вывести несколько разрядов переменной temp,
использую
a=temp/100 для вывода сотен
b=temp%100/10 для вывода десятков
с=temp%100%10 для вывода единиц
при этом case с номером 0..9 должен давать код соответствующей цифры

Вс мар 18, 2007 11:09:51

Я так вывожу:
PORTD = 0b11111110;
j = digit[i];
PORTB = DcMatrix[j];
delay_ms(30);
(для одного символа)

Пн мар 19, 2007 11:16:55

Пожалуй, проще всего будет деление...
А зачем такая большая задержка - 30ms?

Пн мар 19, 2007 14:43:05

А зачем такая большая задержка - 30ms?

Я ещё не налаживал

Ср мар 21, 2007 06:50:16

Aheir писал(а):Пожалуй, проще всего будет деление...
А зачем такая большая задержка - 30ms?

А такой момент: в AVR-ах нет команды деления. Так что этот момент немного не удачен, но на практике все решается через BCD или деления, но немного не так. ))

Ср мар 21, 2007 08:09:19

В общем-то, я это понимаю, но иногда вполне можно использовать, орсобенно когда ресурсы есть и быстродействия хватает.. :wink:
А Ваш вариант?

Ср мар 21, 2007 09:45:23

Mamonth писал(а):в AVR-ах нет команды деления.


Деление это умножение на число в степени -1. Удобно делать на Си вычисления.

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

Сб июн 16, 2007 13:11:31

Начал заниматся изучением ШИМ и столкнулся вот с такой проблемой. При настройке таймера пользовался конструкциец тима TCR0A=1<<WGM00 и подобными. КодВижн выдал сообщение о неизвестности WGM00. Просмотр tinyn2313.h (девайс собран на Attony2313) показал что нет зарезервированных слов названий битов таймеров(др. названий битов там тоже нет). После пересадки из tn2313def.inc (такие же библиотекаи только с АВРСттудио) (естесствено с заменой .equ на #define) компилятор выдаёт ошибку "must be lvalue" и подсвечивает строку TCR0A=1<<WGM00. Я бы может и не сильно страдал, но в шестнадцатиричн. формате устанавливать биты в регистрах не удобно, а в двоичном формате надо выкидывать зарезервированные биты(допустим из восьми зарезервирован бит 3 и 4(отсчёт с 0), тогда установка 0b00000001 катит а при записи 0b01000001 уже нет реакции на установленный бит 6). Помогите разобратся
Последний раз редактировалось Negor Чт июн 28, 2007 12:46:35, всего редактировалось 1 раз.

Re: Вопрос по CodeVision

Сб июн 16, 2007 15:08:51

Negor писал(а):...а в двоичном формате надо выкидывать зарезервированные биты(допустим из восьми зарезервирован бит 3 и 4...

Извините, но я не въехал насчёт зарезервированных битов. В регистре TCR0A зарезервированы биты 2 и 3. Они контроллером не используются вообще, и никуда их выкидывать не надо. Вместо них можно спокойно прописывать нули. От этого контроллеру не будет ни горячо и не холодно...

Ели же речь идёт о том, как изменить определённые биты в регистре, а остальные при этом не трогать, то тогда надо применять логические операции "И", если биты надо установить в "0", или "ИЛИ", если биты надо установить в "1" . Например, так:

ACSR &= 0B11110111; //запретить прерывания от аналог. компаратора (устанавливаем бит 3 в "0", а остальные не трогаем)
ACSR |= 0B10000000; // выключить аналог. компаратор, чтоб не жрал энергию (устанавливаем бит 7 в "1", а остальные не трогаем)

Оператор &= означает, что надо считать значение из регистра, сделать с ним и указанным операндом операцию "И" и присвоить результат обратно этому регистру.

Оператор |= аналогично для "ИЛИ".

Сб июн 16, 2007 16:42:20

Ну для установки битов мне нравится больше контрукция вроде TCR0A|=1<<WGM,
А то что вы спрашивали(т.е. я спрашивал а вы процитировали) вобщем забил я в TCR0A что-то вроде 0b01100001 кажется так... а в отладчике установился только первый бит(Пользуюсь АВРстудио), а когда записал в шестнацатиричном всё заработало... вот так вот

Re: CodeVision : Просто вопрос

Сб июн 16, 2007 23:05:40

Negor писал(а):КодВижн выдал сообщение о неизвестности WGM00. Просмотр tinyn2313.h (девайс собран на Attony2313) показал что нет зарезервированных слов названий битов таймеров(др. названий битов там тоже нет).


Я просто дополнительный хидер .h сделал с названиями битов.
В моем профиле линк.

Re: CodeVision : Просто вопрос

Сб июн 16, 2007 23:13:47

tych писал(а):
Negor писал(а):КодВижн выдал сообщение о неизвестности WGM00. Просмотр tinyn2313.h (девайс собран на Attony2313) показал что нет зарезервированных слов названий битов таймеров(др. названий битов там тоже нет).


Я просто дополнительный хидер .h сделал с названиями битов.
В моем профиле линк.


Так я тоже делал *.h файл где забивал названия битов к их номерам. в результате получал "must be lvalue".... и самое отвратительное - нет никаких справок по ошибкам

Вс июн 17, 2007 00:13:01

CVAVR 2.03.4 без коклюша и ветрянки !

там же: ШАБЛОН-заготовка - НАСТРОЕНЫЕ проекты для быстрого начала работы в CVAVR PROTEUS WinAVR VMLAB

CodeVisionAVR 1.25.8 2007-12

Изображение

===========

заголовки удобно брать из ICC или IAR

Вот вам .h для attiny2313 из ICC

Скопируйте из него определения битов в заголовок CVAVR.
Вложения
Attiny2313 bit def from ICC.rar
(1.83 KiB) Скачиваний: 2311
Последний раз редактировалось tych Вс сен 28, 2008 19:54:12, всего редактировалось 2 раз(а).

Вс июн 17, 2007 22:52:13

Спасибо тов. tych! Единственное что меня смущает - это то, что INT0 и INT1 были переназначены(was redefined) но это я думаю говорит только о том что и в либе родной CodeVision забиты эти биты и в вашей(от вас)... но я надеюсь они не покусаются :)) Просмотрел я приведённый вами Либ и понял что забиты они в 16-ричном формате как беззначные на один байт(char занимает же один байт,так?)... только не понял что означает volitile и не могу понять зачем звёздочки(знаю что связано с понятием "указатель")... вы мне разъясните окончательно, пожалуйста, а то не комфортно изучать дальше не разобравшись.... заранее большое спасибо :roll:
Ответить