Мелкие вопросы по МК и ПЛИС.
Вообще говоря, так же можно использовать 8-ми битные регистры данных/адреса неиспользуемой периферии... А то и просто некоторые отдельные биты младших 32-х РВВ.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Реклама
Люди, возможно задам ОЧЕНЬ тупой вопрос, но почему то не могу найти на него ответ. Есть МК. В нём создаём прерывание и включаем таймер/счётчик. Он считает импульсы на такой то ноге МК. Вопрос -- куда он сохраняет данные и как их посмотреть?!
В даташите нашёл следующее:
В даташите нашёл следующее:
Но что есть это ПиСиРэ10 и как это использовать я понял слабо. В шите ему посвящено всего 2 предложения. . .General Timer/Counter Control Register писал(а):In this mode, the value that is written to the PSR10 bit is kept
в регистре таймера и сохраняет.
в General Timer/Counter Register
TCRx, TCRLx TCRHx.
а то что вы привели это регистр контроля таймера.
в режиме таймера TCRx++ происходит каждый тик таймера.
в режиме счетчика при каждом изменении состояния на ногах Т0,Т1,Т2
в General Timer/Counter Register
TCRx, TCRLx TCRHx.
а то что вы привели это регистр контроля таймера.
в режиме таймера TCRx++ происходит каждый тик таймера.
в режиме счетчика при каждом изменении состояния на ногах Т0,Т1,Т2
В поисках истины человек развивается.
спасибо за просвещениеGudd-Head писал(а):Эти три РВВОН просто три свободных байта в области регистров ввода-вывода, и могут использоваться как 32 регистра общего назначения
но у меня сразу возникают закономерные вопросы:
по каким адресам находятся данные регистры ?
почему их не сделали обычными РВВ и в таком случае их было бы не 64 а 67.
почему эти регистры не "прилепили" к обычнвм РОН ? и в таком случае адресное пространство для РВВ начиналось бы не из 0х0020 а немножко выше.
Tell Me The Truth
Топишь включил таймер, он своё отработал, потом пишем, что если TCRх больше указанного числа, то . . .vitalik_1984 писал(а):в регистре таймера и сохраняет.
TCRx, TCRLx TCRHx.
Понятно -- дошло. Спасибо!
- Реклама
вот вот,выбираем в источнике тактирования канал Тх.
и ниспадающий или восходящий импульс.и готово
и ниспадающий или восходящий импульс.и готово
В поисках истины человек развивается.
А как задать условие, что если TCNT0 больше 5 но меньше 30?! Так что ли?!
Код: Выделить всё
if (10>TCNT0>5)так нельзя потому что первое сравнение даст тип boolean а второе скажет, что этот тип с целым сравнивать не умею. или нет... но всё равно так нельзя. Це не матиматика, а программирование. if (a<10 && a>5)
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Под а имеется в виду мой регистр?!
&& или один & ?!
&& или один & ?!
ну типа да. Только смотрите один момент - он будет читаться дважды. поэтому, чтобы не было такой ситуации что при первом чтении прочитается одно значение, а прри втором уже другое, лучше прочитать один раз, сохранить в переменной и уже дальше делать сравнения.
& - побитное И
&& - логическое И
& - побитное И
&& - логическое И
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
И ещё одно:
Есть ли разница между Power-down и Sleep Enable?!
Есть ли разница между Power-down и Sleep Enable?!
Кстати, если MCUCR=0b00100010 заставит микр уснуть, то MCUCR=0b00000010 его разбудит?!
нет это будет некому выставить.он сам просыпается от прерывания в зависимости от того какой режим,их может быть больше или меньше.все описано в даташите.можно оставить таймеры работать,остальное спать или все спать а ацп работает.при самом экономном режиме работает только одно прерывание - низкий уровень вроде инт0.
есть специальная команда для входа в режим -sleep как бы это не было странным.
если при входе в режим сна работает память еепром, то она может не остановиться при том,что все остальное спит.поэтому нужно убедиться,что запись в еепром завершена прежде чем ходить в режим сна.вот так.
есть специальная команда для входа в режим -sleep как бы это не было странным.
если при входе в режим сна работает память еепром, то она может не остановиться при том,что все остальное спит.поэтому нужно убедиться,что запись в еепром завершена прежде чем ходить в режим сна.вот так.
В поисках истины человек развивается.
Прям SLEEP и писать?!
команда асм,соответственно употреблению асм в вашем компиляторе
КВ
AVR Studio вроде
асм
типа того посмотреть точно негде я с телефона.
КВ
Код: Выделить всё
#asm ("sleep");
Код: Выделить всё
asm volatile ("sleep"); Код: Выделить всё
sleepВ поисках истины человек развивается.
Угу. А если подробнее - GCC. аврстудия - это IDE.vitalik_1984 писал(а):AVR Studio вроде
я про то что вроде так,а не про то что вроде авр студия.
все равно студия изначально привязана к ГЦЦ, так что я не сильное упущение сделал.
все равно студия изначально привязана к ГЦЦ, так что я не сильное упущение сделал.
В поисках истины человек развивается.
вопрос относительно аппаратной реализации ШИМ
вот пример, он взят отсюда http://avrlab.com/node/90#comment-1788
я не могу никак взять в толк почему главная функция все время возвращает единицу и что этим добиваются ?
вот пример, он взят отсюда 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;
}Tell Me The Truth
Стандарты программирования. Программы должны возвращать чего-то. От чего-то зависит, как программа завершилась, с ошибкой или нет.. В мире МК на это забиваем, в принципе, т.к. некому возвращать. В данном случае причина такая:
int видишь? Соответственно, если ты в main не затолкаешь return чего_то_похожее_на_int, то тебя компилятор выматерит, т.к. объявил ты ф-ю, которая возвращает int.
Напиши так:Этим ты избавишься от необходимости return в теле ф-ии.
Код: Выделить всё
int main(void)Напиши так:
Код: Выделить всё
void main(void)усек....
но я по началу думал что сюда значение возвращается
теперь не пойму как этот кусок кода работает 
но я по началу думал что сюда значение возвращается
Код: Выделить всё
void pause (unsigned int a)
{
unsigned int i;
for (i=a;i>0;i--);
}Tell Me The Truth




