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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

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

Сообщение Tohey »

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

Наверное, в CVAVR надо так,
flash unsigned char mas[] = {1,3,5}; ?
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Да. верно, надо использовать слово flash
Оптимизм х (Опыт + Знания) = const
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

А есть в си функции для преобразования в 10тичную систему?
Аватара пользователя
Abaktyсh
Вечно гонимый
Сообщения: 232
Зарегистрирован: Ср фев 28, 2007 17:48:07

Сообщение Abaktyсh »

в CVAVR есть - посмотри в хелпе "BCD" типа. библиотека BCD.H
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

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

Сообщение Abaktyсh »

Для преобразования числа в строку есть itoa() и ltoa()
Последний раз редактировалось Abaktyсh Сб мар 17, 2007 18:56:25, всего редактировалось 2 раза.
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

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

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

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 должен давать код соответствующей цифры
Оптимизм х (Опыт + Знания) = const
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

Я так вывожу:
PORTD = 0b11111110;
j = digit[i];
PORTB = DcMatrix[j];
delay_ms(30);
(для одного символа)
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Пожалуй, проще всего будет деление...
А зачем такая большая задержка - 30ms?
Оптимизм х (Опыт + Знания) = const
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

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

Я ещё не налаживал
Аватара пользователя
Mamonth
Вымогатель припоя
Сообщения: 534
Зарегистрирован: Пн янв 16, 2006 08:00:17
Откуда: Иркутск

Сообщение Mamonth »

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

А такой момент: в AVR-ах нет команды деления. Так что этот момент немного не удачен, но на практике все решается через BCD или деления, но немного не так. ))
Today fine night...
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

В общем-то, я это понимаю, но иногда вполне можно использовать, орсобенно когда ресурсы есть и быстродействия хватает.. :wink:
А Ваш вариант?
Оптимизм х (Опыт + Знания) = const
Аватара пользователя
Abaktyсh
Вечно гонимый
Сообщения: 232
Зарегистрирован: Ср фев 28, 2007 17:48:07

Сообщение Abaktyсh »

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


Деление это умножение на число в степени -1. Удобно делать на Си вычисления.
Аватара пользователя
Negor
Вымогатель припоя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина
Контактная информация:

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

Сообщение Negor »

Начал заниматся изучением ШИМ и столкнулся вот с такой проблемой. При настройке таймера пользовался конструкциец тима 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 раз.
There is only 10 kind of people: those who understands binary code and those who dont!!!
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Re: Вопрос по CodeVision

Сообщение Барсик »

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

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

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

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

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

Оператор |= аналогично для "ИЛИ".
Аватара пользователя
Negor
Вымогатель припоя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина
Контактная информация:

Сообщение Negor »

Ну для установки битов мне нравится больше контрукция вроде TCR0A|=1<<WGM,
А то что вы спрашивали(т.е. я спрашивал а вы процитировали) вобщем забил я в TCR0A что-то вроде 0b01100001 кажется так... а в отладчике установился только первый бит(Пользуюсь АВРстудио), а когда записал в шестнацатиричном всё заработало... вот так вот
There is only 10 kind of people: those who understands binary code and those who dont!!!
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

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

Сообщение tych »

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


Я просто дополнительный хидер .h сделал с названиями битов.
В моем профиле линк.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Negor
Вымогатель припоя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина
Контактная информация:

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

Сообщение Negor »

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


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


Так я тоже делал *.h файл где забивал названия битов к их номерам. в результате получал "must be lvalue".... и самое отвратительное - нет никаких справок по ошибкам
There is only 10 kind of people: those who understands binary code and those who dont!!!
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

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 КБ) 3053 скачивания
Последний раз редактировалось tych Вс сен 28, 2008 19:54:12, всего редактировалось 2 раза.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Negor
Вымогатель припоя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина
Контактная информация:

Сообщение Negor »

Спасибо тов. tych! Единственное что меня смущает - это то, что INT0 и INT1 были переназначены(was redefined) но это я думаю говорит только о том что и в либе родной CodeVision забиты эти биты и в вашей(от вас)... но я надеюсь они не покусаются :)) Просмотрел я приведённый вами Либ и понял что забиты они в 16-ричном формате как беззначные на один байт(char занимает же один байт,так?)... только не понял что означает volitile и не могу понять зачем звёздочки(знаю что связано с понятием "указатель")... вы мне разъясните окончательно, пожалуйста, а то не комфортно изучать дальше не разобравшись.... заранее большое спасибо :roll:
There is only 10 kind of people: those who understands binary code and those who dont!!!
Ответить

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