Вибротаймер на Attiny13

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
m.ix
Друг Кота
Сообщения: 16545
Зарегистрирован: Вт сен 07, 2010 03:01:06
Откуда: Moscow-Izmaylovo
Контактная информация:

Re: Вибротаймер на Attiny13

Сообщение m.ix »

Если можно, что б нагрузку- активный бузер включал и выключал с интервалом 2 вкл и 2 выкл секунды
Так батарейки экономнее используются и не так привычно как обычный интервал в одну секунду.
Лечу лечить WWWашу покалеченную технику.
Реклама
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Вибротаймер на Attiny13

Сообщение vitalik_1984 »

Кстати, или не совсем кстати, Attiny12V не совсем то же самое, что Attiny13 у него отсутствует такой тип тактирования как кварц, только внутренний генератор 4.8/9.6 MHz либо внешний генератор.
Реклама
Аватара пользователя
m.ix
Друг Кота
Сообщения: 16545
Зарегистрирован: Вт сен 07, 2010 03:01:06
Откуда: Moscow-Izmaylovo
Контактная информация:

Re: Вибротаймер на Attiny13

Сообщение m.ix »

vitalik_1984 писал(а):Attiny13 у него отсутствует такой тип тактирования как кварц, только внутренний генератор 4.8/9.6 MHz либо
ТАм особая точность не нужна, пущай хоть на 2 минуты на час опаздывает или бежит, это не существенно.
Лечу лечить WWWашу покалеченную технику.
mypkot
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт сен 20, 2011 10:27:32

Re: Вибротаймер на Attiny13

Сообщение mypkot »

Добрый день, помоги мне пожалуйста рассчитать задержку на 30 мин. с помощью таймера (Attiny13 9,6 Mhz). Чтобы светодиод загорался на 3 секунды, потом не горел 30 минут. Пожалуйста, очень прошу, я просто не могу понять как это делается.

некоторые вычисления провел, только зачем куда их не знаю:
F=9.6 Mhz
Tclk=1/F
Tclk =1/9600000 = 0.000000104 = 0.104 мксек
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Вибротаймер на Attiny13

Сообщение vitalik_1984 »

Для такой медленной задачи можно использовать 4 источник тактирования - внутренний на 128kHz
считаем 1/128000*1024*250=2 секунды
где 1024- делитель таймера
250-число тиков таймера.Таким образом прерывание таймера будет происходить каждые 2 секунды. Дальше считаем 30 раз, это минута, еще 30 раз по минуте, это ваши пол часа.
А горение светодиода три секунды можно и в основном цикле сделать.
Реклама
mypkot
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт сен 20, 2011 10:27:32

Re: Вибротаймер на Attiny13

Сообщение mypkot »

Все бы замечательно, но мк горит, когда выставляешь фюзы на 128 Гц(проверено 2 раза). Могу только на 4,8 МГц прошить.

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

//мк ATtiny13
//F_CPU = 4800000



#include <avr/io.h>
#include <avr/interrupt.h>

ISR(SIG_OVERFLOW0) 
{
  PORTB ^= 0x01;
  TCNT0  = (256 - 234);
}
                       
int main(void)
{
  PORTB  =  0b00111111;
  DDRB   =  0b00000001;

  // Таймер  
  TCCR0A = 0; 
  TCCR0B = 0b00000101; //делитель
  TCNT0  = (256 - 234);
  TIMSK0 = 0b00000010; // Разрешение прерываний по переполнению
        
  sei();
  while (1) {} 
}
// частота тактов мк = 4800000 Гц
// 4800000/1024= 4687 Гц - частота тактов для таймера
// 1/4687 = 213 мкс - длительность одного такта для таймера
// TCN0= 256-234
//
// 234 (устанавливаемое значение) - это количество тактов до переполнения, которое набегает от начального состояния регистра TCNT0 до его переполнения
234 такта * 213 мкс = 49842 мкс = ~ 0.05 с


//То есть через каждые 0.05 с будет вызываться прерывание и каждый раз будет изменяться состояние выхода PB0
Длительность включённого состояния 0.05 с
Длительность выключенного состояния 0.05 с

Эта информация взята с сайта, изменена под свои потребности, возник вопрос что изменить в коде для того чтобы после достижение определенного времени (в моем случае 33 мин.), загорался светодиод и горел.
Считаем 0,05 сек* 20 000 = 2000 сек = ~ 33 мин. Как это организовать в коде?

ссылка на сайт http://sotvorimvmeste.ru/viewtopic.php?f=36&t=74
Пример 14. Работа с таймером. Прерывание по переполнению
Реклама
mypkot
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт сен 20, 2011 10:27:32

Re: Вибротаймер на Attiny13

Сообщение mypkot »

Всем добрый вечер
Вопрос по коду этой схемы: http://radiokot.ru/circuit/digital/home/71/

вот сам код:

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

.nolist
;Пpогpамма "Вибро-таймер" 
;Пpоцессоp ATtyny12L(V) Используется внутренний генератор на внешнем кварце 32 КГц

;Для данного устройства использован микроконтроллер:
;ATtyny12L(V)
;
;Биты конфигурации:
;Lock2 = Programmed (0)
;Lock1 = Programmed (0)
;
;SPIEN = Programmed (0)
;RSTDISBL = Unprogrammed (1) (!)
;BODLEVEL = Programmed (0)
;BODEN = Programmed (0)
;CKSEL3 = Unprogrammed (1)
;CKSEL2 = Programmed (0)
;CKSEL1 = Programmed (0)
;CKSEL0 = Unprogrammed (1)

;CKSEL для прошивки 1111 (для прошивки глючного МК)

;* биты конфигурации прошиваются после записи самой прошивки

; Сигналы:
; PB0 - вибратор
; PB1 - кнопка
; PB2 - светодиод
; PB3 - кварц
; PB4 - кварц

;Y - системный таймер (инкрементируется 16 раз в секунду)
;r15 - настройка интервала времени (0-5мин., 1-10, 2-20, 3-30, 4-40, 5-60)
;r14 - флаг о том что надо включить оповещение (0-нет, 1-да)
;r10 - всегда ноль
;r11 - всегда 1
;r24 - служкбный в прерывании
;r25 - служкбный в прерывании
;r13 - для выбора режима мигания в прерывании (FF-выключено, 0-мигает дежурно, n-мигает n/2 вспышек)
;r8 - буфер для SREG

		.include	"tn12def.inc"
		.CSEG
		.org		$0000
		rjmp		start
		rjmp		intt0		;INT0addr = 0x0001 ; External Interrupt 0
		reti		;PCI0addr = 0x0002 ; External Interrupt Request 0
		rjmp		timer		;OVF0addr = 0x0003 ; Timer/Counter0 Overflow
		reti		;ERDYaddr = 0x0004 ; EEPROM Ready
		reti		;ACIaddr = 0x0005 ; Analog Comparator

start:	ldi		r16,3			;установка 30 мин. при подаче питания
		mov		r15,r16
agein:	cli						;запрет прерываний
		clr		r10
		ldi		r16,1
		mov		r11,r16
		sbi		ACSR,ACD		;отключить аналоговый компаратор
		ldi		r16,0b00000101	;настройка порта ввода-вывода
		out		DDRb,r16
		ldi		r16,0b00000010
		out		PORTb,r16

		wdr
		ldi		r16,0b00010110	;запуск собачьего таймера
		out		WDTCR,r16
		ldi		r16,0b00011110
		out		WDTCR,r16

		ldi		r16,0b00000000	;выключить внешнее прерывание по низкому уровню
		out		GIMSK,r16
		ldi		r16,0b00110000	;настройка работы прерывания и выбор режима SLEEP
		out		MCUCR,r16

		ldi		r16,0b00000010	;запуск таймера на 16 Гц 
		out		TCCR0,r16		;прерывания при переполнении
		ldi		r16,0b00000010
		out		TIMSK,r16		;включить от него прерывание
		clr		YL
		clr		YH
		clr		r14
		ser		r16
		mov		r13,r16
		sei

		sbi		PORTb,0			;включаем светодиод и вибро
		sbi		PORTb,2

		ldi		r17,70			;1.5сек.
on6:	wdr
		rcall	delay
		dec		r17
		brne	on6

		cbi		PORTb,0			;выключаем светодиод и вибро
		cbi		PORTb,2

		mov		r16,r15			;даём команду промигать число в зависимости от установленного интервала
		inc		r16
		mov		r13,r16

res_b1:	ldi		r17,10			;ожидаем отпускание кнопки	
wait2:	wdr
		rcall	delay
		in		r16,PINb
		andi	r16,0b00000010
		breq	res_b1
		dec		r17
		brne	wait2
		ser		r18
		
main:	wdr						;основной цикл
		tst		r14
		brne	alarm
		rcall	delay
		in		r16,PINb
		andi	r16,0b00000010
		brne	rst_b1
		dec		r18
		brne	main
		rjmp	pwroff

rst_b1:	cpi		r18,123			;время после которого считается что кнопка была нажата
		brlo	press
		ldi		r18,125			;время ожидания удержания кнопки для выключения
		rjmp	main

press:	inc		r15
		mov		r16,r15
		cpi		r16,6
		brlo	skip
		clr		r15
skip:	rjmp	agein			;изменяем режим и перезапускаемся

alarm:	clr		r14				;процедура оповещения
		ser		r16
		mov		r13,r16

		sbi		PORTb,0			;включаем светодиод и вибро
		sbi		PORTb,2

		ldi		r17,45			;1сек.
on1:	wdr
		rcall	delay
		dec		r17
		brne	on1

		cbi		PORTb,0			;выключаем светодиод и вибро
		cbi		PORTb,2

		ldi		r17,45			;1сек.
on2:	wdr
		rcall	delay
		dec		r17
		brne	on2

		sbi		PORTb,0			;включаем светодиод и вибро
		sbi		PORTb,2

		ldi		r17,45			;1сек.
on3:	wdr
		rcall	delay
		dec		r17
		brne	on3

		cbi		PORTb,0			;выключаем светодиод и вибро
		cbi		PORTb,2

		clr		r13
		rjmp	main

delay:	clr		r16
del1:	dec		r16
		brne	del1
		ret

pwroff:	clr		r14				;процедура выключения питания
		ser		r16
		mov		r13,r16
		sbi		PORTb,0			;включаем светодиод и вибро
		sbi		PORTb,2

		ldi		r17,25			;0.5сек.
on5:	wdr
		rcall	delay
		dec		r17
		brne	on5

		cbi		PORTb,0			;выключаем светодиод и вибро
		cbi		PORTb,2

res_c1:	ldi		r17,10			;ожидаем отпускание кнопки	
wait5:	wdr
		rcall	delay
		in		r16,PINb
		andi	r16,0b00000010
		breq	res_c1
		dec		r17
		brne	wait5

no_on:	ldi		r16,0b00000000	;выключить таймер
		out		TCCR0,r16
		wdr
		ldi		r16,0b00011110	;остановка собачьего таймера
		out		WDTCR,r16
		ldi		r16,0b00000110
		out		WDTCR,r16
		cli
		ldi		r16,0b01000000	;включить внешнее прерывание по низкому уровню
		out		GIMSK,r16
		ldi		r16,0b01100000
		out		GIFR,r16
		sei

		sleep					;спим, батарейки не жрать!

		ldi		r17,100			;ожидаем достаточного удержания кнопки	
wait6:	rcall	delay
		in		r16,PINb
		andi	r16,0b00000010
		brne	no_on
		dec		r17
		brne	wait6
		rjmp	agein


intt0:	ldi		r24,0b00000000	;выключить внешнее прерывание по низкому уровню
		out		GIMSK,r24
		reti

timer:	in		r8,SREG
		mov		r24,r13			;обработка прерывания от таймера (инкремент системного таймера) (16 раз в сек.)
		cpi		r24,$FF
		brne	led
		ser		r25
		rjmp	time
led:	tst		r24
		breq	stanby

		cpi		r25,$FF			;индикация режима
		breq	of_ld2
		dec		r25
		brne	time
		in		r24,PORTb
		andi	r24,0b00000100
		breq	on_ld2
of_ld2:	ldi		r25,8			;время погашенного светодиода
		cbi		PORTb,2
		dec		r13
		brne	time
		ser		r25
		rjmp	time
on_ld2:	ldi		r25,5			;время включенного светодиода
		sbi		PORTb,2
		rjmp	time

stanby:	cpi		r25,$FF
		breq	of_ld1
		dec		r25
		brne	time
		in		r24,PORTb
		andi	r24,0b00000100
		breq	on_ld1
of_ld1:	ldi		r25,48			;время погашенного светодиода в режиме работы
		cbi		PORTb,2
		rjmp	time
on_ld1:	ldi		r25,1			;время включенного светодиода в режиме работы
		sbi		PORTb,2

time:	add		YL,r11
		adc		YH,r10
		mov		r24,r15
		cpi		r24,1
		breq	min10
		cpi		r24,2
		breq	min20
		cpi		r24,3
		breq	min30
		cpi		r24,4
		breq	min40
		cpi		r24,5
		breq	min60

min5:	cpi		YH,high(4800)
		brne	end_i
		cpi		YL,low(4800)
		brne	end_i
		rjmp	zero

min10:	cpi		YH,high(9600)
		brne	end_i
		cpi		YL,low(9600)
		brne	end_i
		rjmp	zero

min20:	cpi		YH,high(19200)
		brne	end_i
		cpi		YL,low(19200)
		brne	end_i
		rjmp	zero

min30:	cpi		YH,high(28800)
		brne	end_i
		cpi		YL,low(28800)
		brne	end_i
		rjmp	zero

min40:	cpi		YH,high(38400)
		brne	end_i
		cpi		YL,low(38400)
		brne	end_i
		rjmp	zero

min60:	cpi		YH,high(57600)
		brne	end_i
		cpi		YL,low(57600)
		brne	end_i
		rjmp	zero

end_i:	out		SREG,r8
		reti

zero:	clr		YL
		clr		YH
		ldi		r24,1
		mov		r14,r24
		out		SREG,r8
		reti






Собственно сам вопрос, если изменить значение в коде

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

min20:	cpi		YH,high(19200)
		brne	end_i
		cpi		YL,low(19200)
		brne	end_i
		rjmp	zero
С 19200 на 23040 - то он будет откликаться не каждые 20 мин., а 24 мин..?

Это из расчетов что 5 мин. = 4800, 1 мин.= 960, соответственно 24 мин.* 960 = 23040 . Этого изменения будет достаточно чтобы вместо 20 мин., он откликался на 24 мин.?
Спасибо.
mypkot
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт сен 20, 2011 10:27:32

Re: Вибротаймер на Attiny13

Сообщение mypkot »

на железе не заработало, только схему запорол. т.к. после прошивки фюзов, мк не видеться
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Вибротаймер на Attiny13

Сообщение ibiza11 »

МК не видится программатором не от того, что фьюзы на 128кГц его запороли, а от того, что частота, с которой программатор опрашивает микроконтроллер больше четверти тактовой частоты (128кГц / 4 = 32кГц). Для программирования микроконтроллера в этом режиме нужно настроить программатор AVR или его софт таким образом, чтобы он опрашивал микроконтроллер с частотой меньше 32кГц.
Ставим плюсы: )
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: Вибротаймер на Attiny13

Сообщение serg_svd »

Есть ли прошивка на данный вибротаймер под ATtiny13A?
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Вибротаймер на Attiny13

Сообщение pyzhman »

Ничто не мешает написать такую прошивку. Час времени - и вуаля, она у вас.
Docendo discimus
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: Вибротаймер на Attiny13

Сообщение serg_svd »

Да я не спорю и видимо так и придется поступить. Дело в том, что таймер нужен был срочно и именно под тини 13. Других 8 ножек у меня в наличии нет. Там не предусмотрено тактирование кварцем, поэтому точность будет не ахти.
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
alex_
Опытный кот
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Re: Вибротаймер на Attiny13

Сообщение alex_ »

Все бы замечательно, но мк горит, когда выставляешь фюзы на 128 Гц(проверено 2 раза). Могу только на 4,8 МГц прошить.
Нифига он не горит, он становиться очень медленным для того чтобы среагировать на сигналы программатора. У меня было подобное удалось вылечить с помощью переходника USB-COM, мой собран на FT232, можно и на другой они ещё медленнее работают(Pony Prog), или другой вариант тормозить программатор как то програмно
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: Вибротаймер на Attiny13

Сообщение serg_svd »

Да зачем в наше время пользоваться пони?
Тот же USBasp отличный программатор и джампер для понижения частоты SCK есть.
И сделать его несложно. И проблем в дальнейшем не будет
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
alex_
Опытный кот
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Re: Вибротаймер на Attiny13

Сообщение alex_ »

По старинке и потому что пользуюсь программатором JDM. Почти собран СТК-500 но ещё не до конца.
Кстати USBasp это вроде как железо а пони это программа, это вроде как тёплое с мягким, вещи не сравнимые.
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: Вибротаймер на Attiny13

Сообщение serg_svd »

alex_ писал(а): вещи не сравнимые.
Да это яснее ясного. Я про то, что названый мной программатор пусть и не самый лучший, но все же лучше адаптеров для пони. Я с них тоже начинал.
Тут совокупность программно-аппаратных средств надо сравнивать
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
alex_
Опытный кот
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Re: Вибротаймер на Attiny13

Сообщение alex_ »

Ты прав, скоро дособираю СТК-500 и забуду про пони.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Вибротаймер на Attiny13

Сообщение pyzhman »

serg_svd писал(а):...точность будет не ахти.
На каком отрезке времени насколько упадёт? :))
Docendo discimus
Аватара пользователя
alex_
Опытный кот
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Re: Вибротаймер на Attiny13

Сообщение alex_ »

Ну точно будет частота плавать при изменении температуры, а на сколько можно увидеть по графикам в даташите. К тому же внутренний генератор колибровать придётся. У меня тинька настроена на частоту 4,8МГц а по факту получается чуть меньше 4МГц. Пока не калабровал.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Вибротаймер на Attiny13

Сообщение pyzhman »

Температура в помещении намного плавает? И что, опять же, сложно подвести программу от 4,8 к 4?
Docendo discimus
Ответить

Вернуться в «AVR»