| Прошу помощи, подобие стробоскопа | 
|  | 
| 
|  | Сообщение # 1 | | Fenix 
   
    
Постов: 5  
 
ОК  | Всем доброго времени суток! С мк стал знакомится недавно, до этого только собирал и повторял готовое. Суть вот в чем:МК - Attiny13. К нему подключены три светодиода
 Первый - вспыхивает как стробоскоп 1 раз в три секунды. Длительность вспышки 0,2 сек.
 Второй - вспышка длительностью 0,2 сек, затем пауза 0,2 сек, затем опять вспышка длительностью 0,2 сек, затем пауза 1,4 сек. То есть цикл за 2 секунды
 Третий вспышка длительностью 0,2 сек через каждые 1,8 сек.
 Помогите пожалуйста, направьте в нужное русло. Заранее примного благодарен
 |  | 
| 
|  | Сообщение # 2 | | Электродыч 
   
    
Постов: 3755  
 
U  | Fenix, так вы конкретизируйте-чего нужно то-прошивку написать и схему разработать?Так этим вряд ли кто будет заниматься кроме вас.А если есть готовая схема-другое дело. |  | 
| 
|  | Сообщение # 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) {}
 }
 |  | 
| 
|  | Сообщение # 4 | | Витинари 
   
    
Постов: 1503  
 
Друзья  | Fenix, опишу в общих чертах:посмотрите на заданные временные промежутки - они все кратны 0.2 с. Настраиваете таймер на прерывание каждые две десятых секунды, заводите отдельные переменные, которые инкрементируются на 1 по прерыванию таймера, и, соответственно, в функции прерывания оставляете только прибавление этих переменных (можно, конечно, сделать и на одной переменной, но это будет несколько сложнее). Не забудьте сделать обнуление, когда каждая переменная достигает определенного значения (например, полный цикл мигания первого светодиода занимает 3 секунды, 3/0.2=15; то есть когда переменная, отвечающая за мигание первого светодиода, станет больше либо равна 14, ей присваивается значение 0, и цикл повторяется снова).
 В цикле while добавляете проверку этих переменных на определенные значения (которые равны времени в секундах, деленному на 0.2 - длительность одного прерывания), и когда значение той или иной переменной совпадает со значением в условии, подаете на нужную ногу контроллера 1 или 0.
 |  | 
| 
|  | Сообщение # 5 | | Fenix 
   
    
Постов: 5  
 
ОК  | Витинари, а вам не сложно сделать это наглядно? просто начал мк изучать недавно, очень трудно пока понимается на словах. Благодарю заранееДобавлено (03.12.2015, 02:00)---------------------------------------------
 Вопрос закрыт. Всё получилось. Спасибо всем за участие и помощь!!!
 |  | 
| 
|  | Сообщение # 6 | | Витинари 
   
    
Постов: 1503  
 
Друзья  | Fenix, я под пики программирую, так что саму реализацию процесса описать могу, но непосредственно с вариантами языка C под AVR и с их архитектурой дела пока не имел. |  |