Страница 317 из 628
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 12:04:19
просто КОТ
vitalik_1984 писал(а):в регистре таймера и сохраняет.
TCRx, TCRLx TCRHx.
Топишь включил таймер, он своё отработал, потом пишем, что если TCRх больше указанного числа, то . . .
Понятно -- дошло. Спасибо!
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 19:30:11
vitalik_1984
вот вот,выбираем в источнике тактирования канал Тх.
и ниспадающий или восходящий импульс.и готово
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 19:34:36
просто КОТ
А как задать условие, что если TCNT0 больше 5 но меньше 30?! Так что ли?!
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 19:38:18
uldemir
так нельзя потому что первое сравнение даст тип boolean а второе скажет, что этот тип с целым сравнивать не умею. или нет... но всё равно так нельзя. Це не матиматика, а программирование. if (a<10 && a>5)
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 19:40:12
просто КОТ
Под а имеется в виду мой регистр?!
&& или один & ?!
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 19:42:58
uldemir
ну типа да. Только смотрите один момент - он будет читаться дважды. поэтому, чтобы не было такой ситуации что при первом чтении прочитается одно значение, а прри втором уже другое, лучше прочитать один раз, сохранить в переменной и уже дальше делать сравнения.
& - побитное И
&& - логическое И
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 19:45:36
просто КОТ
И ещё одно:
Есть ли разница между Power-down и Sleep Enable?!
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 19:52:59
просто КОТ
Кстати, если MCUCR=0b00100010 заставит микр уснуть, то MCUCR=0b00000010 его разбудит?!
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 20:06:05
vitalik_1984
нет это будет некому выставить.он сам просыпается от прерывания в зависимости от того какой режим,их может быть больше или меньше.все описано в даташите.можно оставить таймеры работать,остальное спать или все спать а ацп работает.при самом экономном режиме работает только одно прерывание - низкий уровень вроде инт0.
есть специальная команда для входа в режим -sleep как бы это не было странным.

если при входе в режим сна работает память еепром, то она может не остановиться при том,что все остальное спит.поэтому нужно убедиться,что запись в еепром завершена прежде чем ходить в режим сна.вот так.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 20:25:16
просто КОТ
Прям SLEEP и писать?!
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 20:52:09
vitalik_1984
команда асм,соответственно употреблению асм в вашем компиляторе
КВ
AVR Studio вроде
асм
типа того посмотреть точно негде я с телефона.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 20:57:10
hybroid
vitalik_1984 писал(а):AVR Studio вроде
Угу. А если подробнее - GCC. аврстудия - это IDE.

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 21:09:38
vitalik_1984
я про то что вроде так,а не про то что вроде авр студия.
все равно студия изначально привязана к ГЦЦ, так что я не сильное упущение сделал.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 21:40:39
FreshMan
вопрос относительно аппаратной реализации ШИМ
вот пример, он взят отсюда
http://avrlab.com/node/90#comment-1788
Код: Выделить всё
#include <avr/io.h>//библиотека ввода/вывода
//Програма задержки
void pause (unsigned int a)
{
unsigned int i;
for (i=a;i>0;i--);
}
//Програма инициализации ШИМ
void init_pwm (void)
{
TCCR1A=(1<<COM1A1)|(1<<WGM10); //На выводе OC1A единица, когда OCR1A==TCNT1, восьмибитный ШИМ
TCCR1B=(1<<CS10); //Делитель= /1
OCR1A=0x00; //Начальная яркость нулевая
}
//Основная програма
int main(void)
{
unsigned char i;
DDRB=0x02; //Инициализация PB1 (OC1A) как выход
init_pwm();
while (1)
{
for (i=0;i<255;i++) //Плавно повышаем яркость
{
OCR1A++;
pause(1000);
}
for (i=0;i<255;i++) //Плавно понижаем яркость
{
OCR1A--;
pause(1000);
}
}
return 1;
}
я не могу никак взять в толк почему главная функция все время возвращает единицу и что этим добиваются ?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 22:04:29
hybroid
Стандарты программирования. Программы должны возвращать чего-то. От чего-то зависит, как программа завершилась, с ошибкой или нет.. В мире МК на это забиваем, в принципе, т.к. некому возвращать. В данном случае причина такая:
int видишь? Соответственно, если ты в main не затолкаешь return чего_то_похожее_на_int, то тебя компилятор выматерит, т.к. объявил ты ф-ю, которая возвращает int.
Напиши так:
Этим ты избавишься от необходимости return в теле ф-ии.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 22:13:20
FreshMan
усек....
но я по началу думал что сюда значение возвращается
Код: Выделить всё
void pause (unsigned int a)
{
unsigned int i;
for (i=a;i>0;i--);
}
теперь не пойму как этот кусок кода работает

Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 22:25:46
hybroid
Они возвращаются туда, откуда вызывают. В случае настольного софта - возвращаться будет вообще ядру, т.к. при копании вглубь - оно и вызывает.
Здесь просто МК загружается и начинает выполнять (или загрузчик запускает твою прошивку, не суть важно). Возвращать особо некуда.
Вот в случае вызова тобой других функций это важнее

Например, твой кусок с pause. От него не требуется возвращения каких-то данных, просто нужно подождать. Поэтому он void pause. Если бы это была какая-то ф-я по сложению двух переменных, например, то было бы так:
Вызывалась бы уже таким образом (где-то внутри main или внутри другой ф-ии):
В случае твоего void pause тебе нужно просто чем-то загрузить проц, чтобы подождать. Загружаем мы его циклом, который ничего не делает, просто тикает. Т.е. твоя строка for (i=a;i>0;i--); занимается ничегонеделанием, пока переданное функции a (в скобках которое), присваеваемое i, будет уменьшаться и не станет равно нулю.
Вместо такой хрени в сишных либах AVR GCC есть _delay_us(), _delay_ms(), доступные при подключении utils/delay.h.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 22:37:17
FreshMan
усек....
а сколько в мс или мкс ставить задкржку ?
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 22:55:32
hybroid
Ну в случае твоего pause задержка будет в первую очередь в "попугаях". Надо смотреть, во что компилятор превратил эту ф-ю и сколько тиков проца займёт один "попугай", переданный в скобке. Потом в зависимости от частоты посчитать число нужных попугаев для требуемого времени задержки.
На практике, если используем GCC в качестве компилятора, то делаем #include <utils/delay.h> и используем _delay_us(число_мкс) или _delay_ms(число_мс). Так же требуется указать частоту, на которой у тебя работает мк в виде #F_CPU (тут частота).
Подробнее - тут
http://www.nongnu.org/avr-libc/user-man ... delay.html
Для всяких прочих CodeVision и IAR явно есть что-то подобное, я просто ими не пользовался.
Re: Мелкие вопросы по МК и ПЛИС.
Добавлено: Вс май 13, 2012 23:20:47
vitalik_1984
Я в студии ничего не возвращаю и нормально работает, более того, даже не ругается.