Вибротаймер на Attiny13
- m.ix
- Друг Кота
- Сообщения: 16545
- Зарегистрирован: Вт сен 07, 2010 03:01:06
- Откуда: Moscow-Izmaylovo
- Контактная информация:
Re: Вибротаймер на Attiny13
Если можно, что б нагрузку- активный бузер включал и выключал с интервалом 2 вкл и 2 выкл секунды
Так батарейки экономнее используются и не так привычно как обычный интервал в одну секунду.
Так батарейки экономнее используются и не так привычно как обычный интервал в одну секунду.
Лечу лечить WWWашу покалеченную технику.
- Реклама
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вибротаймер на Attiny13
Кстати, или не совсем кстати, Attiny12V не совсем то же самое, что Attiny13 у него отсутствует такой тип тактирования как кварц, только внутренний генератор 4.8/9.6 MHz либо внешний генератор.
- m.ix
- Друг Кота
- Сообщения: 16545
- Зарегистрирован: Вт сен 07, 2010 03:01:06
- Откуда: Moscow-Izmaylovo
- Контактная информация:
Re: Вибротаймер на Attiny13
ТАм особая точность не нужна, пущай хоть на 2 минуты на час опаздывает или бежит, это не существенно.vitalik_1984 писал(а):Attiny13 у него отсутствует такой тип тактирования как кварц, только внутренний генератор 4.8/9.6 MHz либо
Лечу лечить WWWашу покалеченную технику.
Re: Вибротаймер на Attiny13
Добрый день, помоги мне пожалуйста рассчитать задержку на 30 мин. с помощью таймера (Attiny13 9,6 Mhz). Чтобы светодиод загорался на 3 секунды, потом не горел 30 минут. Пожалуйста, очень прошу, я просто не могу понять как это делается.
некоторые вычисления провел, только зачем куда их не знаю:
F=9.6 Mhz
Tclk=1/F
Tclk =1/9600000 = 0.000000104 = 0.104 мксек
некоторые вычисления провел, только зачем куда их не знаю:
F=9.6 Mhz
Tclk=1/F
Tclk =1/9600000 = 0.000000104 = 0.104 мксек
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вибротаймер на Attiny13
Для такой медленной задачи можно использовать 4 источник тактирования - внутренний на 128kHz
считаем 1/128000*1024*250=2 секунды
где 1024- делитель таймера
250-число тиков таймера.Таким образом прерывание таймера будет происходить каждые 2 секунды. Дальше считаем 30 раз, это минута, еще 30 раз по минуте, это ваши пол часа.
А горение светодиода три секунды можно и в основном цикле сделать.
считаем 1/128000*1024*250=2 секунды
где 1024- делитель таймера
250-число тиков таймера.Таким образом прерывание таймера будет происходить каждые 2 секунды. Дальше считаем 30 раз, это минута, еще 30 раз по минуте, это ваши пол часа.
А горение светодиода три секунды можно и в основном цикле сделать.
- Реклама
Re: Вибротаймер на Attiny13
Все бы замечательно, но мк горит, когда выставляешь фюзы на 128 Гц(проверено 2 раза). Могу только на 4,8 МГц прошить.
// частота тактов мк = 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. Работа с таймером. Прерывание по переполнению
Код: Выделить всё
//мк 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/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. Работа с таймером. Прерывание по переполнению
Re: Вибротаймер на Attiny13
Всем добрый вечер
Вопрос по коду этой схемы: http://radiokot.ru/circuit/digital/home/71/
вот сам код:
Собственно сам вопрос, если изменить значение в коде
С 19200 на 23040 - то он будет откликаться не каждые 20 мин., а 24 мин..?
Это из расчетов что 5 мин. = 4800, 1 мин.= 960, соответственно 24 мин.* 960 = 23040 . Этого изменения будет достаточно чтобы вместо 20 мин., он откликался на 24 мин.?
Спасибо.
Вопрос по коду этой схемы: 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Это из расчетов что 5 мин. = 4800, 1 мин.= 960, соответственно 24 мин.* 960 = 23040 . Этого изменения будет достаточно чтобы вместо 20 мин., он откликался на 24 мин.?
Спасибо.
Re: Вибротаймер на Attiny13
на железе не заработало, только схему запорол. т.к. после прошивки фюзов, мк не видеться
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Re: Вибротаймер на Attiny13
МК не видится программатором не от того, что фьюзы на 128кГц его запороли, а от того, что частота, с которой программатор опрашивает микроконтроллер больше четверти тактовой частоты (128кГц / 4 = 32кГц). Для программирования микроконтроллера в этом режиме нужно настроить программатор AVR или его софт таким образом, чтобы он опрашивал микроконтроллер с частотой меньше 32кГц.
Ставим плюсы: )
Re: Вибротаймер на Attiny13
Есть ли прошивка на данный вибротаймер под ATtiny13A?
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Вибротаймер на Attiny13
Ничто не мешает написать такую прошивку. Час времени - и вуаля, она у вас.
Docendo discimus
Re: Вибротаймер на Attiny13
Да я не спорю и видимо так и придется поступить. Дело в том, что таймер нужен был срочно и именно под тини 13. Других 8 ножек у меня в наличии нет. Там не предусмотрено тактирование кварцем, поэтому точность будет не ахти.
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Re: Вибротаймер на Attiny13
Нифига он не горит, он становиться очень медленным для того чтобы среагировать на сигналы программатора. У меня было подобное удалось вылечить с помощью переходника USB-COM, мой собран на FT232, можно и на другой они ещё медленнее работают(Pony Prog), или другой вариант тормозить программатор как то програмноВсе бы замечательно, но мк горит, когда выставляешь фюзы на 128 Гц(проверено 2 раза). Могу только на 4,8 МГц прошить.
Re: Вибротаймер на Attiny13
Да зачем в наше время пользоваться пони?
Тот же USBasp отличный программатор и джампер для понижения частоты SCK есть.
И сделать его несложно. И проблем в дальнейшем не будет
Тот же USBasp отличный программатор и джампер для понижения частоты SCK есть.
И сделать его несложно. И проблем в дальнейшем не будет
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Re: Вибротаймер на Attiny13
По старинке и потому что пользуюсь программатором JDM. Почти собран СТК-500 но ещё не до конца.
Кстати USBasp это вроде как железо а пони это программа, это вроде как тёплое с мягким, вещи не сравнимые.
Кстати USBasp это вроде как железо а пони это программа, это вроде как тёплое с мягким, вещи не сравнимые.
Re: Вибротаймер на Attiny13
Да это яснее ясного. Я про то, что названый мной программатор пусть и не самый лучший, но все же лучше адаптеров для пони. Я с них тоже начинал.alex_ писал(а): вещи не сравнимые.
Тут совокупность программно-аппаратных средств надо сравнивать
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Re: Вибротаймер на Attiny13
Ты прав, скоро дособираю СТК-500 и забуду про пони.
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Вибротаймер на Attiny13
На каком отрезке времени насколько упадёт?serg_svd писал(а):...точность будет не ахти.
Docendo discimus
Re: Вибротаймер на Attiny13
Ну точно будет частота плавать при изменении температуры, а на сколько можно увидеть по графикам в даташите. К тому же внутренний генератор колибровать придётся. У меня тинька настроена на частоту 4,8МГц а по факту получается чуть меньше 4МГц. Пока не калабровал.
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Вибротаймер на Attiny13
Температура в помещении намного плавает? И что, опять же, сложно подвести программу от 4,8 к 4?
Docendo discimus


