Например TDA7294

 Форум РадиоКот • Просмотр темы - BASCOM AVR в вопросах и ответах
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Пт июн 23, 2017 11:57:04



Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 5470 ]  На страницу Пред.  1 ... 270, 271, 272, 273, 274
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
СообщениеДобавлено: Сб июн 17, 2017 16:38:01 
Открыл глаза

Зарегистрирован: Ср фев 01, 2017 18:57:15
Сообщений: 67
Рейтинг сообщения: 0
serg_svd это один из кучи вариантов программы, пробовал всяко.
выход из бесконечности и должен быть только по прерыванию кнопки. главная беда была что возвращение после прерывания кнопки приходилось в долгий цикл, и пока он до конца не доходил - кина не случалось
собсна, я уже решил проблему тупо, некрасиво и в лоб. самому противно


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
СообщениеДобавлено: Сб июн 17, 2017 18:10:04 
Мудрый кот
Аватар пользователя

Карма: 8
Зарегистрирован: Ср янв 16, 2008 09:34:04
Сообщений: 1832
Откуда: KMV
Рейтинг сообщения: 0
Да нет там у вас решения. В прерывании изменяетсятолько значение переменной В. А оператор goto находится вне двух бесконечных циклов. Поэтому и не работает


Вернуться наверх
 Профиль  
 
От идеи до готового устройства! Нужен только EasyEDA!

Бесплатный инструмент для проектирования печатных плат - нарисуй свою плату прямо сейчас!

Дешевле уже некуда: всего $2, за 10 ПП размером 10х10см!

Электронные компоненты: Экономия до 50%, бесплатная доставка при одновременном заказе печатной платы и компонентов!

Не в сети
 Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
СообщениеДобавлено: Сб июн 17, 2017 18:18:18 
Открыл глаза

Зарегистрирован: Ср фев 01, 2017 18:57:15
Сообщений: 67
Рейтинг сообщения: 0
вот так работает. но мне не нравится. но работает
Цитата:
$Regfile="attiny85.dat"
$Crystal=8000000
$hwstack=40
$swstack=16
$framesize=32


Config Portb.0 = Output 'R
config portb.1 = output 'G
config portb.4 = output 'B
Config PORTB.3 = output 'фонарик
Config PINB.2 = input 'кнопка
Config Int0 = Falling : On INT0 Button
Config Timer1 = Timer , Prescale = 1 : On Timer1 Pwm_prog : Enable Timer1 : Enable Interrupts : start timer1 : Enable Int0

Dim S As Byte , A as Byte , C(3) as byte , B as Byte , R as Byte

for A=0 to 63
C(1)=lookup(A , TAB_PWM)
waitms 20
next

Do

If R=0 then
PORTB.3 = 0
for A=0 to 63 'тут ШИМ, режим 1 (по умолчанию)
if R=0 then
C(2)=lookup(A , TAB_PWM)
waitms 20
else
goto 1
end if
next

for A=63 to 0 step -1 'óìåíüøàåì êðàñíûé
if R= 0 then
C(1)=lookup(A , TAB_PWM)
waitms 20
else
goto 1
end if
next
waitms 100
for A=0 to 63 'óâåëè÷èâàåì ñèíèé
if R=0 then
C(3)=lookup(A , TAB_PWM)
waitms 20
else
goto 1
end if
next

for A=63 to 0 step -1 'óìåíüøàåì çåëåíûé
if R=0 then
C(2)=lookup(A , TAB_PWM)
waitms 20
else
goto 1
end if
next
waitms 100
for A=0 to 63 'óâåëè÷èâàåì êðàñíûé
if R=0 then
C(1)=lookup(A , TAB_PWM)
waitms 20
else
goto 1
end if
next

for A=63 to 0 step -1 'óìåíüøàåì ñèíèé
if R=0 then
C(3)=lookup(A , TAB_PWM)
waitms 20
else
goto 1
end if
next
waitms 200
end if

1:
If R=1 Then
C(1) = 0 : C(2) = 0 : C(3) = 0 : PORTB.3 = 1 'тут фонарик (режим2)
End if

loop

end



Pwm_prog:
Incr S

if S=255 then S=0

If S<C(1) Then Set Portb.0 Else Reset Portb.0

If S<C(2) then Set Portb.1 Else Reset Portb.1

If S<C(3) then Set Portb.4 Else Reset Portb.4

Return

Button:
Incr R
waitms 75 'потому что кнопка плохая, вот и 75
if R>1 then R = 0
GIFR = 64
Return


TAB_PWM:
Data 0 , 0 , 0 , 0 , 1 , 2 , 3 , 3 , 5 , 6 , 7 , 8 , 10 , 12 , 14 , 15
Data 17 , 20 , 22 , 24 , 27 , 30 , 32 , 35 , 38 , 42 , 45 , 48 , 52 , 56 , 59 , 63
Data 67 , 71 , 76 , 80 , 85 , 89 , 94 , 99 , 104 , 109 , 115 , 120 , 126 , 131 , 137 , 143
Data 149 , 155 , 161 , 168 , 174 , 181 , 188 , 195 , 202 , 209 , 216 , 224 , 231 , 239 , 247 , 255



Вернуться наверх
 Профиль  
 

Не в сети
 Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
СообщениеДобавлено: Вс июн 18, 2017 12:51:06 
Мудрый кот
Аватар пользователя

Карма: 8
Зарегистрирован: Ср янв 16, 2008 09:34:04
Сообщений: 1832
Откуда: KMV
Рейтинг сообщения: 0
IDok, я баском немного подзабывать начал, перешел на СИ (поэтому прошу прощения, если где-то в синтаксисе ошибусь). Но поскольку Вам не отвечают, решил включится.
Полностью прописывать прогу не буду, опишу смысл, как вижу реализацию
Код:
'объявление функций
DECLARE SUB фонарик
DECLARE SUB ШИМ

'здесь основная программа
do
select case B
case 0: call ШИМ
case 1: call фонарик
end select
loop
end

'здесь обработчик прерывания от кнопки
button:
Incr B
[s]waitms 10[/s] ' в обработчике прерываний нежелательно и вредно делать какие либо задержки
if B>2 then B = 0
return


waitms 10 ' в обработчике прерываний нежелательно и вредно делать какие либо задержки

в итоге Ваша программа всегда будет крутится только по одному бесконечному циклу.
Далее, нужно будет смотреть уже более конкретно. Возможно, нужно будет ввести флаги и выполнять код по ним.
А то в моем примере исполнение кода будет бегать либо в функции ШИМ, либо в фонаре бесконечно.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
СообщениеДобавлено: Вс июн 18, 2017 13:15:46 
Открыл глаза

Зарегистрирован: Ср фев 01, 2017 18:57:15
Сообщений: 67
Рейтинг сообщения: 0
serg_svd спасибо за ответ. ну лето, выходные, все на даче шашлык компилят...
задержка в прерывании - это антидребезг.
главная моя проблема была - как выйти из ШИМа по прерыванию СРАЗУ, а не после окончания
что-то упускаю, но никак не пойму что


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
СообщениеДобавлено: Вс июн 18, 2017 13:34:17 
Мудрый кот
Аватар пользователя

Карма: 8
Зарегистрирован: Ср янв 16, 2008 09:34:04
Сообщений: 1832
Откуда: KMV
Рейтинг сообщения: 0
IDok писал(а):
задержка в прерывании - это антидребезг.

Я понял, но антидребезг нужно выносить из прерывания в основной цикл и там обрабатывать.

У Вас там циклов в последнем коде немеряно. При чем много повторяющихся. Надо смотреть как их объединить.
Кроме того, цикл не обязательно делать на операторах for-to-next. Можно и на do-loop, while-do.
Просто ввести в них счетчик и инкрементировать его. Кроме этого добавить в условие ту же переменную В и программа будет вылетать из такого цикла, если переменная изменит свое значение.
В общем вариантов много. Я в целом задачу не представляю, но вы для себя разбейте программу на блоки, максимально их упростите и оптимизируйте, а дальше объединяйте.
Я не спец в программировании, но именно так и делаю. Пишу отдельную функцию, отлаживаю ее. А далее оптимизирую совместную работу со следующей функцией


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
СообщениеДобавлено: Вс июн 18, 2017 13:55:47 
Открыл глаза

Зарегистрирован: Ср фев 01, 2017 18:57:15
Сообщений: 67
Рейтинг сообщения: 0
serg_svd многоцикловый цикл - это ШИМ управления RGB-светодиодом. типа лампы настроения. куча циклов - потому что значения ШИМ читаются из таблицы внизу программы. есть вариант и на полностью программном шиме, там да - без кучи фор-некст


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
СообщениеДобавлено: Пн июн 19, 2017 08:41:55 
Открыл глаза

Зарегистрирован: Ср фев 01, 2017 18:57:15
Сообщений: 67
Рейтинг сообщения: 0
собсна вопрос уважаемым котам - как навести красоту на программу? ну явно же есть способ выходить из подпрограммы по прерыванию, не дожидаясь окончания подпрограммы. но я его не вижу :(


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
СообщениеДобавлено: Пн июн 19, 2017 09:16:32 
Мудрый кот
Аватар пользователя

Карма: 8
Зарегистрирован: Ср янв 16, 2008 09:34:04
Сообщений: 1832
Откуда: KMV
Рейтинг сообщения: 0
IDok писал(а):
но я его не вижу

Так я ж советовал. Перепишите циклы на
Код:
while условие
wend

и контроллер не будет прогонять весь код, а вылетать из цикла по условию.
Или, если писать ту же обработку ШИМ в виде функции, то и выходить из нее по
Код:
return


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: BASCOM AVR в вопросах и ответах
СообщениеДобавлено: Пн июн 19, 2017 09:31:28 
Открыл глаза

Зарегистрирован: Ср фев 01, 2017 18:57:15
Сообщений: 67
Рейтинг сообщения: 0
serg_svd
так он и сейчас вылетает по условию. а будет оно оформлено в виде If-THEN или WHILE - разницы не особо. все равно в каждом маленьком цикле идет своя проверка на переменную прерывания. ШИМ в виде подпрограммы не изменит ничего. что сейчас он автоматом возвращается в начало программы что по return... (пробовал я и с подпрограммами, результат тот же). мне же хочется найти вариант "как у больших" - когда в главном цикле только опрос кнопки и условия перехода, а сами режимы где-то там, за горизонтом. и когда по прерыванию программа сразу переходит в главный цикл, а не возвращается к месту прерывания и не ждет окончания режима


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 5470 ]  На страницу Пред.  1 ... 270, 271, 272, 273, 274



Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y