Страница 1 из 3

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

Добавлено: Пт окт 19, 2012 00:46:44
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

Возможно это сделать?

Re: Attiny13

Добавлено: Пт окт 19, 2012 06:54:59
pyzhman
На словах вибратор, в схеме светодиод. Чего делать-то? Как отключать когда сработало?

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

Добавлено: Пт окт 19, 2012 16:33:10
mypkot
http://radiokot.ru/circuit/digital/home/71/

можно заменить сдесь мк Attiny12 на Attiny13A ?

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

Добавлено: Пт окт 19, 2012 18:15:03
ChipKiller
Много лишнего показалось. И т.к. не разбираюсь в мк .... Решил упростить до безобразия.
.... можно, но если "не разбираюсь в мк" зачем выкидывать кнопку? .... разве что для "...безобразия" :)

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

Добавлено: Пт окт 19, 2012 18:48:13
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 мс) ?

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

Добавлено: Пт окт 19, 2012 22:42:41
спящий
К ресет ненадо прикладывать питание - это же сброс контроллера.

А вот это что? while (1==1), или вот так while (1) я в СИ неочень.А вот _delay_ms(2000) туда любое число вставлять можно?

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

Добавлено: Сб окт 20, 2012 13:19:30
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 мин.
У меня все тот же вопрос, в реальной жизни будет работать ???

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

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

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

Добавлено: Вс ноя 04, 2012 05:36:25
mypkot
Я немножко продвинулся и стало интересно ). Светодиодом моргать научился, а вот управлять клавишами нет =)
Может кто поможет организовать такую програмку:
две кнопки, два диода

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

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

Вроде можно организовать с помощю циклов, только как ума не прилажу.
мяу, если не ответите я не обижусь и буду сам пытаться, хотя многое перепробывал %))

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

Добавлено: Вс ноя 04, 2012 11:47:21
vitalik_1984
Все просто делаем прерывание по спаду фронта меняем там флаги разрешения одного цикла и запрета второго.
Далее пишем в таком духе

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

while (i&flag1){
////тут выполнение первого цикла
i++;
}
 

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

Добавлено: Вс ноя 04, 2012 20:33:13
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);
}
}

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

Добавлено: Вс ноя 04, 2012 23:06:01
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;
} 
Если нужна бОльшая точность, нужно использовать таймер.

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

Добавлено: Вс ноя 04, 2012 23:26:33
просто КОТ
Можно отметиться?!

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

Добавлено: Вс ноя 04, 2012 23:35:18
mypkot
Спасибо всем за ответы, но я только что спалил мк.
Прошивал Фьюзы на Аttiny13 в режиме 128кГц, ругнулся, умер... земля ему пухом.
Всем спасибо, разживусь на новый продолжу. Хорошего вечера :)))

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

Добавлено: Пн ноя 05, 2012 15:43:38
просто КОТ
Я когда первый МК прошил (а это именно Тини13) всё заработало, с первого раза. Потом нечаянно питание с 3В до 12В повысил. МК даже не успел ничего сделать. Яркая вспышка всех светодиодов и всё погасло. Так я сжог первый МК...

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

Добавлено: Сб ноя 10, 2012 21:04:19
mypkot
Вечер добрый, купил я все таки новый мк13А, продолжим =)))
Есть проблема, код программы

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

while (1)
      {       сама программа длинная

if (PINB.3==1) //  кнопка
{
                PORTB.1 = 1; 
         delay_ms(100000); 
         PORTB.1 = 0; 
         delay_ms(100);  


}}} 


Вопрос, если программа маленькая, то при нажатии всё выполняется, но если большая, - нет выполнения.

Как организовать чтобы программа прерывалась нажатием на кнопку и выполнялась другая программа?

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

Добавлено: Сб ноя 10, 2012 21:38:19
просто КОТ
Применить прерывания.

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

Добавлено: Сб ноя 10, 2012 22:56:40
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);

}



}}

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

Добавлено: Сб ноя 10, 2012 23:39:22
m.ix
Замечательная вещица.

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

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

для тини13

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

Добавлено: Сб ноя 10, 2012 23:56:06
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 минуты =). Жаль немогу много понять по таймерам, так бы подсказал .