Таймер на ATtiny13 (как подключить нагрузку?)

Обсуждаем цифровые устройства...
Ответить
Друг Кота
Аватара пользователя
Сообщения: 20183
Зарегистрирован: Пт фев 04, 2011 17:57:51
Откуда: Рыбинск

Сообщение Martin76 »

nyvkom_sv писал(а): верифицировать МК.-ето как
Сравнить содержимое памяти с прошивкой.
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 186
Зарегистрирован: Вс мар 16, 2014 10:13:35
Откуда: Ровно

Сообщение nyvkom_sv »

Martin76 писал(а):
nyvkom_sv писал(а): верифицировать МК.-ето как
Сравнить содержимое памяти с прошивкой.
после прошивки проверялось!!!может все таки ошибка в прошивке и мк просто незнает что ему делать???посмотрите кто может!
Фаза есть - ума не надо!
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Тестовая программа:
Спойлер

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

//Date    : 16.03.2014
//Chip type           : ATtiny13
//Clock frequency     : 9,600000 MHz


#include <tiny13.h>

bit old_SA1, SA1;
long unsigned int counter;
unsigned char data;
flash long unsigned int number[]= {32955,65909,98864,131819,164774,197729,230684,263639};

// Timer 0 overflow interrupt service routine
// каждые 27,31 мсек
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// опрос позиции
old_SA1= SA1;
SA1= PINB.2;

if(!SA1) PORTB.4= 0;
else
	{
	if(counter) --counter;
	else
        	{
                counter= 110;
                PORTB.4= ~PORTB.4;
                }
	}
}



void main(void)
{
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Port B initialization
PORTB=0b00001111;
DDRB= 0b00010000;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 9,375 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x05;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x02;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;

// Global enable interrupts
#asm("sei")

while (1)
{


};
}
На джамперы не реагирует. При замкнутом SA1(т.е. когда на мк поступает "0"), на выводе РВ4 должен быть "0" в любой момент времени. При разомкнутом SA1 на выводе РВ4 должна появляться и пропадать "1" через промежутки времени примерно в три секунды. С такой же частотой должен включаться и выключаться транзистор и двигатель. Испытываем и результаты - сюда.
Вложения
test.hex
(774 байт) 527 скачиваний
Docendo discimus
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 186
Зарегистрирован: Вс мар 16, 2014 10:13:35
Откуда: Ровно

Сообщение nyvkom_sv »

прошивать пока не стал!!в протеусе тестовая прошивка работает нормально!!!!а как должна поводить себя морот при основной прошивке!!!меня интересует момент подачи питания
Фаза есть - ума не надо!
Реклама
Эиком - электронные компоненты и радиодетали
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 186
Зарегистрирован: Вс мар 16, 2014 10:13:35
Откуда: Ровно

Сообщение nyvkom_sv »

я пробовал проектировать в протеусе но запутался и тепер вообще ничего не работает!!и почему в attiny13 в протеусе 6 ног???кто может спроектируйте в протеусе пожалуйста!!!
Фаза есть - ума не надо!
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

nyvkom_sv писал(а):поводить себя морот
Что?
Docendo discimus
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 186
Зарегистрирован: Вс мар 16, 2014 10:13:35
Откуда: Ровно

Сообщение nyvkom_sv »

pyzhman писал(а):
nyvkom_sv писал(а):поводить себя морот
Что?
как ведет себя двигатель?лучше если можете проверте в протеусе прошивку!
Фаза есть - ума не надо!
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

nyvkom_sv писал(а):поводить себя морот при основной прошивке
Двигатель включается каждые N минут (N определяется джамперами SA2..SA4). Работает до срабатывания концевика SA1. В момент срабатывания концевика питание с двигателя снимается и начинается отсчет времени.

С протеусрм особо не дружу (или он со мной не дружит), но тем не менее -
Изображение
Не забудьте в свойствах мк (нажать правую кнопку мыши на изображении мк) указать нужный файл для симуляции. Фузы должны быть настроены на внутренний тактовый генератор 9,6МГц и фуз делителя на 8 не прошит.
Вложения
shema.zip
(16.92 КБ) 222 скачивания
Docendo discimus
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 186
Зарегистрирован: Вс мар 16, 2014 10:13:35
Откуда: Ровно

Сообщение nyvkom_sv »

pyzhman писал(а):
nyvkom_sv писал(а):поводить себя морот при основной прошивке
Двигатель включается каждые N минут (N определяется джамперами SA2..SA4). Работает до срабатывания концевика SA1. В момент срабатывания концевика питание с двигателя снимается и начинается отсчет времени.

С протеусрм особо не дружу (или он со мной не дружит), но тем не менее -
Изображение
Не забудьте в свойствах мк (нажать правую кнопку мыши на изображении мк) указать нужный файл для симуляции. Фузы должны быть настроены на внутренний тактовый генератор 9,6МГц и фуз делителя на 8 не прошит.
основная прошивка даже в протеусе ничего не делает!!!в чем проблема?
Фаза есть - ума не надо!
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Да, действительно, двигатель стартовал только после передергивания концевого выключателя, т.к. не было начального старта таймера. Поправил. Для модели сократил времена отсчета.
Спойлер

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

//Date    : 23.03.2014
//Chip type           : ATtiny13
//Clock frequency     : 9,600000 MHz


#include <tiny13.h>

bit old_SA1, SA1;
long unsigned int counter;
unsigned char data;
//flash long unsigned int number[]= {32955,65909,98864,131819,164774,197729,230684,263639};
flash long unsigned int number[]= {50,75,100,125,150,175,200,225};

// Timer 0 overflow interrupt service routine
// каждые 27,31 мсек
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// опрос позиции
old_SA1= SA1;
SA1= PINB.2;

if(old_SA1 && !SA1)
	{
	PORTB.4= 0; // при достижении позиции останавливаем двигатель
	//опрос кнопок
        data= 4*PINB.3 + 2*PINB.0 + PINB.1;
	// старт таймера
        counter= number[data];
        }
// отсчет таймера
if(counter) --counter;

// старт двигателя
if(counter== 1) PORTB.4= 1; 
}



void main(void)
{
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Port B initialization
PORTB=0b00001111;
DDRB= 0b00010000;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 9,375 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x05;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x02;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;

// считываем уставку времени
data= 4*PINB.3 + 2*PINB.0 + PINB.1;
// старт таймера
counter= number[data];

// Global enable interrupts
#asm("sei")


while (1)
{


};
}
Вложения
timer.hex
(1.2 КБ) 411 скачиваний
Docendo discimus
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 186
Зарегистрирован: Вс мар 16, 2014 10:13:35
Откуда: Ровно

Сообщение nyvkom_sv »

pyzhman писал(а):Да, действительно, двигатель стартовал только после передергивания концевого выключателя, т.к. не было начального старта таймера. Поправил. Для модели сократил времена отсчета.
Спойлер

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

//Date    : 23.03.2014
//Chip type           : ATtiny13
//Clock frequency     : 9,600000 MHz


#include <tiny13.h>

bit old_SA1, SA1;
long unsigned int counter;
unsigned char data;
//flash long unsigned int number[]= {32955,65909,98864,131819,164774,197729,230684,263639};
flash long unsigned int number[]= {50,75,100,125,150,175,200,225};

// Timer 0 overflow interrupt service routine
// каждые 27,31 мсек
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// опрос позиции
old_SA1= SA1;
SA1= PINB.2;

if(old_SA1 && !SA1)
	{
	PORTB.4= 0; // при достижении позиции останавливаем двигатель
	//опрос кнопок
        data= 4*PINB.3 + 2*PINB.0 + PINB.1;
	// старт таймера
        counter= number[data];
        }
// отсчет таймера
if(counter) --counter;

// старт двигателя
if(counter== 1) PORTB.4= 1; 
}



void main(void)
{
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Port B initialization
PORTB=0b00001111;
DDRB= 0b00010000;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 9,375 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x05;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=0x02;

// Analog Comparator initialization
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;

// считываем уставку времени
data= 4*PINB.3 + 2*PINB.0 + PINB.1;
// старт таймера
counter= number[data];

// Global enable interrupts
#asm("sei")


while (1)
{


};
}
в принципе все нормально!!!напишите пожалуйста прошивку с нормальним времям!!0т 15 мин до 2 часов!
Фаза есть - ума не надо!
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Пробуйте.
Вложения
timer.hex
(1.2 КБ) 300 скачиваний
Docendo discimus
Контактная информация:
Ответить

Вернуться в «Цифровая техника»