Форум РадиоКот https://radiokot.ru/forum/ |
|
CodeVision AVR в вопросах и ответах https://radiokot.ru/forum/viewtopic.php?f=57&t=5560 |
Страница 1 из 415 |
Автор: | Tohey [ Сб мар 17, 2007 12:30:55 ] |
Заголовок сообщения: | CodeVision AVR в вопросах и ответах |
Надо типа массив для чтения, массив констант и что бы находился в программной памяти. На асме я делал так: Цитата: mas:
.db 1, 3, 5 Наверное, в CVAVR надо так, flash unsigned char mas[] = {1,3,5}; ? |
Автор: | Aheir [ Сб мар 17, 2007 12:44:16 ] |
Заголовок сообщения: | |
Да. верно, надо использовать слово flash |
Автор: | Tohey [ Сб мар 17, 2007 13:42:31 ] |
Заголовок сообщения: | |
А есть в си функции для преобразования в 10тичную систему? |
Автор: | Abaktyсh [ Сб мар 17, 2007 14:27:23 ] |
Заголовок сообщения: | |
в CVAVR есть - посмотри в хелпе "BCD" типа. библиотека BCD.H |
Автор: | Tohey [ Сб мар 17, 2007 17:55:05 ] |
Заголовок сообщения: | |
Я ищу для 4 байтных значений, немного написал, но кода добавилось аж на 1К! ![]() Мне нужно преобразовать 2-4байтное значение для вывода на 5 светодиодных индикаторов |
Автор: | Abaktyсh [ Сб мар 17, 2007 18:28:54 ] |
Заголовок сообщения: | |
Для преобразования числа в строку есть itoa() и ltoa() |
Автор: | Aheir [ Сб мар 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 должен давать код соответствующей цифры |
Автор: | Tohey [ Вс мар 18, 2007 11:09:51 ] |
Заголовок сообщения: | |
Я так вывожу: PORTD = 0b11111110; j = digit[i]; PORTB = DcMatrix[j]; delay_ms(30); (для одного символа) |
Автор: | Aheir [ Пн мар 19, 2007 11:16:55 ] |
Заголовок сообщения: | |
Пожалуй, проще всего будет деление... А зачем такая большая задержка - 30ms? |
Автор: | Tohey [ Пн мар 19, 2007 14:43:05 ] |
Заголовок сообщения: | |
Цитата: А зачем такая большая задержка - 30ms?
Я ещё не налаживал |
Автор: | Mamonth [ Ср мар 21, 2007 06:50:16 ] |
Заголовок сообщения: | |
Aheir писал(а): Пожалуй, проще всего будет деление...
А зачем такая большая задержка - 30ms? А такой момент: в AVR-ах нет команды деления. Так что этот момент немного не удачен, но на практике все решается через BCD или деления, но немного не так. )) |
Автор: | Aheir [ Ср мар 21, 2007 08:09:19 ] |
Заголовок сообщения: | |
В общем-то, я это понимаю, но иногда вполне можно использовать, орсобенно когда ресурсы есть и быстродействия хватает.. ![]() А Ваш вариант? |
Автор: | Abaktyсh [ Ср мар 21, 2007 09:45:23 ] |
Заголовок сообщения: | |
Mamonth писал(а): в AVR-ах нет команды деления.
Деление это умножение на число в степени -1. Удобно делать на Си вычисления. |
Автор: | Negor [ Сб июн 16, 2007 13:11:31 ] |
Заголовок сообщения: | CodeVision AVR в вопросах и ответах |
Начал заниматся изучением ШИМ и столкнулся вот с такой проблемой. При настройке таймера пользовался конструкциец тима TCR0A=1<<WGM00 и подобными. КодВижн выдал сообщение о неизвестности WGM00. Просмотр tinyn2313.h (девайс собран на Attony2313) показал что нет зарезервированных слов названий битов таймеров(др. названий битов там тоже нет). После пересадки из tn2313def.inc (такие же библиотекаи только с АВРСттудио) (естесствено с заменой .equ на #define) компилятор выдаёт ошибку "must be lvalue" и подсвечивает строку TCR0A=1<<WGM00. Я бы может и не сильно страдал, но в шестнадцатиричн. формате устанавливать биты в регистрах не удобно, а в двоичном формате надо выкидывать зарезервированные биты(допустим из восьми зарезервирован бит 3 и 4(отсчёт с 0), тогда установка 0b00000001 катит а при записи 0b01000001 уже нет реакции на установленный бит 6). Помогите разобратся |
Автор: | Барсик [ Сб июн 16, 2007 15:08:51 ] |
Заголовок сообщения: | Re: Вопрос по CodeVision |
Negor писал(а): ...а в двоичном формате надо выкидывать зарезервированные биты(допустим из восьми зарезервирован бит 3 и 4...
Извините, но я не въехал насчёт зарезервированных битов. В регистре TCR0A зарезервированы биты 2 и 3. Они контроллером не используются вообще, и никуда их выкидывать не надо. Вместо них можно спокойно прописывать нули. От этого контроллеру не будет ни горячо и не холодно... Ели же речь идёт о том, как изменить определённые биты в регистре, а остальные при этом не трогать, то тогда надо применять логические операции "И", если биты надо установить в "0", или "ИЛИ", если биты надо установить в "1" . Например, так: ACSR &= 0B11110111; //запретить прерывания от аналог. компаратора (устанавливаем бит 3 в "0", а остальные не трогаем) ACSR |= 0B10000000; // выключить аналог. компаратор, чтоб не жрал энергию (устанавливаем бит 7 в "1", а остальные не трогаем) Оператор &= означает, что надо считать значение из регистра, сделать с ним и указанным операндом операцию "И" и присвоить результат обратно этому регистру. Оператор |= аналогично для "ИЛИ". |
Автор: | Negor [ Сб июн 16, 2007 16:42:20 ] |
Заголовок сообщения: | |
Ну для установки битов мне нравится больше контрукция вроде TCR0A|=1<<WGM, А то что вы спрашивали(т.е. я спрашивал а вы процитировали) вобщем забил я в TCR0A что-то вроде 0b01100001 кажется так... а в отладчике установился только первый бит(Пользуюсь АВРстудио), а когда записал в шестнацатиричном всё заработало... вот так вот |
Автор: | tych [ Сб июн 16, 2007 23:05:40 ] |
Заголовок сообщения: | Re: CodeVision : Просто вопрос |
Negor писал(а): КодВижн выдал сообщение о неизвестности WGM00. Просмотр tinyn2313.h (девайс собран на Attony2313) показал что нет зарезервированных слов названий битов таймеров(др. названий битов там тоже нет).
Я просто дополнительный хидер .h сделал с названиями битов. В моем профиле линк. |
Автор: | Negor [ Сб июн 16, 2007 23:13:47 ] |
Заголовок сообщения: | Re: CodeVision : Просто вопрос |
tych писал(а): Negor писал(а): КодВижн выдал сообщение о неизвестности WGM00. Просмотр tinyn2313.h (девайс собран на Attony2313) показал что нет зарезервированных слов названий битов таймеров(др. названий битов там тоже нет). Я просто дополнительный хидер .h сделал с названиями битов. В моем профиле линк. Так я тоже делал *.h файл где забивал названия битов к их номерам. в результате получал "must be lvalue".... и самое отвратительное - нет никаких справок по ошибкам |
Автор: | tych [ Вс июн 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.
|
Автор: | Negor [ Вс июн 17, 2007 22:52:13 ] |
Заголовок сообщения: | |
Спасибо тов. tych! Единственное что меня смущает - это то, что INT0 и INT1 были переназначены(was redefined) но это я думаю говорит только о том что и в либе родной CodeVision забиты эти биты и в вашей(от вас)... но я надеюсь они не покусаются ![]() ![]() |
Страница 1 из 415 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |