[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Q: Кстати, какой результат от переставления камней
из рабочих плат в нерабочие?
Надо было сделать аппаратный генератор с заданным временем 0 и 1.
Поставили ЛП5 между выходами ОС1А и ОС1В. ОС1А загоняли в режим
изменения при сравнении со временем 1, ОС1В сбрасывали
при сравнении с полным периодом (0+1). Надо было вкл/выкл по
необходимости.
Суть - генератор включался в случайной полярности!
Главное, что о _начальном состоянии_ ОС1А и ОС1В в этом режиме
в доке ни слова. (Это совершенно не то, что выводишь в порты перед
запуском! Это читается из какой-то внутренней защелки, недоступной
программно. И завязано на дату изготовления).
По-честному в условиях такой неопределенности надо было загнать
их в такой режим, где они сбросятся/установятся, а потом переключать
в этот. Но это было жирно (по времени).
Тогда была подобрана последовательность команд для вкл/выкл,
при которой полярность была всегда постоянна.
Так вот, у новых кристаллов - опять полярность случайная!
т.е. на кристаллах 9920 работает, а 0038 - нет.
Конечно, надо делать честно, как описано выше.
Но когда надо было очень срочно починить, был найден
кристал с 9920.
//*** пуск
TCCR1B = 0; // t1 off
TCCR1A = 0;
TCNT1H=0;
TCNT1L=0;
// PORTD ??11????
PORTD &= ~ 0x30;
PORTD |= 0x20;
// DDRD |= 0x30;
val = t_zero * 1024;
OCR1BH = val >> 8;
OCR1BL = val;
val += t_one * 1024;
OCR1AH = val >> 8;
OCR1AL = val;
TCCR1A = 0x50; // oc1a change oc1b change
TCCR1B = 0x08/*reset after comp1a match*/ | 0x01/* CK */;
//*** останов
TCCR1B = 0; // t1 off
TCCR1A = 0;
// PORTD ??10????
PORTD &= ~ 0x30;
PORTD |= 0x20;
E-mail: info@telesys.ru