Вибротаймер на Attiny13
Вибротаймер на Attiny13
Нашел схему вибротаймера на этом сайте radiokot.ru/circuit/digital/home/71/.
Много лишнего показалось. И т.к. не разбираюсь в мк, но хотелось бы сделать напоминалку на 1 час (бесконечный цикл)
Решил упростить до безобразия. Схема ниже.
Возможно переделать чтобы был сигнал каждый час (на вибротаблетку), предварительно поставив маломощный транзистор.
прошивка для микроконтроллера написана в среде BASCOM-AVR.
Исходник прошивки:
$regfile = "attiny13.dat"
Config Portb = Output
Do
Portb = 255
Waitms 100
Portb = 0
Waitms 100
Loop
End
Возможно это сделать?
Много лишнего показалось. И т.к. не разбираюсь в мк, но хотелось бы сделать напоминалку на 1 час (бесконечный цикл)
Решил упростить до безобразия. Схема ниже.
Возможно переделать чтобы был сигнал каждый час (на вибротаблетку), предварительно поставив маломощный транзистор.
прошивка для микроконтроллера написана в среде BASCOM-AVR.
Исходник прошивки:
$regfile = "attiny13.dat"
Config Portb = Output
Do
Portb = 255
Waitms 100
Portb = 0
Waitms 100
Loop
End
Возможно это сделать?
- Реклама
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Attiny13
На словах вибратор, в схеме светодиод. Чего делать-то? Как отключать когда сработало?
Docendo discimus
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Вибротаймер на Attiny13
.... можно, но если "не разбираюсь в мк" зачем выкидывать кнопку? .... разве что для "...безобразия"Много лишнего показалось. И т.к. не разбираюсь в мк .... Решил упростить до безобразия.
Re: Вибротаймер на Attiny13
Доброго времени суток
Написал примитивную программу в AVR Studio на Си
, залил в прошивку на Proteus, вот что получилось рис ниже.
Вопрос будет работать в реале, если заменю светодиод виброкнопкой и c учетом что сигнал будет каждый час (3600000 мс) ?
Написал примитивную программу в AVR Studio на Си
Код: Выделить всё
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB = 0xFF;
while (1==1)
{
PORTB = 0b11111111;
_delay_ms(2000);
PORTB = 0b00000000;
_delay_ms(900000);
}
}Вопрос будет работать в реале, если заменю светодиод виброкнопкой и c учетом что сигнал будет каждый час (3600000 мс) ?
- Вложения
-
- 1.jpg
- (51.03 КБ) 726 скачиваний
- Реклама
Re: Вибротаймер на Attiny13
К ресет ненадо прикладывать питание - это же сброс контроллера.
А вот это что? while (1==1), или вот так while (1) я в СИ неочень.А вот _delay_ms(2000) туда любое число вставлять можно?
А вот это что? while (1==1), или вот так while (1) я в СИ неочень.А вот _delay_ms(2000) туда любое число вставлять можно?
Re: Вибротаймер на Attiny13
While (1==1) бесконечный цикл
насчет _delay_ms и сколько можно указывать я даже незнаю
Переписал код
т.е. что бы каждые пол часа был сигнал. В Протеусе выполняется каждые 24 мин. (потеря 2 мин на 10 мин.)
если поставлю на каждый час , то сигнал будет происходить каждые 48 мин.
У меня все тот же вопрос, в реальной жизни будет работать ???
насчет _delay_ms и сколько можно указывать я даже незнаю
Переписал код
Код: Выделить всё
#define F_CPU 12800L
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB = 0xFF;
while (1==1)
{
PORTB = 0b11111111;
_delay_ms(2000);
PORTB = 0b00000000;
_delay_ms(1800000);
}
}
если поставлю на каждый час , то сигнал будет происходить каждые 48 мин.
У меня все тот же вопрос, в реальной жизни будет работать ???
- Вложения
-
- untitled.jpg
- (61.66 КБ) 557 скачиваний
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вибротаймер на Attiny13
С такими комментариями запинают.Действительно ресет это сброс контроллера, но сброс низким уровнем.Значит при отключеном ресет вполне вероятно, что Мк посчитает это низким уровнем.Так что подключать к плюсу нужно, но через резистор 1кОм -10кОм чтобы была возможность внутрисхемного программирования.Пусть на этом Мк это и не нужно, но для общего развития пригодится.спящий писал(а):К ресет ненадо прикладывать питание - это же сброс контроллера.
while(условие для повторения цикла) если в результат в условии не равен нулю, цикл повторяется.Соответственно 1 не может быть нулем, значит цикл будет продолжаться бесконечно.спящий писал(а):
А вот это что? while (1==1), или вот так while (1) я в СИ неочень.А вот _delay_ms(2000) туда любое число вставлять можно?
В делей можно использовать любые целые числа, если они большие, то точность снижается, и если за допустимый предел выходит, по идее тоже должно предупредить.
Переменные не получится запихать.
В поисках истины человек развивается.
Re: Вибротаймер на Attiny13
Я немножко продвинулся и стало интересно ). Светодиодом моргать научился, а вот управлять клавишами нет =)
Может кто поможет организовать такую програмку:
две кнопки, два диода
если нажимаешь одну кнопку диод мограет 0,5 сек., каждые 10 секунд;
если нажимаешь вторую, второй диод моргает (0,5 сек) через 4, потом 8 и 16 секунд = цикл повторяется.
Вроде можно организовать с помощю циклов, только как ума не прилажу.
мяу, если не ответите я не обижусь и буду сам пытаться, хотя многое перепробывал %))
Может кто поможет организовать такую програмку:
две кнопки, два диода
если нажимаешь одну кнопку диод мограет 0,5 сек., каждые 10 секунд;
если нажимаешь вторую, второй диод моргает (0,5 сек) через 4, потом 8 и 16 секунд = цикл повторяется.
Вроде можно организовать с помощю циклов, только как ума не прилажу.
мяу, если не ответите я не обижусь и буду сам пытаться, хотя многое перепробывал %))
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вибротаймер на Attiny13
Все просто делаем прерывание по спаду фронта меняем там флаги разрешения одного цикла и запрета второго.
Далее пишем в таком духе
Далее пишем в таком духе
Код: Выделить всё
while (i&flag1){
////тут выполнение первого цикла
i++;
}
Re: Вибротаймер на Attiny13
появилась окончательная задача.
Без кнопок, 2 светодиода.
Один моргает каждые 10 сек., второй каждые 5 мин.. Как это организовать в программном коде, пробывал через for кучу ошибок мне пишет, с флагами тоже неочень понятно.
еще непонятно как задать второй порт, один PORTB , а др. как указать?
Всем хорошего дня !!!:)))
в Code Avr написал вот такую программу
while (1)
{
PORTB.0 = 1;
delay_ms(300);
PORTB.0 = 0;
delay_ms(7500);
PORTB.1 = 1;
delay_ms(1000);
PORTB.1 = 0;
delay_ms(10000);
}
}
запустил в протеусе.
1й светодиод мигнул на 1й,18,36,55 секунде
2й на 8,26
организация в силе один должен блымать каждые 10 сек., второй каждые 5 мин.
может быть я что то не так делаю
ЭВРИКА!!!
PORTB.0 = 1;
delay_ms(300);
PORTB.0 = 0;
delay_ms(10000);
PORTB.0 = 1;
delay_ms(300);
PORTB.0 = 0;
delay_ms(10000);
PORTB.0 = 1;
delay_ms(300);
.... и так 30 раз (как раз ~5 мин.), потом...
PORTB.1 = 1;
delay_ms(1000);
PORTB.1 = 0;
delay_ms(10000);
}
}
Без кнопок, 2 светодиода.
Один моргает каждые 10 сек., второй каждые 5 мин.. Как это организовать в программном коде, пробывал через for кучу ошибок мне пишет, с флагами тоже неочень понятно.
еще непонятно как задать второй порт, один PORTB , а др. как указать?
Всем хорошего дня !!!:)))
в Code Avr написал вот такую программу
while (1)
{
PORTB.0 = 1;
delay_ms(300);
PORTB.0 = 0;
delay_ms(7500);
PORTB.1 = 1;
delay_ms(1000);
PORTB.1 = 0;
delay_ms(10000);
}
}
запустил в протеусе.
1й светодиод мигнул на 1й,18,36,55 секунде
2й на 8,26
организация в силе один должен блымать каждые 10 сек., второй каждые 5 мин.
может быть я что то не так делаю
ЭВРИКА!!!
PORTB.0 = 1;
delay_ms(300);
PORTB.0 = 0;
delay_ms(10000);
PORTB.0 = 1;
delay_ms(300);
PORTB.0 = 0;
delay_ms(10000);
PORTB.0 = 1;
delay_ms(300);
.... и так 30 раз (как раз ~5 мин.), потом...
PORTB.1 = 1;
delay_ms(1000);
PORTB.1 = 0;
delay_ms(10000);
}
}
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вибротаймер на Attiny13
Чтот это не совсем похоже на начальную тему.
И задание не окончательное.
Непонятна длительность моргания каждого диода.
Вообще текст прост
Если нужна бОльшая точность, нужно использовать таймер.
И задание не окончательное.
Непонятна длительность моргания каждого диода.
Вообще текст прост
Код: Выделить всё
#define LED1_COUNT_MAX 10
#define LED2_COUNT_MAX 300
unsigned char led1_count;
unsigned int led1_count;
//Моргание первым диодом
void Led_1_blink(void){
PORTB.0 = 1;
delay_ms(300);
PORTB.0 = 0;
led1_count=0;
}
//Моргание вторым диодом
void Led_2_blink(void){
PORTB.1 = 1;
delay_ms(300);
PORTB.1 = 0;
led2_count=0;
}
while (1)
{delay_ms(1000);
led1_count++;
led2_count++;
if (led1_count>=LED1_COUNT_MAX)Led_1_blink;
if (led2_count>=LED2_COUNT_MAX)Led_1_blink;
} - просто КОТ
- Друг Кота
- Сообщения: 12364
- Зарегистрирован: Пт дек 17, 2010 15:07:50
- Откуда: Крымский Федеральный Округ
- Контактная информация:
Re: Вибротаймер на Attiny13
Спасибо всем за ответы, но я только что спалил мк.
Прошивал Фьюзы на Аttiny13 в режиме 128кГц, ругнулся, умер... земля ему пухом.
Всем спасибо, разживусь на новый продолжу. Хорошего вечера
Прошивал Фьюзы на Аttiny13 в режиме 128кГц, ругнулся, умер... земля ему пухом.
Всем спасибо, разживусь на новый продолжу. Хорошего вечера
- просто КОТ
- Друг Кота
- Сообщения: 12364
- Зарегистрирован: Пт дек 17, 2010 15:07:50
- Откуда: Крымский Федеральный Округ
- Контактная информация:
Re: Вибротаймер на Attiny13
Я когда первый МК прошил (а это именно Тини13) всё заработало, с первого раза. Потом нечаянно питание с 3В до 12В повысил. МК даже не успел ничего сделать. Яркая вспышка всех светодиодов и всё погасло. Так я сжог первый МК...
Re: Вибротаймер на Attiny13
Вечер добрый, купил я все таки новый мк13А, продолжим =)))
Есть проблема, код программы
Вопрос, если программа маленькая, то при нажатии всё выполняется, но если большая, - нет выполнения.
Как организовать чтобы программа прерывалась нажатием на кнопку и выполнялась другая программа?
Есть проблема, код программы
Код: Выделить всё
while (1)
{ сама программа длинная
if (PINB.3==1) // кнопка
{
PORTB.1 = 1;
delay_ms(100000);
PORTB.1 = 0;
delay_ms(100);
}}} Вопрос, если программа маленькая, то при нажатии всё выполняется, но если большая, - нет выполнения.
Как организовать чтобы программа прерывалась нажатием на кнопку и выполнялась другая программа?
- просто КОТ
- Друг Кота
- Сообщения: 12364
- Зарегистрирован: Пт дек 17, 2010 15:07:50
- Откуда: Крымский Федеральный Округ
- Контактная информация:
Re: Вибротаймер на Attiny13
while (1)
{ программа}
interrupt [1] void adc_isr(void) // непонятно что сдесь писать interrupt [?] и сдесь void ? (void)
{
if (PINB.3==1) // кнопка
PORTB.1 = 1;
delay_ms(100000);
PORTB.1 = 0;
delay_ms(100);
}
}}
{ программа}
interrupt [1] void adc_isr(void) // непонятно что сдесь писать interrupt [?] и сдесь void ? (void)
{
if (PINB.3==1) // кнопка
PORTB.1 = 1;
delay_ms(100000);
PORTB.1 = 0;
delay_ms(100);
}
}}
- m.ix
- Друг Кота
- Сообщения: 16545
- Зарегистрирован: Вт сен 07, 2010 03:01:06
- Откуда: Moscow-Izmaylovo
- Контактная информация:
Re: Вибротаймер на Attiny13
Замечательная вещица.
А возможно ли увеличить время до 3 минут.
И время повтора через каждые 10 - 20 - 40 - 60 минут пока не отключишь или не переведёшь в дежурку.
А то на работе иногда кемаю а вот что то услышать не могу.
А то приматал бы к уху эту бибикулку (активный бузер) вот его прекрасно слышу.
для тини13
А возможно ли увеличить время до 3 минут.
И время повтора через каждые 10 - 20 - 40 - 60 минут пока не отключишь или не переведёшь в дежурку.
А то на работе иногда кемаю а вот что то услышать не могу.
А то приматал бы к уху эту бибикулку (активный бузер) вот его прекрасно слышу.
для тини13
Лечу лечить WWWашу покалеченную технику.
Re: Вибротаймер на Attiny13
в AVR Studio на Си делал так:
Получалось каждые 24 минуты =). Жаль немогу много понять по таймерам, так бы подсказал .
Код: Выделить всё
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB = 0xFF;
while (1==1)
{
PORTB = 0b11111111;
_delay_ms(2000);
PORTB = 0b00000000;
_delay_ms(1800000);
}



