Страница 38 из 421
Добавлено: Вт апр 07, 2009 20:33:16
Yellow Tiger
Ты используешь инклуд
math.h, а в нем, насколько я помню, определяется макрофункция
min(), поэтому на переменную с тем же имененем:
компилятор и ругается, что, дескать, "
как мне с тезками разбираться"?
Больше ошибок не найдено.
Добавлено: Вт апр 07, 2009 21:10:36
sachok
Ага есть там такое ну в math.h всё понял спасибо!!!
Добавлено: Вт апр 07, 2009 21:14:56
Барсик
Нарвался на неприятность... Писал простенькую программку для ATtiny2313. Решил сэкономить время, чтобы не читать даташит и не копаться в битах. Вызвал автоматичский генератор кодов (CodeWizardAVR V1.24.8b Professional). Чтобы настроить работу с таймерами. Задал, как полагается, любимую моду CTC для обоих, и прерывание по совпадению с регистром сравнения...
Всё хорошо. Автоматичский генератор кодов сгенерировал всё "как надо", сгенерировал правильные заготовки для обработчиков прерываний. Всё хорошо, таймер 1 работает как надо, только прерывания от таймера 0 нифига нету...
Оказалось, что автоматичский генератор кодов сделал всё как надо, а вот только бит для таймера 0 в регистре маски прерываний TIMSK установить забыл... Ну, ошибся Паша Хейдак... Ну, бывает... Правда, к версии CodeWizardAVR V1.25.9 Professional, баг был пофиксен. Так что она генерит всё правильно.
Отсюда две морали:
1) доверяй, но проверяй.
2) надо вовремя обновлять версии любимых программ.
Добавлено: Чт апр 09, 2009 07:17:31
kupriyanov
Sounds писал(а):Народ кто нибудь запускал CodeVisionAVR по Vista?
Под вистой сама программа работает нормально, даже совместно с Proteus'ом, но вот программировать контроллер не получается по причине отсутствия у меня драйверов по Vista на прогррамматор AVR910_USB.
http://prottoss.com/projects/AVR910.usb ... rammer.htm
Может кто-нибудь уже решил данную проблему подскажите!!! плиз
Добавлено: Вс апр 12, 2009 12:56:43
ikarab
anco писал(а):Здравствуйте!
Создание проблемы:
1) с помощью кодевизардаАВР генерируем проект: тини2313, 8Мгц, включаем Watchdog с прескалером OSC/256k. (ресет контроллера через 2 сек)
WDTCR=0x1F;
WDTCR=0x0F;
2) подключаем библиотеку #include <delay>
3) в главном цикле пишем
#asm("wdr");
delay_ms(1);
После выполнения delay_ms(1); постоянно происходит ресет контроллера.
Как это можно побороть?
Или отключить вочдог или сбрасывать его постоянно.
Но CVAVR сам отключает вочдог по умолчанию.
Добавлено: Вс апр 12, 2009 16:20:24
anco
В общем вачдог работает в программе (настоящей) правильно пока дело не дойдет до строки с delay_ms.
В примере выше, кстати, вачдог постоянно сбрасывается, но ресет происходит, если верить Протеусу каждую милисек.
С настоящей прошивкой в камне, результат похожий на то что выдает Протеус.
Добавлено: Вс апр 12, 2009 16:29:21
kupriyanov
Попробуй поставить задержку не 1 а, скажем, 5-10 мс. Если будет все нормально, то вернешься к нужному варианту путем delay_us(1000);
Добавлено: Вс апр 12, 2009 17:38:02
ARV
протеус неверно симулирует работу WDT для микроконтроллера attiny2313 (возможно, и для любых прочих тоже - не проверял). если WDT включен, то протеус будет делать сброс каждые несколько миллисекунд независимо от того, как часто сбрасывается WDT программно
Добавлено: Вс апр 12, 2009 18:21:59
ikarab
Он вроде про реальный МК пишет и про то что в PROTEUS похоже на то что в реальном.
Добавлено: Вс апр 12, 2009 19:17:37
ARV
ikarab писал(а):Он вроде про реальный МК пишет и про то что в PROTEUS похоже на то что в реальном.
похоже - еще не доказательство. причин для зависания и сброса может быть море - и с виду будет похоже

а что протеус в данном случае лажает - это факт.
Добавлено: Вс апр 12, 2009 19:47:37
anco
Что то или я дико торможу или контроллер.
Написал 3 строчки кода, зашил его, начал эксперементировать и стал чувствовать себя еще хуже...
В прикрепленном файле, если его залить в контроллер, вачдог настроен на ресет через 1 сек. По идее портВ всегда должн быть равен 0xFF. Программа даже не должна доходить до главного цикла, но диод на портуВ моргает с постоянной периодичностью в 1 сек!

Ресета не происходит...
Помогите плз, а то уже крыша едет.
WDTON=1
PS Может проектом подобным в меня кините (заведомо рабочим), что бы или себя потестировать или контроллер.
Добавлено: Вс апр 12, 2009 20:40:57
ikarab
anco писал(а): WDTON=1
Наверно вы выключили сторожевую собаку.
Очень рекомендую почитать "
Все о прошивании AVR" - не спешно, вдумчиво! Там подробно расписано что да как,
а фьюзы ATtiny2313 на странице 8 расписаны по-русски.
http://kazus.ru/forum/topics/f_62698.html#62698
Добавлено: Пн апр 13, 2009 03:42:01
Sounds
Подскажите как добавить знак % в строку?
b=100;
sprintf(lcd, "PWD=%i", b);
с применением этого кода я получаю строку: PWD=100
Вопрос: как сформировать вот такую строку(PWD=100%)?
В зарание спасибо!!!
Добавлено: Пн апр 13, 2009 05:32:44
kupriyanov
ПРoБУЙ
sprinf(lcd,"PWD=%i\%",b);
Добавлено: Пн апр 13, 2009 06:58:57
ARV
если мне память е изменяет, надо вводить так: printf("PWM=%i%%",b); то есть задвоенный процент.
Добавлено: Пн апр 13, 2009 11:39:44
Sounds
To kupriyanov
Спасибо за ответ, но твой вариант не подошёл!
To AVR
Спасибо тебе, твой вариант оказался верным!
Добавлено: Вт апр 14, 2009 00:12:58
Sounds
эх..... у меня опять возникла проблема(не понят-ка)!
Есть ЖК модуль(MT–16S2D который состоит из 16 ячеек, каждая ячейка 5х8 пикселей) на котором надо плавно начертить горизонтальную полоску. Когда я это задумал мне эта задача показалась просто(не сложной), но когда начал делать понял что тут без литра, или без вашей помощи сложно будет.
Вот код, помогите доработать его:
Код: Выделить всё
typedef unsigned char byte;
int g;
flash byte char0[8]={
0b000000000,
0b000000000,
0b000000000,
0b000010000,
0b000000000,
0b000000000,
0b000000000,
0b000000000
};
void define_char(byte flash *pc,byte char_code)
{
byte i,a;
a=(char_code<<3) | 0x40;
for (i=0; i<8; i++) lcd_write_byte(a++,*pc++);
}
void main(void)
{
lcd_init(16);
define_char(char0,2);
lcd_gotoxy(3,1);
for (g=0; g<10; g++){
delay_ms(500);
lcd_putchar(2);
}
}
Как мне реализовать плавное заполнение ячейки?
То есть что-бы с каждым шагом цикла добавляла на 1 пиксиль!
Добавлено: Вт апр 14, 2009 09:36:39
Yellow Tiger
Это же не графический дисплей, а потому придется извращаться:
1. определить 6 своих символов, в которых та самая горизонтальная линия занимает - 0,1,2,3,4 и 5 пикселей, соответственно.
2.вывести в первую позицию строки первый из этих шести символ, дать задержку - вывести второй, так продолжить до шестого,
3.повторить п.2. для второй позиции строки
4.аналогично пп.2-3 заполнить все позиции строки.
Добавлено: Вт апр 14, 2009 10:51:22
Sounds
Впринцепи я так и думал, но я хотел генирацию символа сделать через масив и цкл! Тут главное придумать алгоритм генерации символа.
Добавлено: Вт апр 14, 2009 11:53:10
Yellow Tiger
Что-то я не пойму... Эти символы -
константы, то есть, во время работы
не меняются, так нафига же их генерировать каким-то алгоритмом?
