Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 20141
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

Вообще говоря, так же можно использовать 8-ми битные регистры данных/адреса неиспользуемой периферии... А то и просто некоторые отдельные биты младших 32-х РВВ.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

Люди, возможно задам ОЧЕНЬ тупой вопрос, но почему то не могу найти на него ответ. Есть МК. В нём создаём прерывание и включаем таймер/счётчик. Он считает импульсы на такой то ноге МК. Вопрос -- куда он сохраняет данные и как их посмотреть?!

В даташите нашёл следующее:
General Timer/Counter Control Register писал(а):In this mode, the value that is written to the PSR10 bit is kept
Но что есть это ПиСиРэ10 и как это использовать я понял слабо. В шите ему посвящено всего 2 предложения. . .
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

в регистре таймера и сохраняет.
в General Timer/Counter Register

TCRx, TCRLx TCRHx.

а то что вы привели это регистр контроля таймера.

в режиме таймера TCRx++ происходит каждый тик таймера.
в режиме счетчика при каждом изменении состояния на ногах Т0,Т1,Т2
В поисках истины человек развивается.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

Gudd-Head писал(а):Эти три РВВОН просто три свободных байта в области регистров ввода-вывода, и могут использоваться как 32 регистра общего назначения
спасибо за просвещение :beer:
но у меня сразу возникают закономерные вопросы:
по каким адресам находятся данные регистры ?
почему их не сделали обычными РВВ и в таком случае их было бы не 64 а 67.
почему эти регистры не "прилепили" к обычнвм РОН ? и в таком случае адресное пространство для РВВ начиналось бы не из 0х0020 а немножко выше.
Tell Me The Truth
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

vitalik_1984 писал(а):в регистре таймера и сохраняет.
TCRx, TCRLx TCRHx.
Топишь включил таймер, он своё отработал, потом пишем, что если TCRх больше указанного числа, то . . .

Понятно -- дошло. Спасибо!
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

вот вот,выбираем в источнике тактирования канал Тх.
и ниспадающий или восходящий импульс.и готово
В поисках истины человек развивается.
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

А как задать условие, что если TCNT0 больше 5 но меньше 30?! Так что ли?!

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

if (10>TCNT0>5)
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7391
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

так нельзя потому что первое сравнение даст тип boolean а второе скажет, что этот тип с целым сравнивать не умею. или нет... но всё равно так нельзя. Це не матиматика, а программирование. if (a<10 && a>5)
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

Под а имеется в виду мой регистр?!

&& или один & ?!
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7391
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

ну типа да. Только смотрите один момент - он будет читаться дважды. поэтому, чтобы не было такой ситуации что при первом чтении прочитается одно значение, а прри втором уже другое, лучше прочитать один раз, сохранить в переменной и уже дальше делать сравнения.
& - побитное И
&& - логическое И
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

И ещё одно:
Есть ли разница между Power-down и Sleep Enable?!
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

Кстати, если MCUCR=0b00100010 заставит микр уснуть, то MCUCR=0b00000010 его разбудит?!
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

нет это будет некому выставить.он сам просыпается от прерывания в зависимости от того какой режим,их может быть больше или меньше.все описано в даташите.можно оставить таймеры работать,остальное спать или все спать а ацп работает.при самом экономном режиме работает только одно прерывание - низкий уровень вроде инт0.
есть специальная команда для входа в режим -sleep как бы это не было странным. :))
если при входе в режим сна работает память еепром, то она может не остановиться при том,что все остальное спит.поэтому нужно убедиться,что запись в еепром завершена прежде чем ходить в режим сна.вот так.
В поисках истины человек развивается.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ

Сообщение просто КОТ »

Прям SLEEP и писать?!
Изображение
И ты врёшь!!! © Vladisman
Изображение
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

команда асм,соответственно употреблению асм в вашем компиляторе

КВ

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

#asm ("sleep");
 
AVR Studio вроде

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

asm volatile ("sleep"); 
асм типа того посмотреть точно негде я с телефона.
В поисках истины человек развивается.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Сообщение hybroid »

vitalik_1984 писал(а):AVR Studio вроде
Угу. А если подробнее - GCC. аврстудия - это IDE. :wink:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

я про то что вроде так,а не про то что вроде авр студия.
все равно студия изначально привязана к ГЦЦ, так что я не сильное упущение сделал.
В поисках истины человек развивается.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение 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;
}
я не могу никак взять в толк почему главная функция все время возвращает единицу и что этим добиваются ?
Tell Me The Truth
Друг Кота
Аватара пользователя
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Сообщение hybroid »

Стандарты программирования. Программы должны возвращать чего-то. От чего-то зависит, как программа завершилась, с ошибкой или нет.. В мире МК на это забиваем, в принципе, т.к. некому возвращать. В данном случае причина такая:

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

int main(void)
int видишь? Соответственно, если ты в main не затолкаешь return чего_то_похожее_на_int, то тебя компилятор выматерит, т.к. объявил ты ф-ю, которая возвращает int.

Напиши так:

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

void main(void)
Этим ты избавишься от необходимости return в теле ф-ии.
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

усек....
но я по началу думал что сюда значение возвращается

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

void pause (unsigned int a)
{ 
unsigned int i;
for (i=a;i>0;i--);
}
теперь не пойму как этот кусок кода работает :dont_know:
Tell Me The Truth
Ответить

Вернуться в «Разные вопросы по МК»