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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Как-как, поразрядно... :)) Ну да, фигня, конечно, будет. Хотя зависит от требуемого формата вывода.
Где-то я это делал, надо посмотреть старые исходники.. :roll:
itoa(), думаю, пойдет
Оптимизм х (Опыт + Знания) = const
intel4ever
Родился
Сообщения: 14
Зарегистрирован: Вс апр 01, 2007 10:50:14
Откуда: Кишинёв (Молдова)
Контактная информация:

Сообщение intel4ever »

Может я ошибаюсь, но itoa не пойдет так как работает с перменными типа char *str :
void itoa(int n, char *str)
converts the integer n to characters in string str.
А функция lcd_putsf работает с char flash *str
void lcd_putsf(char flash *str)
displays at the current display position the string str, located in FLASH.

для того, чтоб выводит integer переменные я написал функцию, которая разбивает число на разряды, далее цикл, в котором кейсом определяется что за цифра стоит в разрде, и потом вывожу это цифру. Но такой вариант -- это совсем не серьёзно. Уверен, что есть что-то более удобное.
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

intel4ever писал(а):Уверен, что есть что-то более удобное.


Да. назвается itoa
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
intel4ever
Родился
Сообщения: 14
Зарегистрирован: Вс апр 01, 2007 10:50:14
Откуда: Кишинёв (Молдова)
Контактная информация:

Сообщение intel4ever »

tych писал(а):
intel4ever писал(а):Уверен, что есть что-то более удобное.


Да. назвается itoa

если можете, пожалуйста, примерчик, хотябы пару строк...
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

в адресной строке браузера вбейте itoa и нажмите "ВВОД"

в первых результатах поиска будут ПРИМЕРЫ НА РУССКОМ языке !

http://ru.wikipedia.org/wiki/Itoa

Затем можно погуглить: itoa cvavr

3-й результат поиска приведет вас на 10 страницу ЭТОГО топика !!! пост 3.

========
А вот НАШЕЛСЯ рабочий проект с ftoa() в CVAVR
http://www.roboforum.ru/viewtopic.php?f=2&t=2789
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Alex870
Родился
Сообщения: 3
Зарегистрирован: Вт июн 17, 2008 21:48:51

Проблема с WatchDog на ATmega128. Помогите пожалуйста!

Сообщение Alex870 »

Здравствуйте!
У меня такая проблема, не могу победить watchdog на atmega128 (CodeVision 1.25.9).Написал программу - не работает, начал ковырять, свел до минимума. Код элементарный - инициализируется UART0, далее в wihile(1) пишу
putchar(i);
i = getchar();
и все. "собака" сбрасывает программу во время ожидания байта с UART'a.
VMLab тоже предупреждает, что останавливать WDR нужно до его запуска, подскажите пожалуйста как это правильно сделать в CodeVision'e.
Даташит читал, только запись в регистры ничего не дает, даже принудительная остановка (типа WDTCR = 0x55) не действует в железе. Биты установлены в соответствии с уровнем защиты 0.
Первый раз у меня такое! Столько AVR'ов прошил, а вот со 128-ой первый раз столкнулся и не могу победить.
Зарание спасибо!.
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Re: Проблема с WatchDog на ATmega128. Помогите пожалуйста!

Сообщение tych »

Alex870 писал(а):Даташит читал, только запись в регистры ничего не дает, даже принудительная остановка (типа WDTCR = 0x55) не действует в железе.


Там хитрая последовательность выключения чтоб случайно не выключился - см. на стр. 2 в русском даташите на мегу128 под кнопкой Изображение ниже.

Или АСМ последовательность для выключения WDT в задаче 11.

И проверь фьюз совместимости с мега103 - в даташите
"Table 21. WDT Configuration as a Function of the Fuse Settings of M103C and WDTON."
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Alex870
Родился
Сообщения: 3
Зарегистрирован: Вт июн 17, 2008 21:48:51

Сообщение Alex870 »

Спасибо за ответ!
Я сразу в подробности вдаваться не стал, а зря наверное. Да, в даташите даже код на Си есть и описано как сбрасывать WDTCR, вот только в каком месте программы это нужно делать? Глупая конечно формулировка, но стандартный WatchDog срабатывает примерно за 14 мс при такте 8МГц. VMLab пишет Watchdog Reset (WDR) must always be executed before the Watchdog Timer is enabled. если прграмма написана в cvavr. Я пробовал переписать тоже на ICC там такой проблемы нет, т.е. если не включил Watchdog - значит он выключен, но ICC я использовать не могу(не хочу) по ряду причин (веских). Так вот, когда я создал с помощбю мастера новый проект я не вижу там отключение WDTCR ни в cvavr ни в ICC, однако коды ведут себя по разному. Я пробовал вставлять отключение (как в даташите) даже перед инициализацией устройств - результат 0.
И фьюзы проверил (они кстати по умолчанию стоят)...
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Alex870 писал(а):VMLab пишет Watchdog Reset (WDR) must always be executed before the Watchdog Timer is enabled.


Вначале сброс - АСМ команда wdt
затем выключение или включение

так и в исходниках в даташите.

Вы можете посмотреть АСМ листинг того что делает компилятор - файл .lst

Alex870 писал(а):И фьюзы проверил (они кстати по умолчанию стоят)...


Я и пишу проверьте не включена ли совместисость с мегой103 - может в этом дело.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Alex870
Родился
Сообщения: 3
Зарегистрирован: Вт июн 17, 2008 21:48:51

Сообщение Alex870 »

Я и пишу проверьте не включена ли совместисость с мегой103 - может в этом дело.

Спасибо огромное!!!!! Именно в этом и было дело, а я на watchdog грешил. Ну фьюзы проверил - "собака" выключена, а на счет совместимости не подумал, что это может влиять.
Еще раз спасибо (девайс работает!)
KDAlex
Открыл глаза
Сообщения: 58
Зарегистрирован: Сб июн 14, 2008 12:00:32

Сообщение KDAlex »

Как можно объединить отдельные пины порта в "маленький" порт?
Всмысле, к примеру, биты 0, 1, 2, 3 порта B объедиить в порт DATA; чтобы можно было работать с DATA как с портом ввода\вывода, не затрагивая остальную часть порта B.
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Наверно через #define макрос хитрый написать. Или через функции обычые работать.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
KDAlex
Открыл глаза
Сообщения: 58
Зарегистрирован: Сб июн 14, 2008 12:00:32

Сообщение KDAlex »

tych писал(а):Наверно через #define макрос хитрый написать. Или через функции обычые работать.

про #define, дак конечно через него, только в каком направлении копать?; Можно бы было объекты стряпать на C, было бы проще, а так ума не приложу... :)
А про "обычные функции" - не понял. Всмысле? использовать порт целиком?
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

KDAlex писал(а):А про "обычные функции" - не понял. Всмысле? использовать порт целиком?


Битовые операции позволяют не затронуть не нужные биты порта.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Например, установка битов 0..3 порта В:

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

PORTB |= 0b00001111;


обнуление битов:

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

PORTB &= 0b11110000;


Думаю, как скомбинировать догадаетесь сами.

Если совсем хочется работать как с портом, то можно использовать функции.
Например, чтение их первых четырех битов порта В в переменную:

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

unsigned char read_data (void)
    {
    unsigned char data;
    data = (PINB & 0b00001111);
    return data;
    }


Запись в эти биты:

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

void write_data (unsigned char data)
    {
    PORTB |= (data & 0b00001111);
    }


Поправьте, если напутал где-то... :roll:
Оптимизм х (Опыт + Знания) = const
garikbaza
Родился
Сообщения: 11
Зарегистрирован: Пн янв 14, 2008 19:55:24
Откуда: Ua

Re: Проблема с WatchDog на ATmega128. Помогите пожалуйста!

Сообщение garikbaza »

Alex870 писал(а):Здравствуйте!
У меня такая проблема, не могу победить watchdog на atmega128 (CodeVision 1.25.9).Написал программу - не работает, начал ковырять, свел до минимума. Код элементарный - инициализируется UART0, далее в wihile(1) пишу
putchar(i);
i = getchar();
и все. "собака" сбрасывает программу во время ожидания байта с UART'a.
VMLab тоже предупреждает, что останавливать WDR нужно до его запуска, подскажите пожалуйста как это правильно сделать в CodeVision'e.
Даташит читал, только запись в регистры ничего не дает, даже принудительная остановка (типа WDTCR = 0x55) не действует в железе. Биты установлены в соответствии с уровнем защиты 0.
Первый раз у меня такое! Столько AVR'ов прошил, а вот со 128-ой первый раз столкнулся и не могу победить.
Зарание спасибо!.



в функции гетчар поставь #asm("wdr") после цикла while()
while(xxxxxxxx) #asm("wdr");
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Aheir писал(а):Если совсем хочется работать как с портом, то можно использовать функции. Например, чтение их первых четырех битов порта В в переменную:

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

unsigned char read_data (void)
    {
    unsigned char data;
    data = (PINB & 0b00001111);
    return data;
    }



Да можно и просто писать
data = PINB ;
это ни как на порт не повлияет.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Конечно не влияет :)
У битовой маски здесь, по моей мысли, другая задача: обнулить старшие биты у считанного байта, чтобы при обработке знать, что они всегда нули. Если это не требуется, можно не использовать.
Оптимизм х (Опыт + Знания) = const
Аватара пользователя
megasvintus
Вымогатель припоя
Сообщения: 568
Зарегистрирован: Вт мар 04, 2008 20:03:03
Откуда: Нижний Новгород

Сообщение megasvintus »

Пардон, ели это вопрос уже был где-то озвучен, (искать на него ответ равно как и иголку в стоге сена)

В CodeVisionAVR установленая галка на FUSE это запрограммированный (уст.0) бит, или нет(уст.1)??? И почему в окошке нет того же SPIEN ???
Трудно быть деревянным, совсем трудно....
igor727
Родился
Сообщения: 18
Зарегистрирован: Сб июл 05, 2008 13:21:59

Сообщение igor727 »

Подскажите кто знает, какие регистры (R0-R32) не используются компилятором CVAVR, т.е. какие из них можно использовать в ассемблерных вставках. И можно ли изменить настройки компилятора чтобы, поменять количество регистров используемых им.
Ответить

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