
Мелкие вопросы по МК и ПЛИС.
Re: Различные мелкие вопросы
avreal, спасибо большое за ответ! 

- AI_Disable
- Сверлит текстолит когтями
- Сообщения: 1116
- Зарегистрирован: Чт окт 15, 2009 14:16:18
- Откуда: Екб
- Контактная информация:
Re: Различные мелкие вопросы
Stalker46, почитайте про режим CTC таймера в даташите.
Re: Различные мелкие вопросы
Stalker46 писал(а):Attiny2313
Можно ли по нажатию на кнопку увеличивать значение таймера/счетчика, а когда нажали другую кнопку, просто декрементировать значение таймера/счетчика?
Так, все таки, что нужно? Инкремент/декремент какого-то регистра, с интервалом 1 сек., пока нажата одна из кнопок?МНе надо декрементировать какой-либо регистр раз в 1 секунду. И результат дешифрировать на 7 сегм. индикатор.
Re: Различные мелкие вопросы
задача такова, что надо нажимать на кнопку, при этом содержимое регистра увеличивается на 1.
Но как только нажали на другую кнопку, состояние регистра декрементируется на 1 в 1 секунду.
Но как только нажали на другую кнопку, состояние регистра декрементируется на 1 в 1 секунду.
Не умеешь - не берись, но не взявшись не научишься...
Re: Различные мелкие вопросы
Скажите задействованный номинал тактовой частоты вашего МК, затем посчитаю необходимый режим таймера.Stalker46 писал(а):задача такова, что надо нажимать на кнопку, при этом содержимое регистра увеличивается на 1.
Но как только нажали на другую кнопку, состояние регистра декрементируется на 1 в 1 секунду.
И еще раз - изменение регистра при нажатии кнопки постоянно через 1 сек или одноразово?
Последний раз редактировалось ValBag Сб июн 05, 2010 10:13:55, всего редактировалось 1 раз.
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: Различные мелкие вопросы
Еще ответь что должно быть в том случае если после старта нажимаем на декремент?
Вариантов 2:
1) не считаем
2) считаем с максимального значения
Вариантов 2:
1) не считаем
2) считаем с максимального значения
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Re: Различные мелкие вопросы
Имеется 2 кнопки.
1 кнопка - это инкремент содержимого какого-либо регистра.
Нажимаем на другую кнопку, и значение содержимого этого регистра декрементируется раз в секунду.
Например.
Нажали кнопку, у нас в регистре записалось 00000001
затем еще раз нажали, уже 00000010, еще - 00000011...00000100......
и т.д......
Например, инкрементировали его до 00001000, нажали другую кнопку, и раз в сек. содержимое счетчика декрементируется.
00000111, сек. прошла, 00000110, сек. прошла, 00000101... и т.д.
1 кнопка - это инкремент содержимого какого-либо регистра.
Нажимаем на другую кнопку, и значение содержимого этого регистра декрементируется раз в секунду.
Например.
Нажали кнопку, у нас в регистре записалось 00000001
затем еще раз нажали, уже 00000010, еще - 00000011...00000100......
и т.д......
Например, инкрементировали его до 00001000, нажали другую кнопку, и раз в сек. содержимое счетчика декрементируется.
00000111, сек. прошла, 00000110, сек. прошла, 00000101... и т.д.
Не умеешь - не берись, но не взявшись не научишься...
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: Различные мелкие вопросы
Еще раз внимательно прочитай вопрос который задал.
То что ты написал - очевидно.
А вот включили в регистре у тебя записано 00000000. Нажали декремент и?
Остается 00000000 или станет 11111111, затем 11111110 и т.д.?
То что ты написал - очевидно.
А вот включили в регистре у тебя записано 00000000. Нажали декремент и?
Остается 00000000 или станет 11111111, затем 11111110 и т.д.?
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
- AI_Disable
- Сверлит текстолит когтями
- Сообщения: 1116
- Зарегистрирован: Чт окт 15, 2009 14:16:18
- Откуда: Екб
- Контактная информация:
Re: Различные мелкие вопросы
Например, для меги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));//если дошли до нуля, останавливаем таймер.
}
Код не тестировал, могу где-то ошибиться.
Re: Различные мелкие вопросы
спасибо, как железо соберу, опробую.
Не умеешь - не берись, но не взявшись не научишься...
Re: Различные мелкие вопросы
скажите пож-та простым, доступном русским языком, в чем отличия между return(1) и return(0)? или например return(5)???
Я бы на вашем месте за докторскую диссертацию немедленно сел. - Торопиться не надо, сесть я всегда успею (с)
Re: Различные мелкие вопросы
Никакого, кроме величины возвращаемого значения.Арвар писал(а):скажите пож-та простым, доступном русским языком, в чем отличия между return(1) и return(0)? или например return(5)???
Re: Различные мелкие вопросы
хорошо, величина возвращаемого значения - куда эта величина возвращается?)
Я бы на вашем месте за докторскую диссертацию немедленно сел. - Торопиться не надо, сесть я всегда успею (с)
- AI_Disable
- Сверлит текстолит когтями
- Сообщения: 1116
- Зарегистрирован: Чт окт 15, 2009 14:16:18
- Откуда: Екб
- Контактная информация:
Re: Различные мелкие вопросы
Туда, где вы вызываете эту функцию.
Например, функция для АЦП:
В данном случаи функция возвращает не конкретную константу, а содержимое регистра ADCW.
Вызовим эту функцию:
Теперь в переменную "ololo" запишется результат АЦП первого канала.
(Надеюсь, вы уже работали с АЦП, иначе пример может не возыметь достаточного смысла)
Например, функция для АЦП:
Код: Выделить всё
unsigned int adc(unsigned char chen)
{
ADMUX=chen; //Выбор канала
ADCSRA|=(1<<ADSC); //Начать АЦП.
while(ADCSRA&(1<<ADSC)); //Ждём завершения АЦП
return(ADCW); //Возвращаем результат
}В данном случаи функция возвращает не конкретную константу, а содержимое регистра ADCW.
Вызовим эту функцию:
Код: Выделить всё
ololo=adc(1); Теперь в переменную "ololo" запишется результат АЦП первого канала.
(Надеюсь, вы уже работали с АЦП, иначе пример может не возыметь достаточного смысла)
Re: Различные мелкие вопросы
C АЦП не работал, но ход Ващих мыслей мне понятен=)
Я бы на вашем месте за докторскую диссертацию немедленно сел. - Торопиться не надо, сесть я всегда успею (с)
Re:
_noise писал(а):2б. Если передатчик был включен раньше, чем приёмник - принимается шотонето... ил
Вопрос: как по уму "2б" делается...
Паузы какой длительности? По хорошему передача должна начинаться гарантировано после того как приемник и передатчик готовы, но это идеал, зачастую недостижимый. Попробуйте сделать паузу дольше чем передается 1 байт (лучше длительностью 3,5 байта) - т. е. вам нужно допилить программу передатчика.
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: Различные мелкие вопросы
_noise, тебе существенно вызывать в обработчиках подпрограммы?
Может стоит пересмотреть концепцию и выкинуть длинные\долгие вызовы?
Может стоит пересмотреть концепцию и выкинуть длинные\долгие вызовы?
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: Различные мелкие вопросы
_noise, тя иной раз не понять, но это только полбеды потому как зачастую вообще не разобрать хода твоей мысли.
Сам столкнулся с длинными передачами (до МБайта) со всякими потрохами и лабудой. Вот как решаю:
выделяю область ОЗУ для передачи и для приема(разные участки)
назначаю регистры Х на обслугу приемника
назначаю регистры У на обслугу передатчика.
настраиваю таймер для обработки приема, но не запускаю пока не примем преамбулу.
Задаю адреса в регистрах, а в прерыаниях только читаю данные по ним с инкрементом.
Проверки приема, кроме преамбулы, вне прерываний. Если приняли преамбулу - старт таймера.
Отработал таймер - читаем чего напринимали и контролируем то или не то.
Может я и не о том, но все же
Сам столкнулся с длинными передачами (до МБайта) со всякими потрохами и лабудой. Вот как решаю:
выделяю область ОЗУ для передачи и для приема(разные участки)
назначаю регистры Х на обслугу приемника
назначаю регистры У на обслугу передатчика.
настраиваю таймер для обработки приема, но не запускаю пока не примем преамбулу.
Задаю адреса в регистрах, а в прерыаниях только читаю данные по ним с инкрементом.
Проверки приема, кроме преамбулы, вне прерываний. Если приняли преамбулу - старт таймера.
Отработал таймер - читаем чего напринимали и контролируем то или не то.
Может я и не о том, но все же
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже