Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Tiny26L
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
smk
Уже вторая тинька не отзывается. Суть в чем. Написал программу, запрограммировал и контроллер перестал отзываться. Подключение кварца ничего не дало. Что это может быть?
Вот исходный текст (hex прикрепляю):

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdint.h>
#include <avr/wdt.h>


#define F_CPU 1000000UL // 1 MHz
#define time_limit 1 //(=5+Nsec*3,81)определитель задержки перед выключением
#define temp_min 16 //определитель температуры
#define temp_max 290
#define flay_off PORTB &= ~(1<<4); //выключить преобразователи (установить в 0 PORTB.4)
#define flay_on PORTB |= (1<<4); //включить преобразователи (установить в 1 PORTB.4)


volatile unsigned int N_T0_OVF;
volatile unsigned int temp_sensor;

FUSES =
{
.low = LFUSE_DEFAULT,
.high = HFUSE_DEFAULT,
};

LOCKBITS = (LB_MODE_3);

ISR(INT0_vect)
{
if(PINB & 0b01000000)
{flay_on;
TCCR0 = 0x00;
N_T0_OVF=0;}
else {TCNT0=0; TCCR0 = 0b00000101;}
}


ISR(TIMER0_OVF_vect)
{
N_T0_OVF++;
if(N_T0_OVF==time_limit)
{N_T0_OVF=0;
TCCR0=0x00;
flay_off;}
}


void read_adc_temp (void)
{
ADCSR|=0b01000000; //запустить преобразование
while ((ADCSR & 0b00010000)==0); //дождаться завершения преобразования
{asm("nop");}
ADCSR|=0b00010000; //сбросить флаг прерывания АЦП
temp_sensor=ADCW;
}


int main (void)

{
wdt_enable(WDTO_2S);
DDRB=0b01000111;
PORTB=0b00000000;
DDRA=0b00000001;
PORTA=0b00000000;
MCUCR=0b00000001;
TIMSK = 0b00000010;
GIMSK=0b01000000;
ACSR=0b10000000;
ADMUX=0b10000000;
ADCSR=0b10000011;

/*
read_adc_temp();
adc_next:
read_adc_temp();
if((temp_sensor<temp_min)||(temp_sensor>temp_max)) {goto adc_next;}
*/
asm("sei");

if(PINB & 0b01000000) {_delay_ms(20);}
if(PINB & 0b01000100) {flay_on;}

while(1)
{
/*
if((temp_sensor<temp_min)||(temp_sensor>temp_max))
{flay_off; asm("cli");}
else
{goto adc_next;}
*/
asm("nop");
wdt_reset();
}

return 0;

}
Палыч
Цитата(smk @ Sep 9 2008, 11:09) *
...и контроллер перестал отзываться.
Это - что значит? Программатором не читается, не пишется? Тогда - неправильно выставленны фузы...
Corvus
С 99% вероятностью - неправильно выставлены фьюзы, задающие режим тактирования.
smk
Цитата
Программатором не читается, не пишется?

Да.
Цитата
Тогда - неправильно выставленны фузы...

Так вроде бы .low = LFUSE_DEFAULT, .high = HFUSE_DEFAULT,
Lem
подключите внешнее тактирование и запрограммируйте правильно фьюзы
Палыч
Не знаю: что такое DEFAULT... Как реанимировать - поищите по форуму. Тут такого - каждый месяц по вопросу...
smk
Цитата
подключите внешнее тактирование и запрограммируйте правильно фьюзы

Да уже начинаю ваять че-то на 1 МГц. Другое дело, почему они оказались неверно запрограммированы?

Цитата
Не знаю: что такое DEFAULT...

Это значит запрограммировать как при заводской установке.
Палыч
Цитата(smk @ Sep 9 2008, 11:27) *
Это значит запрограммировать как при заводской установке.
Тогда, зачем их программировать - они и так уже установлены.
smk
Цитата
Тогда, зачем их программировать - они и так уже установлены.

Привычка.

Посмотрел файл fuse в библиотеке. Кажись там ошибка. Если я правильно понял, то сейчас фузы установлены так, что нужен часовой кварц 32,768 кГц. Как в этом случае лучше тактировать, если кварца нет?

Было: #define LFUSE_DEFAULT (FUSE_CKSEL1 & FUSE_CKSEL2)

Исправил на: #define LFUSE_DEFAULT (FUSE_CKSEL1 & FUSE_CKSEL2 & FUSE_CKSEL3 & SUT0)

как сказать теперь разработчикам?

Всем спасибо. Разобрал часы, вынул кварц, подключил. Заработало. А библиотеку нужно править.
aesok
Цитата(smk @ Sep 9 2008, 13:07) *
Было: #define LFUSE_DEFAULT (FUSE_CKSEL1 & FUSE_CKSEL2)

Исправил на: #define LFUSE_DEFAULT (FUSE_CKSEL1 & FUSE_CKSEL2 & FUSE_CKSEL3 & SUT0)

как сказать теперь разработчикам?

.... А библиотеку нужно править.


Здесь можно сказать:
http://savannah.nongnu.org/bugs/?group=avr-libc

Анатолий
smk
Цитата
Здесь можно сказать:
http://savannah.nongnu.org/bugs/?group=avr-libc

Анатолий


Спасибо. Попробую.
Lem
при любом положении фузов при подаче внешнего тактового сигнала работать кристалл будет (программироваться)
smk
Цитата
Здесь можно сказать:
http://savannah.nongnu.org/bugs/?group=avr-libc

Не могу понять куда там писать. Может Вы вместо меня сообщите про вышеупомянутое?
Цитата
при любом положении фузов при подаче внешнего тактового сигнала работать кристалл будет (программироваться)

Спасибо. Уже все получилось. Читайте выше что было и не попадайтесь. Удачи!
Itch
Цитата
при любом положении фузов при подаче внешнего тактового сигнала работать кристалл будет (программироваться)

А подать внешний сигнал можно например с линии LED STK200, если шить avreal'ом.
Stepan_L
я + к совету LEM
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.