Страница 1 из 1

ATmega48PA TQFP, асинхронный таймер и кварц.

Добавлено: Пт авг 22, 2014 16:37:33
Pink-Pank
Добрый день, коты!
Что-то я в ступоре совсем...
Подключаю к ногам кварц - он не работает. Вешаю на ноги 7 и 8 через кондеры на землю. Пробовал без кондеров, и с кондерами разных номиналов от 10 до 43 пФ. Кварцов штук 10 сменил. Контроллер тоже менял - не хочет работать и все. Где-то, кажется видел, что к одной из ног нужно 8 пФ цеплять, а ко второй 16 .. пробовал - не помогает. Весь даташит переслюнявил - нигде такого нет.. только общие указания 12..22 пФ.. Виснет после перехода в асинхронный режим в ожидании изменения значений регистров таймера 2.
код:
Спойлер

Код: Выделить всё

    CLKPR = _BV(CLKPCE);								// Уменьшаем тактовую частоту
    CLKPR = 4;											// 500 000 Гц
    
    asm("wdr");
    MCUSR &= ~_BV(WDRF);								// Отключение сторожевого таймера
    WDTCSR |= _BV(WDCE) | _BV(WDE);
    WDTCSR = 0;
    
    ACSR = _BV(ACD);									// Выключаем компаратор
    
    ADCSRA = _BV(ADEN);									// Включаем АЦП
    
    DDRB = _BV(Day_3) | _BV(Day_4) | _BV(Day_7) | _BV(Dvig1) | _BV(Dvig2);		// Ноги на выход
	DDRC = _BV(Min_30) | _BV(Min_40) | _BV(Min_60) | _BV(Day_1) | _BV(Day_2);	// Ноги на выход
    DDRD = _BV(Power) | _BV(Work);						// Ноги на выход
    
    B_PORT = _BV(B_Vrem) | _BV(B_Prd) | _BV(B_Strt);	// Подтягивающие резисторы к кнопкам
	
	ON_Power; // макрос зажигания первого светодиода (загорается)
    
	ASSR = _BV(AS2);	// Включаем таймер от кварца.
    TCNT2 = 0;
    OCR2A = 63;
    TCCR2A = _BV(WGM21);
    TCCR2B = 1;
    TIFR2 = 0xFF;
    TIMSK2 = _BV(OCIE2A);
    while ((ASSR & 0b11111) != 0); // зависает здесь. после комментирования строчки второй светик зажигается

	ON_Work; // макрос зажигания второго светодиода (не загорается)
Я уже вою от злости! подскажите ошибку, если кто такую узрит! :(
Мож фьюзы какие включить надо? :roll:

P.S. Да, если щупом осциллографа тронуть ножку 7 контроллера, то второй светик зажигается (видимо, проходит импульс). Далее кварц также не работает....

Re: ATmega48PA TQFP, асинхронный таймер и кварц.

Добавлено: Пт авг 22, 2014 17:12:46
uk8amk
Уточню: вы именно часовой кварц подключаете?
Менять его не пробовали?
У меня бывало, что кварцы толи стряхивались, толи разрывались от перегрузки(есть оказывается параметр - предельная мощность колебаний в микроваттах).
Еще были случаи что кварц медленно заводился, где-то через 3-4 секунды только генерация начиналась.

Re: ATmega48PA TQFP, асинхронный таймер и кварц.

Добавлено: Пт авг 22, 2014 17:14:09
Pink-Pank
Именно часовой. Сменил с десяток. У меня есть даже пара кварцев с военной приемкой - тем никакие перегрузки не страшны - все равно не работает.. По поводу 3-4 секунд сейчас проверю...

Ждал с полминуты. Не запускается....

Re: ATmega48PA TQFP, асинхронный таймер и кварц.

Добавлено: Пт авг 22, 2014 18:14:39
uk8amk
Вроде как правильно.
Но на всякий случай попробуйте так:

Код: Выделить всё

// Timer/Counter 2 initialization
// Clock source: Crystal on TOSC1 pin
// Clock value: PCK2/128
// Mode: Normal top=FFh
// OC2A output: Disconnected
// OC2B output: Disconnected
ASSR=0x20;
TCCR2A=0x00;
TCCR2B=0x05;
TCNT2=0x00;
Это код одних моих часов на М48.

Правда ASSR я проверял только после выхода из сна.
И вроде как TIFR2 предполагает запись только в первые 3 бита, остальные в резерве.

Re: ATmega48PA TQFP, асинхронный таймер и кварц.

Добавлено: Пт авг 22, 2014 20:08:29
oleg110592
Подключал по старому даташиту кварц часовой к меге48 без конденсаторов - проверено на нескольких сотнях - все работало.
Изображение
Потом появились мега48па - по привычке тоже без конденсаторов и тоже работали, хотя, в даташите к ним действительно написано 18пФ и 8 пФ.
Визард кодевижена так нагенерил:

Код: Выделить всё

// Timer/Counter 2 initialization
// Clock source: Crystal on TOSC1 pin
// Clock value: PCK2/64
// Mode: Normal top=0xFF
// OC2A output: Disconnected
// OC2B output: Disconnected
ASSR=(0<<EXCLK) | (1<<AS2);
TCCR2A=(0<<COM2A1) | (0<<COM2A0) | (0<<COM2B1) | (0<<COM2B0) | (0<<WGM21) | (0<<WGM20);
TCCR2B=(0<<WGM22) | (1<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2A=0x00;
OCR2B=0x00;

Re: ATmega48PA TQFP, асинхронный таймер и кварц.

Добавлено: Сб авг 23, 2014 12:14:21
Pink-Pank
Не помогает ничего... ((((

В еррате для 328 нашел, что был косяк с неработающим кварцем 32768... В 48 такого нет. Думаю, мож какая свежая партия с "исправлениями" пришла и новыми косяками на фоне этих исправлений.... В общем решил заместо асинхронника тактировать основной генератор. Всем учавствующим спасибо за желание помочь.

Re: ATmega48PA TQFP, асинхронный таймер и кварц.

Добавлено: Вс авг 24, 2014 19:47:19
metan

Re: ATmega48PA TQFP, асинхронный таймер и кварц.

Добавлено: Пн авг 25, 2014 06:58:57
Pink-Pank
Да, видел эту статью.. спасибо, но не помогло.. С обычным кварцем на 2 МГц, подключаемого к тем же ногам, запустился без проблем. Кстати, почему-то эти кристаллы не могу прошить AVR910 программатором от Мастер_кита.. Пишет, что не может войти в режим программирования. А вот на работе отладкой от Атмел STK600 нормально с ними общается... :roll:

Re: ATmega48PA TQFP, асинхронный таймер и кварц.

Добавлено: Пн авг 25, 2014 14:43:04
nirq
Сабж замедлили до 36 кГц тактовой, а программатор к нему продолжает обращаться с какой скоростью. А между ними хотя бы какое должно быть соотношение.
Или непонятно описание проблемы.

Re: ATmega48PA TQFP, асинхронный таймер и кварц.

Добавлено: Пн авг 25, 2014 18:47:56
Pink-Pank
Он от внутреннего питался, когда я пробовал связаться. т.е. частота 500 кГц была с учетом делителя. И у программатора я пробовал частоту на минимум ставить 9600 бод - хренос с два. голяк какой-то... STK 600 на 100 кГц влет общается без единой ошибки.

Re: ATmega48PA TQFP, асинхронный таймер и кварц.

Добавлено: Пн авг 25, 2014 19:50:11
metan
Лично я не верю в идею непорочного зачатия :)
1) TIFR2 = 0xFF;
Может дело конечно и не в этом, но все равно не сильно красиво писать единицы туда, где они не должны быть.
2) попробуйте разрешение прерываний поставить уже после проверки падения флагов TCN2UB, OCR2AUB, OCR2BUB, TCR2AUB и TCR2BUB
3) на время выкиньте из программы все "лишнее", оставьте только проверку запуска генерации
4) если хотите, вышлю готовый рабочий на 146% пример, который мигает ледиком 1Гц