Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Attiny 13. кнопка + светодиод + звук (как все связать)


Attiny 13. кнопка + светодиод + звук (как все связать)

Сообщений 1 страница 8 из 8

1

Есть такая схема (во вложении), должно работать так: при отпускании кнопки должен мигать светодиод и играть звук, длительностью одна минута, после этого программа должна переходить в начало опроса кнопки. Как сделать чтобы светодиод и звук работали одновременно, и как написать чтобы мигание и звук продолжались только 1 минуту. Вот что удалось написать самому. Спасибо.

$regfile = "attiny13.dat"
$crystal = 8000000

Config Pinb.3 = Input
Config Portb.2 = Output

Do

If Pinb.3 = 0 Then Portb.2 = 0
If Pinb.3 = 1 Then Portb.2 = 1
If Portb.2 = 1 Then Goto Metka1

Loop

Metka1:

Waitms 1000
If Portb.2 = 1 Then Portb.2 = 0
Waitms 1000
If Portb.2 = 0 Then Portb.2 = 1
Waitms 1000

Sound , Portb.0 , 65 , 1274 'C2(1/16)
Waitms 125 'P(1/16)
Sound , Portb.0 , 87 , 954 'F2(1/16)
Waitms 125 'P(1/16)
Sound , Portb.0 , 98 , 850 'G2(1/16)
Waitms 125 'P(1/16)
Sound , Portb.0 , 87 , 954 'F2(1/16)
Sound , Portb.0 , 117 , 715 'Ais2(1/16)
Waitms 125 'P(1/16)
Sound , Portb.0 , 110 , 758 'A2(1/16)
Waitms 125 'P(1/16)
Sound , Portb.0 , 98 , 850 'G2(1/16)
Waitms 125 'P(1/16)
Sound , Portb.0 , 110 , 758 'A2(1/16)
Sound , Portb.0 , 87 , 954 'F2(1/16)
Waitms 125 'P(1/16)
Wait 2

End

0

2

Мигать должен как то по особенному или как получится?
можно так:
Waitms 1000
Sound , Portb.0 , 65 , 1274 'C2(1/16)
Waitms 125 'P(1/16)
set portb.2
Sound , Portb.0 , 87 , 954 'F2(1/16)
Waitms 125 'P(1/16)
reset portb.2
итд

минуту можно считать по таймеру.

0

3

а как именно можно отсчитать минуту звука по таймеру ?

идея такова: при отпускании кнопки, на одном порте мигает светодиод (любое мигание, просто как индикатор), а на другом порте инициализируется звук, (в виде мелодии) вся эта цветомузыка работает ровно минуту, (не обращая больше  внимания на кнопку) а через минуту все прекращается и опять ждет нажатия кнопки. Буду очень очень благодарен за помощь.

0

4

jumbo написал(а):

а как именно можно отсчитать минуту звука по таймеру ?

идея такова: при отпускании кнопки, на одном порте мигает светодиод (любое мигание, просто как индикатор), а на другом порте инициализируется звук, (в виде мелодии) вся эта цветомузыка работает ровно минуту, (не обращая больше  внимания на кнопку) а через минуту все прекращается и опять ждет нажатия кнопки. Буду очень очень благодарен за помощь.

На int0 вешаете кнопку. Заводите timer0. Разрешаете прерывания на timer0 и int0. При prescale 256 на таймере (это максимум) он будет переполняться каждые 0,00816 сек. Вводим программный счётчик и считаем переполнения таймера. Т.о. 123 переполнения дадут 1с, 7253 переполнения дадут 1 минуту. В общем и целом, всё.

Отредактировано Tankor (2016-03-02 15:34:53)

0

5

а пример кода можно :dontknow: ,

особенно интересует переполнение счетчика, как считать и как запускать.

0

6

CONFIG INT0 = rising '(срабатывание по возрастанию фронта)
CONFIG TIMER0 = TIMER , PRESCALE= 256
Config Pinb.3 = Input
set Portb.3 ' Подтяжка к питанию внутренним резистором
Config Portb.2 = Output
led alias portb.2
dim count_led as byte: LED_byte
dim count as word: count=0
dim key_byte as byte: key_byte=0

on int0 key
on timer0 sound_on
enable interrupts
enable int0
enable timer0
stop timer0

do
if key_byte=1 then
Sound , Portb.0 , 65 , 1274 'C2(1/16)
Waitms 125 'P(1/16)
Sound , Portb.0 , 87 , 954 'F2(1/16)
Waitms 125 'P(1/16)
Sound , Portb.0 , 98 , 850 'G2(1/16)
Waitms 125 'P(1/16)
Sound , Portb.0 , 87 , 954 'F2(1/16)
Sound , Portb.0 , 117 , 715 'Ais2(1/16)
Waitms 125 'P(1/16)
Sound , Portb.0 , 110 , 758 'A2(1/16)
Waitms 125 'P(1/16)
Sound , Portb.0 , 98 , 850 'G2(1/16)
Waitms 125 'P(1/16)
Sound , Portb.0 , 110 , 758 'A2(1/16)
Sound , Portb.0 , 87 , 954 'F2(1/16)
Waitms 125 'P(1/16)
end if
loop
end

key:
key_byte=1
count=0
count_led=0
timer0=0
start timer0
return

sound_on:
incr count
incr count_led
if count_led=123 then 'мигание светодиодом с частотой 1 сек
toggle led
count_led=0
end if
if count=7253 then ' Этот счётчик на 1 мин.
key_byte=0
stop timer0
end if
return

Просто написано без проверки за 5 мин. Нет анти дребезга контактов. Оптимальности тоже нет  :D Вроде логика есть, но... кто знает, проверять надо.

Отредактировано Tankor (2016-03-02 22:01:09)

0

7

Tankor написал(а):

При prescale 256 на таймере (это максимум)


prescale = 1024

0

8

sasha_1973
Упс, не доглядел. Тогда необходимо изменить данные переменных count=1800 и count_led=30. Прошу прощения.

Отредактировано Tankor (2016-03-03 07:22:42)

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Attiny 13. кнопка + светодиод + звук (как все связать)