Форум РадиоКот https://radiokot.ru/forum/ |
|
BASCOM AVR в вопросах и ответах https://radiokot.ru/forum/viewtopic.php?f=57&t=6408 |
Страница 274 из 301 |
Автор: | IDok [ Сб июн 17, 2017 15:38:01 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
serg_svd это один из кучи вариантов программы, пробовал всяко. выход из бесконечности и должен быть только по прерыванию кнопки. главная беда была что возвращение после прерывания кнопки приходилось в долгий цикл, и пока он до конца не доходил - кина не случалось собсна, я уже решил проблему тупо, некрасиво и в лоб. самому противно |
Автор: | serg_svd [ Сб июн 17, 2017 17:10:04 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
Да нет там у вас решения. В прерывании изменяетсятолько значение переменной В. А оператор goto находится вне двух бесконечных циклов. Поэтому и не работает |
Автор: | IDok [ Сб июн 17, 2017 17:18:18 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
вот так работает. но мне не нравится. но работает Цитата: $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 |
Автор: | serg_svd [ Вс июн 18, 2017 11:51:06 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
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 ' в обработчике прерываний нежелательно и вредно делать какие либо задержки в итоге Ваша программа всегда будет крутится только по одному бесконечному циклу. Далее, нужно будет смотреть уже более конкретно. Возможно, нужно будет ввести флаги и выполнять код по ним. А то в моем примере исполнение кода будет бегать либо в функции ШИМ, либо в фонаре бесконечно. |
Автор: | IDok [ Вс июн 18, 2017 12:15:46 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
serg_svd спасибо за ответ. ну лето, выходные, все на даче шашлык компилят... задержка в прерывании - это антидребезг. главная моя проблема была - как выйти из ШИМа по прерыванию СРАЗУ, а не после окончания что-то упускаю, но никак не пойму что |
Автор: | serg_svd [ Вс июн 18, 2017 12:34:17 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
IDok писал(а): задержка в прерывании - это антидребезг. Я понял, но антидребезг нужно выносить из прерывания в основной цикл и там обрабатывать. У Вас там циклов в последнем коде немеряно. При чем много повторяющихся. Надо смотреть как их объединить. Кроме того, цикл не обязательно делать на операторах for-to-next. Можно и на do-loop, while-do. Просто ввести в них счетчик и инкрементировать его. Кроме этого добавить в условие ту же переменную В и программа будет вылетать из такого цикла, если переменная изменит свое значение. В общем вариантов много. Я в целом задачу не представляю, но вы для себя разбейте программу на блоки, максимально их упростите и оптимизируйте, а дальше объединяйте. Я не спец в программировании, но именно так и делаю. Пишу отдельную функцию, отлаживаю ее. А далее оптимизирую совместную работу со следующей функцией |
Автор: | IDok [ Вс июн 18, 2017 12:55:47 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
serg_svd многоцикловый цикл - это ШИМ управления RGB-светодиодом. типа лампы настроения. куча циклов - потому что значения ШИМ читаются из таблицы внизу программы. есть вариант и на полностью программном шиме, там да - без кучи фор-некст |
Автор: | IDok [ Пн июн 19, 2017 07:41:55 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
собсна вопрос уважаемым котам - как навести красоту на программу? ну явно же есть способ выходить из подпрограммы по прерыванию, не дожидаясь окончания подпрограммы. но я его не вижу |
Автор: | serg_svd [ Пн июн 19, 2017 08:16:32 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
IDok писал(а): но я его не вижу Так я ж советовал. Перепишите циклы на Код: while условие wend и контроллер не будет прогонять весь код, а вылетать из цикла по условию. Или, если писать ту же обработку ШИМ в виде функции, то и выходить из нее по Код: return
|
Автор: | IDok [ Пн июн 19, 2017 08:31:28 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
serg_svd так он и сейчас вылетает по условию. а будет оно оформлено в виде If-THEN или WHILE - разницы не особо. все равно в каждом маленьком цикле идет своя проверка на переменную прерывания. ШИМ в виде подпрограммы не изменит ничего. что сейчас он автоматом возвращается в начало программы что по return... (пробовал я и с подпрограммами, результат тот же). мне же хочется найти вариант "как у больших" - когда в главном цикле только опрос кнопки и условия перехода, а сами режимы где-то там, за горизонтом. и когда по прерыванию программа сразу переходит в главный цикл, а не возвращается к месту прерывания и не ждет окончания режима |
Автор: | ev3658 [ Вс июн 25, 2017 00:22:27 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
Кто пробовал выводить VGA на Xmega256A3 не только текстом, но и графикой? Если да, то как связывали два контроллера между собой? У меня серия А3, там нет EBI (аппаратное расширение памяти), развёртку (синхро сигналы) сделал на 640х480, но с использованием внутренней памяти вывести получилось 280х240 или 35х20 символов. Частота МК 45мГц (кварц 5мГц х 9). Как-то надо передать на МК 3 бита (на 1 точку или букву), в три бита уложить информацию, к примеру: Первый байт: X - номер бита (для графики или текста) Информация о OR AND стереть Информация вывода текст/графика Второй бит: Y - номер линии 0-240 Третий бит: Символ или чего нибудь ещё. Как ни пробовал, всё никак не состыкую, даже многодрыгом не стабильность. UART в скорости проигрывает, USART обработать быстро не получается (МК нагружен сильно). Так-то вот, что получилось на 1 кристале без внешней памяти: https://www.youtube.com/watch?v=XZfVLQdSYS4 А это с внешней памятью, но внешняя память программно реализована, так как в серии А3 нет EBI, контроллер был просто в прерываниях, но всё-же: https://www.youtube.com/watch?v=VLxxv96ZLmQ https://www.youtube.com/watch?v=XThpf852ldY Если кому интересно, выложу проект, всё-же порой VGA интерфейс в разных проектах очень актуален и дешевле большого графического LCD экрана. Чисто теоретически, то, что сейчас работает от внутренней памяти (использовано 8,4кб), имеет достаточный ресурс и вполне может послужить каким нибудь прибором, к примеру измерительным или ЭКГ или чего нибудь ещё. Но при нагрузке есть проблемы с помехами в сигнале, хотя это лечится суровой оптимизацией. Сейчас проблема управления этой картой, причём так, чтоб управляющий контроллер не тормозил на отправке данных, ожидая её обработки. Может есть какая возможность аппаратно влазить во внутреннюю память контроллера? |
Автор: | Ariadna-on-Line [ Вс июл 02, 2017 11:22:13 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
Прошу прощения за наверняка занудный вопрос, но перекопать почти 300 страниц темы я не в состоянии. Понадобилось поработать в АВР Бейсике. Переустанавливал с десяток разных сборок Баскома. И демо, и крякнутые, и полные. Все работали, но ни один не выдает HEX - файла. Галочки на bin и hex - стоят!!!. Что у меня за проклятие такое??? При компилировании на долю секунды выдает голубое окно с надписью вроде как PASS 1 и всё. Прим: Работаю на ноуте. КОМ и ЛПТ портов на нем нет. С уважением. |
Автор: | edm2007 [ Вс июл 02, 2017 11:52:17 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
И ошибок компиляции нет? |
Автор: | Ariadna-on-Line [ Вс июл 02, 2017 12:02:37 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
Ой блиииин. Чтоб он ошибки на экран выдал, оказывается влияет галочка там же где для bin и hex. А я думал она только для выходных файлов. Прошу простить PICBasic-оюзера. Спаааасибочки. |
Автор: | Adagumer [ Вс июл 02, 2017 12:23:47 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
Выложите файлик здесь, вам его скомпилируют на рабочей программе! |
Автор: | OLEGKARAS [ Чт июл 06, 2017 19:43:29 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
Добрый день. Как настроить прерывание по таймеру чтобы счетчик считал секунды ? Камень ATMEGA32 , внутренний кварц 8 МГц. |
Автор: | Ivanoff-iv [ Чт июл 06, 2017 20:04:31 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
тактовая сколько? Добавлено after 12 minutes 51 second: если 8МГц то: таймер1, делитель 256, режим СТС, OCR1A=31250, прерывание по совпадению: 0x00->TCCR1A, 0x0C->TCCR1B, 0x7A->OCR1AH, 0x12->OCR1AL, 0x10->TIMSK Добавлено after 4 minutes 38 seconds: sei забыл прерывание по совпадению OCR1A будет вызываться 1 раз в секунду. |
Автор: | OLEGKARAS [ Чт июл 06, 2017 20:05:46 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
Как все это правильно написать в BASCOM ? |
Автор: | Ivanoff-iv [ Чт июл 06, 2017 20:18:50 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
чето я про ассемблер подумал, про регистры... а тут так и пишешь: TCCR1A=$00 вроде так 16ричные цифры здесь пишутся |
Автор: | OLEGKARAS [ Чт июл 06, 2017 20:25:00 ] |
Заголовок сообщения: | Re: BASCOM AVR в вопросах и ответах |
$regfile = "m32def.dat" ' ìåãà8 $crystal = 8000000 Config Tccr1a = 0x00 Do Loop End Вот так записал , компилятор выдает ошибку. |
Страница 274 из 301 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |