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

Обсуждаем контроллеры компании Atmel.
mypkot
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт сен 20, 2011 10:27:32

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

Сообщение mypkot »

Нашел схему вибротаймера на этом сайте 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

Возможно это сделать?
Вложения
fuse.png
(10.98 КБ) 667 скачиваний
Схема.png
(5.84 КБ) 611 скачиваний
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: Attiny13

Сообщение pyzhman »

На словах вибратор, в схеме светодиод. Чего делать-то? Как отключать когда сработало?
Docendo discimus
Реклама
mypkot
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт сен 20, 2011 10:27:32

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

Сообщение mypkot »

http://radiokot.ru/circuit/digital/home/71/

можно заменить сдесь мк Attiny12 на Attiny13A ?
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

Много лишнего показалось. И т.к. не разбираюсь в мк .... Решил упростить до безобразия.
.... можно, но если "не разбираюсь в мк" зачем выкидывать кнопку? .... разве что для "...безобразия" :)
Реклама
Эиком - электронные компоненты и радиодетали
mypkot
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт сен 20, 2011 10:27:32

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

Сообщение mypkot »

Доброго времени суток
Написал примитивную программу в 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);

  
  }
}
, залил в прошивку на Proteus, вот что получилось рис ниже.

Вопрос будет работать в реале, если заменю светодиод виброкнопкой и c учетом что сигнал будет каждый час (3600000 мс) ?
Вложения
1.jpg
(51.03 КБ) 726 скачиваний
Реклама
спящий
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

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

Сообщение спящий »

К ресет ненадо прикладывать питание - это же сброс контроллера.

А вот это что? while (1==1), или вот так while (1) я в СИ неочень.А вот _delay_ms(2000) туда любое число вставлять можно?
Реклама
mypkot
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт сен 20, 2011 10:27:32

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

Сообщение mypkot »

While (1==1) бесконечный цикл
насчет _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);

  
  }
}
т.е. что бы каждые пол часа был сигнал. В Протеусе выполняется каждые 24 мин. (потеря 2 мин на 10 мин.)
если поставлю на каждый час , то сигнал будет происходить каждые 48 мин.
У меня все тот же вопрос, в реальной жизни будет работать ???
Вложения
untitled.jpg
(61.66 КБ) 557 скачиваний
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

спящий писал(а):К ресет ненадо прикладывать питание - это же сброс контроллера.
С такими комментариями запинают.Действительно ресет это сброс контроллера, но сброс низким уровнем.Значит при отключеном ресет вполне вероятно, что Мк посчитает это низким уровнем.Так что подключать к плюсу нужно, но через резистор 1кОм -10кОм чтобы была возможность внутрисхемного программирования.Пусть на этом Мк это и не нужно, но для общего развития пригодится.
спящий писал(а):
А вот это что? while (1==1), или вот так while (1) я в СИ неочень.А вот _delay_ms(2000) туда любое число вставлять можно?
while(условие для повторения цикла) если в результат в условии не равен нулю, цикл повторяется.Соответственно 1 не может быть нулем, значит цикл будет продолжаться бесконечно.
В делей можно использовать любые целые числа, если они большие, то точность снижается, и если за допустимый предел выходит, по идее тоже должно предупредить.
Переменные не получится запихать.
В поисках истины человек развивается.
mypkot
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт сен 20, 2011 10:27:32

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

Сообщение mypkot »

Я немножко продвинулся и стало интересно ). Светодиодом моргать научился, а вот управлять клавишами нет =)
Может кто поможет организовать такую програмку:
две кнопки, два диода

если нажимаешь одну кнопку диод мограет 0,5 сек., каждые 10 секунд;

если нажимаешь вторую, второй диод моргает (0,5 сек) через 4, потом 8 и 16 секунд = цикл повторяется.

Вроде можно организовать с помощю циклов, только как ума не прилажу.
мяу, если не ответите я не обижусь и буду сам пытаться, хотя многое перепробывал %))
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Все просто делаем прерывание по спаду фронта меняем там флаги разрешения одного цикла и запрета второго.
Далее пишем в таком духе

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

while (i&flag1){
////тут выполнение первого цикла
i++;
}
 
mypkot
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт сен 20, 2011 10:27:32

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

Сообщение mypkot »

появилась окончательная задача.
Без кнопок, 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

Сообщение vitalik_1984 »

Чтот это не совсем похоже на начальную тему.
И задание не окончательное.
Непонятна длительность моргания каждого диода.
Вообще текст прост

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

#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

Сообщение просто КОТ »

Можно отметиться?!
Изображение
И ты врёшь!!! © Vladisman
Изображение
mypkot
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт сен 20, 2011 10:27:32

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

Сообщение mypkot »

Спасибо всем за ответы, но я только что спалил мк.
Прошивал Фьюзы на Аttiny13 в режиме 128кГц, ругнулся, умер... земля ему пухом.
Всем спасибо, разживусь на новый продолжу. Хорошего вечера :)))
Аватара пользователя
просто КОТ
Друг Кота
Сообщения: 12364
Зарегистрирован: Пт дек 17, 2010 15:07:50
Откуда: Крымский Федеральный Округ
Контактная информация:

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

Сообщение просто КОТ »

Я когда первый МК прошил (а это именно Тини13) всё заработало, с первого раза. Потом нечаянно питание с 3В до 12В повысил. МК даже не успел ничего сделать. Яркая вспышка всех светодиодов и всё погасло. Так я сжог первый МК...
Изображение
И ты врёшь!!! © Vladisman
Изображение
mypkot
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт сен 20, 2011 10:27:32

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

Сообщение mypkot »

Вечер добрый, купил я все таки новый мк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

Сообщение просто КОТ »

Применить прерывания.
Изображение
И ты врёшь!!! © Vladisman
Изображение
mypkot
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт сен 20, 2011 10:27:32

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

Сообщение mypkot »

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);

}



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

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

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

Замечательная вещица.

А возможно ли увеличить время до 3 минут.
И время повтора через каждые 10 - 20 - 40 - 60 минут пока не отключишь или не переведёшь в дежурку.
А то на работе иногда кемаю а вот что то услышать не могу.

А то приматал бы к уху эту бибикулку (активный бузер) вот его прекрасно слышу.

для тини13
Лечу лечить WWWашу покалеченную технику.
mypkot
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Вт сен 20, 2011 10:27:32

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

Сообщение mypkot »

в 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(1800000);


}
Получалось каждые 24 минуты =). Жаль немогу много понять по таймерам, так бы подсказал .
Ответить

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