Страница 12 из 421
Добавлено: Ср июн 11, 2008 18:08:47
Aheir
Как-как, поразрядно...

Ну да, фигня, конечно, будет. Хотя зависит от требуемого формата вывода.
Где-то я это делал, надо посмотреть старые исходники..
itoa(), думаю, пойдет
Добавлено: Чт июн 12, 2008 10:37:22
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 переменные я написал функцию, которая разбивает число на разряды, далее цикл, в котором кейсом определяется что за цифра стоит в разрде, и потом вывожу это цифру. Но такой вариант -- это совсем не серьёзно. Уверен, что есть что-то более удобное.
Добавлено: Чт июн 12, 2008 11:26:50
tych
intel4ever писал(а):Уверен, что есть что-то более удобное.
Да. назвается itoa
Добавлено: Чт июн 12, 2008 11:31:22
intel4ever
tych писал(а):intel4ever писал(а):Уверен, что есть что-то более удобное.
Да. назвается itoa
если можете, пожалуйста, примерчик, хотябы пару строк...
Добавлено: Чт июн 12, 2008 11:51:48
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
Проблема с WatchDog на ATmega128. Помогите пожалуйста!
Добавлено: Вт июн 17, 2008 21:57:57
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-ой первый раз столкнулся и не могу победить.
Зарание спасибо!.
Re: Проблема с WatchDog на ATmega128. Помогите пожалуйста!
Добавлено: Вт июн 17, 2008 22:35:17
tych
Alex870 писал(а):Даташит читал, только запись в регистры ничего не дает, даже принудительная остановка (типа WDTCR = 0x55) не действует в железе.
Там хитрая последовательность выключения чтоб случайно не выключился - см. на стр. 2 в русском даташите на мегу128 под кнопкой

ниже.
Или АСМ последовательность для выключения WDT в задаче 11.
И проверь фьюз совместимости с мега103 - в даташите
"Table 21. WDT Configuration as a Function of the Fuse Settings of M103C and WDTON."
Добавлено: Вт июн 17, 2008 23:24:46
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.
И фьюзы проверил (они кстати по умолчанию стоят)...
Добавлено: Ср июн 18, 2008 07:18:51
tych
Alex870 писал(а):VMLab пишет Watchdog Reset (WDR) must always be executed before the Watchdog Timer is enabled.
Вначале сброс - АСМ команда wdt
затем выключение или включение
так и в исходниках в даташите.
Вы можете посмотреть АСМ листинг того что делает компилятор - файл .lst
Alex870 писал(а):И фьюзы проверил (они кстати по умолчанию стоят)...
Я и пишу проверьте не включена ли совместисость с мегой103 - может в этом дело.
Добавлено: Чт июн 19, 2008 02:19:14
Alex870
Я и пишу проверьте не включена ли совместисость с мегой103 - может в этом дело.
Спасибо огромное!!!!! Именно в этом и было дело, а я на watchdog грешил. Ну фьюзы проверил - "собака" выключена, а на счет совместимости не подумал, что это может влиять.
Еще раз спасибо (девайс работает!)
Добавлено: Пт июн 20, 2008 16:08:14
KDAlex
Как можно объединить отдельные пины порта в "маленький" порт?
Всмысле, к примеру, биты 0, 1, 2, 3 порта B объедиить в порт DATA; чтобы можно было работать с DATA как с портом ввода\вывода, не затрагивая остальную часть порта B.
Добавлено: Пт июн 20, 2008 16:27:58
tych
Наверно через #define макрос хитрый написать. Или через функции обычые работать.
Добавлено: Пт июн 20, 2008 16:40:59
KDAlex
tych писал(а):Наверно через #define макрос хитрый написать. Или через функции обычые работать.
про #define, дак конечно через него, только в каком направлении копать?; Можно бы было объекты стряпать на C, было бы проще, а так ума не приложу...
А про "обычные функции" - не понял. Всмысле? использовать порт целиком?
Добавлено: Пт июн 20, 2008 19:25:33
tych
KDAlex писал(а):А про "обычные функции" - не понял. Всмысле? использовать порт целиком?
Битовые операции позволяют не затронуть не нужные биты порта.
Добавлено: Сб июн 21, 2008 23:15:59
Aheir
Например, установка битов 0..3 порта В:
обнуление битов:
Думаю, как скомбинировать догадаетесь сами.
Если совсем хочется работать как с портом, то можно использовать функции.
Например, чтение их первых четырех битов порта В в переменную:
Код: Выделить всё
unsigned char read_data (void)
{
unsigned char data;
data = (PINB & 0b00001111);
return data;
}
Запись в эти биты:
Код: Выделить всё
void write_data (unsigned char data)
{
PORTB |= (data & 0b00001111);
}
Поправьте, если напутал где-то...

Re: Проблема с WatchDog на ATmega128. Помогите пожалуйста!
Добавлено: Сб июн 28, 2008 18:37:23
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");
Добавлено: Сб июн 28, 2008 21:21:06
tych
Aheir писал(а):Если совсем хочется работать как с портом, то можно использовать функции. Например, чтение их первых четырех битов порта В в переменную:
Код: Выделить всё
unsigned char read_data (void)
{
unsigned char data;
data = (PINB & 0b00001111);
return data;
}
Да можно и просто писать
data = PINB ;
это ни как на порт не повлияет.
Добавлено: Сб июл 05, 2008 00:58:49
Aheir
Конечно не влияет

У битовой маски здесь, по моей мысли, другая задача: обнулить старшие биты у считанного байта, чтобы при обработке знать, что они всегда нули. Если это не требуется, можно не использовать.
Добавлено: Сб июл 05, 2008 13:34:05
megasvintus
Пардон, ели это вопрос уже был где-то озвучен, (искать на него ответ равно как и иголку в стоге сена)
В CodeVisionAVR установленая галка на FUSE это запрограммированный (уст.0) бит, или нет(уст.1)??? И почему в окошке нет того же SPIEN ???
Добавлено: Сб июл 05, 2008 13:46:10
igor727
Подскажите кто знает, какие регистры (R0-R32) не используются компилятором CVAVR, т.е. какие из них можно использовать в ассемблерных вставках. И можно ли изменить настройки компилятора чтобы, поменять количество регистров используемых им.