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

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

Сообщение Tohey »

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

Сообщение Aheir »

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

Сообщение Tohey »

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

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

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

Сообщение Tohey »

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

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

Для преобразования числа в строку есть itoa() и ltoa()
Последний раз редактировалось Abaktyсh Сб мар 17, 2007 18:56:25, всего редактировалось 2 раза.
Реклама
Модератор
Аватара пользователя
Сообщения: 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
Контактная информация:
Грызет канифоль
Аватара пользователя
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

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

Сообщение Aheir »

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

Сообщение Tohey »

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

Сообщение Mamonth »

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

Сообщение Aheir »

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

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

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

Сообщение 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

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

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

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

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

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

Оператор |= аналогично для "ИЛИ".
Вымогатель припоя
Аватара пользователя
Сообщения: 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!!!
Контактная информация:
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

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

Сообщение 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!!!
Контактная информация:
Э...
Аватара пользователя
Сообщения: 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 КБ) 3156 скачиваний
Последний раз редактировалось tych Вс сен 28, 2008 19:54:12, всего редактировалось 2 раза.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Вымогатель припоя
Аватара пользователя
Сообщения: 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»