правда он корявый, сделано на ТИНИ26, 8Мгц выход с PВ1
//Timer/Counter 1 установки таймера PLLCSR=0b00000110; TCCR1A=0b11000010; TCCR1B=0b00000100; TCNT1=0x00; OCR1A=100; OCR1B=0x00;
void waitPLL(void) { //ждем синхронизации PLL при запуске МК (ШИМ тактируется от //встроенного PLL на 64 МГц while((PLLCSR&0x01)==0); }
// генерация старт-бита для посылки сони void start(void) { TCCR1B|=0x80; OCR1C=199; //запуск таймера delay_2.4(); //задержка 2,4 мс (формируется TIMER0) в принципе //можно использовать и задержки из <delay.h>, тогда будет // delay_us(2400); - проверял - работает, но так писать проги //несколько неправильно OCR1C=0; //стоп таймера delay_0.6(); // пауза до посылки следующего импульса (определено протоколом SIRC) (аналогично работает delay_us(600); ) }
насчет програмных задержек, просто, но не всегда надежно - компилятор может и дурить, выход отсчитывать временные интервалы с помощью другого таймера (душевное спокойствие гарантировано) или контролировать то, что получилось осцилографом
--------------------
Андрей Смирнов
|