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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Sam__s
Родился
Сообщения: 15
Зарегистрирован: Ср май 26, 2010 08:37:56

Re: Различные мелкие вопросы

Сообщение Sam__s »

avreal, спасибо большое за ответ! :beer:
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Re: Различные мелкие вопросы

Сообщение AI_Disable »

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

Re: Различные мелкие вопросы

Сообщение ValBag »

Stalker46 писал(а):Attiny2313
Можно ли по нажатию на кнопку увеличивать значение таймера/счетчика, а когда нажали другую кнопку, просто декрементировать значение таймера/счетчика?
МНе надо декрементировать какой-либо регистр раз в 1 секунду. И результат дешифрировать на 7 сегм. индикатор.
Так, все таки, что нужно? Инкремент/декремент какого-то регистра, с интервалом 1 сек., пока нажата одна из кнопок?
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Re: Различные мелкие вопросы

Сообщение Arlleex »

задача такова, что надо нажимать на кнопку, при этом содержимое регистра увеличивается на 1.
Но как только нажали на другую кнопку, состояние регистра декрементируется на 1 в 1 секунду.
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: Различные мелкие вопросы

Сообщение ValBag »

Stalker46 писал(а):задача такова, что надо нажимать на кнопку, при этом содержимое регистра увеличивается на 1.
Но как только нажали на другую кнопку, состояние регистра декрементируется на 1 в 1 секунду.
Скажите задействованный номинал тактовой частоты вашего МК, затем посчитаю необходимый режим таймера.
И еще раз - изменение регистра при нажатии кнопки постоянно через 1 сек или одноразово?
Последний раз редактировалось ValBag Сб июн 05, 2010 10:13:55, всего редактировалось 1 раз.
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Re: Различные мелкие вопросы

Сообщение Arlleex »

1Мгц.
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: Различные мелкие вопросы

Сообщение Meteor »

Еще ответь что должно быть в том случае если после старта нажимаем на декремент?
Вариантов 2:
1) не считаем
2) считаем с максимального значения
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Re: Различные мелкие вопросы

Сообщение Arlleex »

Имеется 2 кнопки.
1 кнопка - это инкремент содержимого какого-либо регистра.
Нажимаем на другую кнопку, и значение содержимого этого регистра декрементируется раз в секунду.
Например.
Нажали кнопку, у нас в регистре записалось 00000001
затем еще раз нажали, уже 00000010, еще - 00000011...00000100......
и т.д......
Например, инкрементировали его до 00001000, нажали другую кнопку, и раз в сек. содержимое счетчика декрементируется.
00000111, сек. прошла, 00000110, сек. прошла, 00000101... и т.д.
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: Различные мелкие вопросы

Сообщение Meteor »

Еще раз внимательно прочитай вопрос который задал.
То что ты написал - очевидно.
А вот включили в регистре у тебя записано 00000000. Нажали декремент и?
Остается 00000000 или станет 11111111, затем 11111110 и т.д.?
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Re: Различные мелкие вопросы

Сообщение Arlleex »

остается 0x00.
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Re: Различные мелкие вопросы

Сообщение AI_Disable »

Например, для меги8, таймер1:

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

unsigned int ololo; //переменная, которую будем инкрементировать/декрементировать
int main()
{
TCCR1B|=(1<<WGM12); //Инициализация таймера и прерывания
OCR1A=15625;
TIMSK|=(1<<OCIE1A);
sei();

PORTD|=(1<<0)|(1<<1); //Врубаем подтяжку для кнопок
while(1)
{
if(!(PIND&(1<<0))) //Если первую кнопку нажали, то
   {
   while(!(PIND&(1<<0))); //ждём пока её отпустят
   ololo++; //и инкрементируем переменную
   }
if(!(PIND&(1<<1))) //Если вторую кнопку нажали, то
   {
   while(!(PIND&(1<<0))); //ждём пока её отпустят
   TCCR1B|=(1<<CS11)|(1<<CS11); //и запускаем таймер
   }
}
}

ISR(TIMER1_COMPA_vect)
{
ololo--; //раз в секунду декрементируем переменную
if(ololo==0) TCCR1B&=~((1<<CS11)|(1<<CS11));//если дошли до нуля, останавливаем таймер.
}

Код не тестировал, могу где-то ошибиться.
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Re: Различные мелкие вопросы

Сообщение Arlleex »

спасибо, как железо соберу, опробую.
Не умеешь - не берись, но не взявшись не научишься...
Арвар
Встал на лапы
Сообщения: 133
Зарегистрирован: Сб мар 27, 2010 13:57:44

Re: Различные мелкие вопросы

Сообщение Арвар »

скажите пож-та простым, доступном русским языком, в чем отличия между return(1) и return(0)? или например return(5)???
Я бы на вашем месте за докторскую диссертацию немедленно сел. - Торопиться не надо, сесть я всегда успею (с)
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: Различные мелкие вопросы

Сообщение ValBag »

Арвар писал(а):скажите пож-та простым, доступном русским языком, в чем отличия между return(1) и return(0)? или например return(5)???
Никакого, кроме величины возвращаемого значения.
Арвар
Встал на лапы
Сообщения: 133
Зарегистрирован: Сб мар 27, 2010 13:57:44

Re: Различные мелкие вопросы

Сообщение Арвар »

хорошо, величина возвращаемого значения - куда эта величина возвращается?)
Я бы на вашем месте за докторскую диссертацию немедленно сел. - Торопиться не надо, сесть я всегда успею (с)
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Re: Различные мелкие вопросы

Сообщение AI_Disable »

Туда, где вы вызываете эту функцию.
Например, функция для АЦП:

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

unsigned int adc(unsigned char chen)
{
ADMUX=chen; //Выбор канала
ADCSRA|=(1<<ADSC); //Начать АЦП.
while(ADCSRA&(1<<ADSC)); //Ждём завершения АЦП
return(ADCW); //Возвращаем результат
}

В данном случаи функция возвращает не конкретную константу, а содержимое регистра ADCW.
Вызовим эту функцию:

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

ololo=adc(1); 

Теперь в переменную "ololo" запишется результат АЦП первого канала.
(Надеюсь, вы уже работали с АЦП, иначе пример может не возыметь достаточного смысла)
Арвар
Встал на лапы
Сообщения: 133
Зарегистрирован: Сб мар 27, 2010 13:57:44

Re: Различные мелкие вопросы

Сообщение Арвар »

C АЦП не работал, но ход Ващих мыслей мне понятен=)
Я бы на вашем месте за докторскую диссертацию немедленно сел. - Торопиться не надо, сесть я всегда успею (с)
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Re:

Сообщение smac »

_noise писал(а):2б. Если передатчик был включен раньше, чем приёмник - принимается шотонето... ил
Вопрос: как по уму "2б" делается...

Паузы какой длительности? По хорошему передача должна начинаться гарантировано после того как приемник и передатчик готовы, но это идеал, зачастую недостижимый. Попробуйте сделать паузу дольше чем передается 1 байт (лучше длительностью 3,5 байта) - т. е. вам нужно допилить программу передатчика.
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: Различные мелкие вопросы

Сообщение Meteor »

_noise, тебе существенно вызывать в обработчиках подпрограммы?
Может стоит пересмотреть концепцию и выкинуть длинные\долгие вызовы?
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Аватара пользователя
Meteor
Друг Кота
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....
Контактная информация:

Re: Различные мелкие вопросы

Сообщение Meteor »

_noise, тя иной раз не понять, но это только полбеды потому как зачастую вообще не разобрать хода твоей мысли. :)))
Сам столкнулся с длинными передачами (до МБайта) со всякими потрохами и лабудой. Вот как решаю:
выделяю область ОЗУ для передачи и для приема(разные участки)
назначаю регистры Х на обслугу приемника
назначаю регистры У на обслугу передатчика.
настраиваю таймер для обработки приема, но не запускаю пока не примем преамбулу.
Задаю адреса в регистрах, а в прерыаниях только читаю данные по ним с инкрементом.
Проверки приема, кроме преамбулы, вне прерываний. Если приняли преамбулу - старт таймера.
Отработал таймер - читаем чего напринимали и контролируем то или не то.
Может я и не о том, но все же
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Ответить

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