|
Кварц 32768, не запускается |
|
|
|
Apr 2 2008, 16:58
|

Местный
  
Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530

|
Цитата(ILYAUL @ Apr 2 2008, 19:56)  Всё таки я его запустил. Поздравляю, не знал что столько проблем может быть с часовым кварцом. Ставил простой, выпаянный с китайских часов к МЕГЕ8535 и 88, 168 тикал как "часы"
--------------------
нельзя недооценивать предсказуемость глупости
|
|
|
|
|
Oct 23 2008, 11:10
|
Знающий
   
Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447

|
У меня также не запускается часовой кварц, подключеный к AT90USB1287. Конденсаторов на выводах кварца нет. Пример RTC взял из AVR134, немного подкорректировал: Код void rtc_Init(void) { //volatile unsigned int temp0, temp1; // for(temp0=0; temp0<0x0040; temp0++) // Wait for external clock crystal to stabilize // for(temp1=0; temp1<0xFFFF; temp1++); delay_ms(2000);
DDRF |= (1<<MCLK); PORTF |= (1<<MCLK); // Настроить MCLK на выход TIMSK2 &=~((1<<TOIE2)|(1<<OCIE2A)); // Disable TC2 interrupt ASSR |= (1<<AS2); // set Timer/Counter2 to be asynchronous from the CPU clock // with a second external clock(32,768kHz)driving it. TCNT2 = 0x00; TCCR2B = 0x05; // prescale the timer to be clock source / 128 to make it // exactly 1 second for every overflow to occur while(ASSR&0x11); // Wait until TCNT2, TCCR2B is updated // TC2 TIFR2 |= (1 << TOV2); TIMSK2 |= (1<<TOIE2); // set 8-bit Timer/Counter2 Overflow Interrupt Enable __enable_interrupt(); // set the Global Interrupt Enable Bit } Проблема в отсутствии конденсаторов или в настройках? МК распаян на монтажной платке. Работоспособность проверяю изменением пина (BEEP) в обработчике прерывания TIMER2_OVF_ISR(). Кварц - на расстоянии 1...1,5 см от выводов TOSC1, 2.
|
|
|
|
|
Oct 23 2008, 15:33
|
Знающий
   
Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447

|
Цитата(ILYAUL @ Oct 23 2008, 17:03)  пока в DS не нашёл сию строчку "Applying an external clock source to TOSC1 requires EXCLK in the ASSR Register written to one logic one. Сие онзначало - чтобы запустить часовой кварц надо бы подключить внутренний генератор , при этом эти выходы перестают быть портами ВВ . Сие означает совсем другое - у Вас плохо с английским На самом деле установка EXCLK бита в "1" означает работу от внешнего источника тактовых импульсов (32768 Гц) , подключенного к TOSC1 выводу вместо кварца 32768 Гц. PS. Проблема была в кварце: поменял на выпаяный из старого советского будильника кварц, и все заработало, даже без конденсаторов. Но, все-же, конденсаторы нужны - для кварца 12pF надо повесить на выводах на землю по 25pF, так не нашел никакой информации о наличии встроенных конденсаторах в данном контроллере.
Сообщение отредактировал alux - Oct 24 2008, 11:47
|
|
|
|
|
Dec 28 2009, 09:21
|
Знающий
   
Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447

|
Пришлось снова поднимать старую тему... Не работает асинхронный таймер на Atmega8535. Фьюзы запрограммированы так: CKOPT=0, CKSEL=F, SUT=2. Основной кварц - 16МГц. Часовой кварц припаян на соответствующие ножки мк без конденсаторов. Код #pragma vector=TIMER2_OVF_vect __interrupt void TIMER2_OVF_ISR() { PORTD ^= (1 << GREEN); }
void Initialise() { delay_ms(1000);
// Timer2 initialisation with a second external clock (32,768kHz) driving it // Set Timer/Counter2 to be asynchronous from the CPU clock ASSR |= (1 << AS2); TCNT2 = 0x00; TCCR2 = 0x05; //(1 << CS22) | (0 << CS21) | (1 << CS20); // prescale the timer to be clock source/128 to make it // exactly 1 second for every overflow to occur //while(ASSR & ((1 << TCR2UB) | (1 << TCN2UB))); // Wait until TCNT2, TCCR2B is updated TIFR |= (1 << TOV2); // Clear TC2 interrupt flag TIMSK |= (1 << TOIE2); // set 8-bit Timer/Counter2 Overflow Interrupt Enable
MCUCR = (1 << SE); // Idle по команде __sleep()
__enable_interrupt(); // allow all enabled interrupts }
void main() { Initialise(); // set up I/O registers, flags & variables
for(;;) { //Idle. Спать до следующего прерывания __sleep(); } } Если раскоментировать строчку while(ASSR & ... , то программа остается в этом цикле навсегда. Без этой строчки программа работает, но не запускается прерывание таймера2. Эрраты на Atmega8535 нет. Какие будут соображения?
|
|
|
|
|
Dec 28 2009, 13:48
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 24-06-09
Из: Беларусь
Пользователь №: 50 607

|
Если контроллер в TQFP-корпусе - проверьте монтаж и удалите все следы флюса от кварца, дорожек и ножек чипа. В 90% проблем с часовым кварцем на меге - именно это. Проверьте осциллографом или частотомером наличие генерации
|
|
|
|
|
Dec 29 2009, 16:51
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 25-04-07
Пользователь №: 27 301

|
Проблема в кварцах (либо херовом генере в меге). В своё время я тоже долго долбался с этим. Были куплены кварцы штук сорок а запускаться не хотели сразу, точнее запускались где-то через минуту. Потом случайно нашел один кварц купленный на рынке и с ним все заработало сразу... Но выкидывать кучу купленных кварцев мне не захотелось и начал методом тыков экспериментировать...в результате всё воркен...добавил всего лиш задержку в код в нужном месте.
//Init Timer2 TCCR2B:= (1 shl CS22) or (1 shl CS21) or (1 shl CS20); //1024 Presc Delay_ms(400); //Добавлено для быстрого выхода генератора часового кварца на рабочий режим ASSR:= (1 shl AS2); //Enable Async Mode (включение тактирования от часового кварца) TCNT2:= 0; TIMSK2:= (1 shl TOIE2); //Enable Timer2 Int Overflov
|
|
|
|
|
Feb 1 2010, 13:22
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 7-12-09
Пользователь №: 54 109

|
Так значит, кварцевые резонаторы трудно проверить вне схемы, только подключением к процессору? Следы флюса не дают кварцу запуститься? Это верно и для других микроконтроллеров? В частности для MSP430F2012?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|