Прошу помощи, подобие стробоскопа
|
|
| Ср, 02.12.2015, 00:02 | Сообщение # 1
|
Fenix
Постов: 5
ОК |
Всем доброго времени суток! С мк стал знакомится недавно, до этого только собирал и повторял готовое. Суть вот в чем: МК - Attiny13. К нему подключены три светодиода Первый - вспыхивает как стробоскоп 1 раз в три секунды. Длительность вспышки 0,2 сек. Второй - вспышка длительностью 0,2 сек, затем пауза 0,2 сек, затем опять вспышка длительностью 0,2 сек, затем пауза 1,4 сек. То есть цикл за 2 секунды Третий вспышка длительностью 0,2 сек через каждые 1,8 сек. Помогите пожалуйста, направьте в нужное русло. Заранее примного благодарен
|
|
| Ср, 02.12.2015, 08:41 | Сообщение # 2
|
Электродыч
Постов: 3755
U |
Fenix, так вы конкретизируйте-чего нужно то-прошивку написать и схему разработать?Так этим вряд ли кто будет заниматься кроме вас.А если есть готовая схема-другое дело.
|
|
| Ср, 02.12.2015, 10:47 | Сообщение # 3
|
Fenix
Постов: 5
ОК |
Электродыч, схема простейшая, да и прошивка, думаю не сложная. Просто МК начал изучать совсем недавно, очень нужна помощь
Добавлено (02.12.2015, 11:47) --------------------------------------------- Просто мигание на 1 светодиод получить удалось, но вот как сделать так как нужно?
#include <avr/io.h> #include <avr/interrupt.h>
//ISR(TIM0_OVF_vect) ISR(SIG_OVERFLOW0) { PORTB ^= 0x01; TCNT0 = (256 - 234); }
int main(void) { PORTB = 0b00111111; DDRB = 0b00000001;
TCCR0A = 0; TCCR0B = 0b00000101; TCNT0 = (256 - 234); TIMSK0 = 0b00000010; sei(); while (1) {} }
|
|
| Ср, 02.12.2015, 21:59 | Сообщение # 4
|
Витинари
Постов: 1503
Друзья |
Fenix, опишу в общих чертах: посмотрите на заданные временные промежутки - они все кратны 0.2 с. Настраиваете таймер на прерывание каждые две десятых секунды, заводите отдельные переменные, которые инкрементируются на 1 по прерыванию таймера, и, соответственно, в функции прерывания оставляете только прибавление этих переменных (можно, конечно, сделать и на одной переменной, но это будет несколько сложнее). Не забудьте сделать обнуление, когда каждая переменная достигает определенного значения (например, полный цикл мигания первого светодиода занимает 3 секунды, 3/0.2=15; то есть когда переменная, отвечающая за мигание первого светодиода, станет больше либо равна 14, ей присваивается значение 0, и цикл повторяется снова). В цикле while добавляете проверку этих переменных на определенные значения (которые равны времени в секундах, деленному на 0.2 - длительность одного прерывания), и когда значение той или иной переменной совпадает со значением в условии, подаете на нужную ногу контроллера 1 или 0.
|
|
| Чт, 03.12.2015, 01:00 | Сообщение # 5
|
Fenix
Постов: 5
ОК |
Витинари, а вам не сложно сделать это наглядно? просто начал мк изучать недавно, очень трудно пока понимается на словах. Благодарю заранееДобавлено (03.12.2015, 02:00) --------------------------------------------- Вопрос закрыт. Всё получилось. Спасибо всем за участие и помощь!!!
|
|
| Чт, 03.12.2015, 14:21 | Сообщение # 6
|
Витинари
Постов: 1503
Друзья |
Fenix, я под пики программирую, так что саму реализацию процесса описать могу, но непосредственно с вариантами языка C под AVR и с их архитектурой дела пока не имел.
|
|