[an error occurred while processing this directive] [an error occurred while processing this directive]
Ответ: Есть подтвержденный глюк (но для 8535) ...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено chs 26 декабря 2001 г. 12:30
В ответ на: Помогите пожалуйста: Bug с прерываниями At90S8515 определенной партии отправлено KWS 26 декабря 2001 г. 08:28

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