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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Сообщение ValBag »

ssvd писал(а):Посмотрите пожалуйста схему, так подключил транзисторы?
Немного не так. Поменяйте коллектор и эмиттер местами. А между базами и выходами порта включите резисторы 5-10 кОм.
Балластных резисторов на каждый светодиод, тоже не вижу.
Реклама
Аватара пользователя
ssvd
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Ср ноя 04, 2009 18:00:56
Откуда: Алтайский край
Контактная информация:

Сообщение ssvd »

ValBag писал(а):
ssvd писал(а):Посмотрите пожалуйста схему, так подключил транзисторы?
Немного не так. Поменяйте коллектор и эмиттер местами. А между базами и выходами порта включите резисторы 5-10 кОм.
Балластных резисторов на каждый светодиод, тоже не вижу.
вроде бы все в порядок привел!
Вложения
pack.zip
(16.86 КБ) 237 скачиваний
Реклама
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Сообщение ValBag »

ssvd, все верно.
Аватара пользователя
ssvd
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Ср ноя 04, 2009 18:00:56
Откуда: Алтайский край
Контактная информация:

Сообщение ssvd »

ValBag писал(а):ssvd, все верно.
ух, наконец то! все понятно вроде как!
у нас уже ночь, завтра программу допишу, проверите и ее плиз )))
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ssvd
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Ср ноя 04, 2009 18:00:56
Откуда: Алтайский край
Контактная информация:

Сообщение ssvd »

ValBag писал(а):ssvd, все верно.
Вот окончательный вариант Proteus+исходник. Посмотрите пожалуйста!
Если все ok, побегу за деталями в маг ))))

А вот такой транзистор можно использовать DTC144EK SMD ?
Вложения
pack.rar
(16.5 КБ) 218 скачиваний
Реклама
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Сообщение ValBag »

ssvd писал(а):Если все ok, побегу за деталями в маг ))))
OK.
Вариант блока:
switch (cur_dig)
{
case 0:PORTD|=1;PORTB=hour; break;
case 1:PORTD|=2;PORTB=min; break;
case 2:PORTD|=4;PORTB=sec;
}
Тело оператора сase можно не ограничивать {...}.
А вот такой транзистор можно использовать DTC144EK SMD ?
Без проблем, если хватит его возможностей по току - 100 mA.
P.S. Опять там остался PORTB=0xFF;
Последний раз редактировалось ValBag Ср фев 24, 2010 09:27:15, всего редактировалось 1 раз.
Реклама
Аватара пользователя
ssvd
Нашел транзистор. Понюхал.
Сообщения: 167
Зарегистрирован: Ср ноя 04, 2009 18:00:56
Откуда: Алтайский край
Контактная информация:

Сообщение ssvd »

ValBag писал(а):
ssvd писал(а):Если все ok, побегу за деталями в маг ))))
OK.
Вариант блока:
switch (cur_dig)
{
case 0:PORTD|=1;PORTB=hour; break;
case 1:PORTD|=2;PORTB=min; break;
case 2:PORTD|=4;PORTB=sec; break;
}
Тело оператора сase можно не ограничивать {...}.
А вот такой транзистор можно использовать DTC144EK SMD ?
Без проблем, если хватит его возможностей по току - 100 mA.
P.S. Опять там остался PORTB=0xFF;
ok.
100мА должно хватить, 6 диодов по 15мА=90мА
Спасибо огромное! На неделе постараюсь собрать, отпишусь в личку, обмоем )))
Аватара пользователя
Man
Встал на лапы
Сообщения: 83
Зарегистрирован: Чт ноя 13, 2008 19:22:03

Сообщение Man »

Возник такой вопрос как в CVAVR в Atmega128 отключить JTAG чтобы мона стало использовать порт F на вывод ,а не только на ввод?.
P.S Хелп компилятора не надо отправлять читать с английским очень плохо дружу.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18559
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

во-первых, JTAG отключается фьюзами, а не компилятором.
во-вторых, если включен JTAG, соответствующие пины порта вообще нельзя использовать - ни на вывод, ни на ввод.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Man
Встал на лапы
Сообщения: 83
Зарегистрирован: Чт ноя 13, 2008 19:22:03

Сообщение Man »

Дак про фьюз понятно ,как мне CVAVR программно отключить так как он просто выдает ошибку при попытки ченить в этот порт вывести...
Аватара пользователя
Man
Встал на лапы
Сообщения: 83
Зарегистрирован: Чт ноя 13, 2008 19:22:03

Сообщение Man »

Вопрос снят :Project>Configure>After Make>Program the Chip>JTAGEN=0; теперь компилятор позволяет работать с портом F.
makser
Открыл глаза
Сообщения: 71
Зарегистрирован: Пт апр 24, 2009 11:25:34
Откуда: Rus

Сообщение makser »

Появился CodeVisionAVR V2.04.6 но лечения его в сети незамечено, может у когонить есть?
Аватара пользователя
DataLife
Вымогатель припоя
Сообщения: 601
Зарегистрирован: Пт фев 13, 2009 20:58:13
Откуда: Донецк

Сообщение DataLife »

Всем доброго времени суток и МЯУ!
Пришлось мне сюда вернуться с вопросом:

Есть нехитрая программка типа "бегущие огни", написанная на Си в CVAVR.
Такая задача: при включении огоньки должны несколько раз (4-6) повторить определённое мигание, и больше к нему не возвращаться. Можно было бы это всё несколько раз копировать до "while (1)", но хотелось бы укоротить программу. Может как-то repeat сюда впихнуть?
В программирование не силён, да и то, что знал, немного подзабыл. :dont_know:

Подскажите мне решение этой простой задачи :roll:
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18559
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

цикл for спасет DataLife
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
DataLife
Вымогатель припоя
Сообщения: 601
Зарегистрирован: Пт фев 13, 2009 20:58:13
Откуда: Донецк

Сообщение DataLife »

Спасибо за подсказку.
Немного погуглил по этому поводу, значит нужно сделать примерно так:

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

   int i;
   for (i = 0; i < 4; i++)
      цикл бегущих огней;
Так? Вроде бы цикл будет выполняться, пока i<4 то есть 4 раза (0,1,2,3)?
Я правильно понял смысл цикла for?

Добавлено:

О! Так тут и вайлом можно (while)!

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

int i = 0;
   while ( i < 4 )
     {
       цикл огней;
       i++;
     };
Так ведь? :roll:

PS.
вопрос второй: можно как-то коротко написать программку для хаотичного включения 12-ти светодиодов? Как-то не хочется придумывать какой сейчас включать, время задержки и прочее ... Может этот "велосипед" придумали до меня?
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18559
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

вы поняли правильно суть циклов. можно любым способом, но for наиболее кратко и элегантно записывается, не так ли?

что касается хаоса, то кроме использования функции генерации псевдослучайного числа rand() ничего на ум не приходит.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Сообщение ValBag »

Вопрос к ARV как к профи, ...если можно.
CodeWizard вставляет такие строки:
1. при предварительном делении частоты кварцевого генератора:

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

#pragma optsize- 
CLKPR=0x80; 
CLKPR=0x00; 
#ifdef _OPTIMIZE_SIZE_ 
#pragma optsize+ 
#endif 
и при настройке сторожевого таймера:

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

#pragma optsize- 
WDTCR=0x39; 
WDTCR=0x29; 
#ifdef _OPTIMIZE_SIZE_ 
#pragma optsize+ 
#endif
Т. е. выключается оптимизация по размеру, что-то делается..., и включается снова. А для чего это в данных случаях? Какие-то особенности компилятора? Ведь изменяются только регистры.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18559
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

некоторые вещи требуют двукратного обращения к регистру. т.е. сначала ставим один битик, а второй командой - добавляем еще один битик. запись сразу двух битиков не даст нужного эффекта.

так как компилятор при оптимизации пытается уменьшить число записей в переменную (регистр для него является переменной), то мы будем иметь эффект, когда две или более подряд идущих операции установки битов в одном и том же регистре будут заменены единственной командой, которая установит их все сразу. естественно, при этом нифига не изменится прескалер тактовой или параметры сторожевого таймера. вот для этого оптимизация и выключается. в принципе, еще бы надо и прерывания запретить перед и разрешить после этих действий, но CVAVR этого не делает, т.к. свой код инициализации вставляет в самом начале, т.е. когда прерывания и так запрещены.

имхо, это какой-то кривой способ. в WinAVR, например, все порты ввода-вывода и регистры управления периферией объявлены как volatile переменные, и поэтому обращения к ним не надо как-то по особому оформлять, все будет сделано верно при любом уровне оптимизации.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Сообщение ValBag »

ARV писал(а):...так как компилятор при оптимизации пытается уменьшить число записей в переменную...
Понятно, спасибо.
имхо, это какой-то кривой способ. в WinAVR, например, все порты ввода-вывода и регистры управления периферией объявлены как volatile переменные, и поэтому обращения к ним не надо как-то по особому оформлять, все будет сделано верно при любом уровне оптимизации.
По поводу этого мнения в WinAVR, встречал такие суждения, что как раз его методы оптимизации "достают" некоторых, и подталкивают искать "спасения" на другом компиляторе.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18559
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

в каждой палатке свои неполадки.
в данном случае речь не о методах оптимизации, а о системном подходе. CVAVR считает, что все периферийные регистры - это обычные глобальные переменные, а WinAVR уверен, что это volatile переменные. между ними большая разница! так вот, подход WinAVR мне видится гораздо более верным, ибо все эти периферийные регистры (ну не все, но многие) имеют обыкновение менять свое значение по аппаратным причинам, о чем компилятор знать не может! и в данном контексте volatile как раз и требуется. для работы с WDTCR или еще чем-то аналогичным в WinAVR нет нужды ни в каких "обрамлениях" типа pragma или чего-то еще - безошибочная работа гарантируется в режиме "по умолчанию".

всегда легче работать с инструментом, поведение которого предсказуемо и определяется какими-то общими для всех требованиями, в частности, стандартами. а когда CVAVR не делает иной раз разницы между volatile и non-volatile переменными, но в то же самое время иногда вдруг "вспоминает об этом" и начинает лепить всякие прагмы - это ни в какие рамки не укладывается.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Ответить

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