BASCOM AVR в вопросах и ответах
Re: BASCOM AVR в вопросах и ответах
У меня микросхема FT232 преобразовывает USB-COM
Re: BASCOM AVR в вопросах и ответах
Есть такая проблема, код привожу сокращенно.
Проблема в следующем. Обработчик прерываний int0 передает управление на метку Lk03,
где начинает рабоать шим от 0 до 100 процентов. Второе прерывание от 100 процентов к нулю. И так по кругу.
Идеолгия программы - пока работает ШИМ ничего нигде происходить не должно. А вот когда его работа достигает либо максимума либо минимума
он должен остановится до следующего нажатия кнопки. Это работает. Далее. Когда ШИМ находится в одном из крайних положений
( в состоянии покоя. Не изменяет своих значений)
управление должно передатся другой подпрограмме которая передаст состояние в сеть 1 wire. ( отдельно эмулятор работает).
Не могу сообразить как выйти из этого цикла. По логике я отследил например верхнее положение значения OCR1a, и передал
управление другой подпрограмме. Подпрограмма отработала и по пришествии нового прерывания опять возвращается на метку Lk03.
Но ШИМ не заводится, т.к в регистре OCR1a сохраняется значение вызвавшее переход. Обнулять его нельзя, т.к ШИМ из крайнего
положения должен плавно отработать в противоположное.
Я заблудился в этих циклах не по детски. Прошу помочь кто чем может.
Код: Выделить всё
'********************************** Управление ШИМ ********************************
Lk03:
Do
' *************************** Управление ШИМ **************************************
If Stp > 1 Then
Incr Cnt
If Cnt = 140 Then ' регулируем скорость ШИМ чем больше тeм медленнее
Cnt = 0
Decr Stp
If Direct > 0 Then
Ocr1a = &HFE - Stp
Else
If Stp = 0 Then
Ocr1a = 0
Else
Ocr1a = Stp
End If
End If
End If
End If
'************************ Устанавливаем флаг когда можно работать 1 wire *****
If Ocr1a = &HFD Then ' Например такое условие
Set A
Goto W01
End If
Loop 'Until A = 1 ' срабатывает один раз потом что тонадо делать
Проблема в следующем. Обработчик прерываний int0 передает управление на метку Lk03,
где начинает рабоать шим от 0 до 100 процентов. Второе прерывание от 100 процентов к нулю. И так по кругу.
Идеолгия программы - пока работает ШИМ ничего нигде происходить не должно. А вот когда его работа достигает либо максимума либо минимума
он должен остановится до следующего нажатия кнопки. Это работает. Далее. Когда ШИМ находится в одном из крайних положений
( в состоянии покоя. Не изменяет своих значений)
управление должно передатся другой подпрограмме которая передаст состояние в сеть 1 wire. ( отдельно эмулятор работает).
Не могу сообразить как выйти из этого цикла. По логике я отследил например верхнее положение значения OCR1a, и передал
управление другой подпрограмме. Подпрограмма отработала и по пришествии нового прерывания опять возвращается на метку Lk03.
Но ШИМ не заводится, т.к в регистре OCR1a сохраняется значение вызвавшее переход. Обнулять его нельзя, т.к ШИМ из крайнего
положения должен плавно отработать в противоположное.
Я заблудился в этих циклах не по детски. Прошу помочь кто чем может.
- dimon-790
- Мучитель микросхем
- Сообщения: 442
- Зарегистрирован: Пт авг 29, 2008 09:22:37
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Shuriko писал(а):У меня никак не получилось прикрутить 910 от протосса с родной прошивкой. Накачал альтернативных, но пока не пробовал.
Я брал схему и прошивку , с нашего сайта ничё не менял и не переделывал , вчера говорил с новым хозяином прогера говорит шьёт из под баскома без проблем

Все мы работаем по методу Робинзона Крузо – ждем пятницу.
- max50
- Мучитель микросхем
- Сообщения: 497
- Зарегистрирован: Ср дек 10, 2008 21:24:28
- Откуда: Алтайский край, Барнаул
Re: BASCOM AVR в вопросах и ответах
Всем привет!
Есть такой цикл:
Собственно вопрос:
как сделать так, чтобы при нажатии кнопки цикл прерывался в любой момент и программа переходила на подпрограмму?
Пробовал Exit For, но цикл прерывался пока кнопка была нажата.
Заранее спасибо!
Есть такой цикл:
Код: Выделить всё
For D = 1 To 60
For A = 0 To 255
Pwm1a = A
Waitms 12
Next A
Pwm1a = 255
Wait Temp1
For A = 255 To 0 Step -1
Pwm1a = A
Waitms 12
Next A
Pwm1a = 0
Wait Temp2
Next DСобственно вопрос:
как сделать так, чтобы при нажатии кнопки цикл прерывался в любой момент и программа переходила на подпрограмму?
Пробовал Exit For, но цикл прерывался пока кнопка была нажата.
Заранее спасибо!
Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
Re: BASCOM AVR в вопросах и ответах
max50
Приблизительно тоже что надо и мне.
Первый вопрос, вам надо чтобы прервалось, что то выполнилось. И вернулось обратно?
Для начала попробуйте использовать прерывание.
Вот тут подробно расписаны разные варианты - посмотрите возможно поможет.
[url]http://www.decada.org.ru/project/lessons/bascom_avr/10/index.php
[/url]
В основной цикл включаете свой код. Когда наступит прерывание
обработчик передаст управление подпрограмме. Подпрограмма отработает и вернется обратно.
У меня ситуация обратная. Не могу вернутся из цикла
Приблизительно так
Было время вставил Ваш код
Даже работает!
Приблизительно тоже что надо и мне.
Первый вопрос, вам надо чтобы прервалось, что то выполнилось. И вернулось обратно?
Для начала попробуйте использовать прерывание.
Вот тут подробно расписаны разные варианты - посмотрите возможно поможет.
[url]http://www.decada.org.ru/project/lessons/bascom_avr/10/index.php
[/url]
В основной цикл включаете свой код. Когда наступит прерывание
обработчик передаст управление подпрограмме. Подпрограмма отработает и вернется обратно.
У меня ситуация обратная. Не могу вернутся из цикла
Приблизительно так
Код: Выделить всё
Config Pind.6 = Output
Config Pind.2 = Input
Config Int0 = Falling
Dim Wtime As Byte
On Int0 Stopbutton
Cls
Wtime = 255
Enable Interrupts
Enable Int0
Do
Сюда Ваш код
Loop
Stopbutton:
Lcd "stopъ!"
Return
Было время вставил Ваш код
Код: Выделить всё
On Int0 Lk01 Nosave
Enable Interrupts
Enable Int0
Do
For D = 1 To 60
For A = 0 To 255
Pwm1a = A
Waitms 12
Next A
Pwm1a = 255
Wait 2
For A = 255 To 0 Step -1
Pwm1a = A
Waitms 12
Next A
Pwm1a = 0
Wait 1
Next D
Loop
End
Lk01:
Print "OPPANA!"
Return
Даже работает!
- max50
- Мучитель микросхем
- Сообщения: 497
- Зарегистрирован: Ср дек 10, 2008 21:24:28
- Откуда: Алтайский край, Барнаул
Re: BASCOM AVR в вопросах и ответах
nsl2004 спасибо! Буду пробывать!
Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
- kip96
- Держит паяльник хвостом
- Сообщения: 965
- Зарегистрирован: Ср авг 26, 2009 08:24:50
- Откуда: 1300км от Пупа
Re: BASCOM AVR в вопросах и ответах
У меня ситуация обратная. Не могу вернутся из цикла
Приблизительно так
Попробуйте в прерывании менять переменную и примените DO...LOOP UNTIL A=10
В прерывании А делаем равным 10 и при возвращении в цикл из него выходим.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Re: BASCOM AVR в вопросах и ответах
kip96 писал(а):У меня ситуация обратная. Не могу вернутся из цикла
Приблизительно так
Попробуйте в прерывании менять переменную и примените DO...LOOP UNTIL A=10
В прерывании А делаем равным 10 и при возвращении в цикл из него выходим.
Спасибо , но это код для max50. Мой несколько сложнее. По мах или min срабатывает
выход из цикла. При возврате работа не возобновляется, тк значение и так крайнее.
Т.е я думаю надо применить какой то прием который я еще не придумал. Может кто
знает и подскажет. А так подробности парой постов выше.
- kip96
- Держит паяльник хвостом
- Сообщения: 965
- Зарегистрирован: Ср авг 26, 2009 08:24:50
- Откуда: 1300км от Пупа
Re: BASCOM AVR в вопросах и ответах
Старайтесь не использовать в прерывании ртправления на метки. Меняйте переменные.
Или
Отработали шим
bitwait PortXX- ждём нажатие кнопки
нажали -пошли дальше, до следующего bitwait(a)
Или
Отработали шим
bitwait PortXX- ждём нажатие кнопки
нажали -пошли дальше, до следующего bitwait(a)
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Re: BASCOM AVR в вопросах и ответах
kip96 писал(а):Старайтесь не использовать в прерывании ртправления на метки. Меняйте переменные.
Или
Отработали шим
bitwait PortXX- ждём нажатие кнопки
нажали -пошли дальше, до следующего bitwait(a)
О это дельный совет, попробую составить алгоритм. Потому как переход на метки тупик пока что. Еще думаю
может ввести как то прерывание по срабатыванию ШИМ. Т.е типа достигло максимума прервало - и работает другкая подпрограмма.
Только я ни разу не совмещал два сразу. Тоже поробую. Пока я в поиске. Накидаю супер простую болванку и буду экспере
менты ставить. А то я уже опять за учебники засел, а без направления это крайне долго.
Re: BASCOM AVR в вопросах и ответах
Скажите пожалуйста, у вас нет примера кода, где можно задавать частоту шим (pwm) в широком диапазоне, а не привязанного к основному генератору, делителям и разрядности таймера. а то как-то не много вариантов получается с частотой...
Re: BASCOM AVR в вопросах и ответах
zybex писал(а):Скажите пожалуйста, у вас нет примера кода, где можно задавать частоту шим (pwm) в широком диапазоне, а не привязанного к основному генератору, делителям и разрядности таймера. а то как-то не много вариантов получается с частотой...
Если нужно менять частоту, то мне кажется что Вам нужен не ШИМ а ЧИМ. Там скважность будет постоянная , а вот частоту можно менять. Что то типа того.
Re: BASCOM AVR в вопросах и ответах
nsl2004 писал(а):zybex писал(а):Скажите пожалуйста, у вас нет примера кода, где можно задавать частоту шим (pwm) в широком диапазоне, а не привязанного к основному генератору, делителям и разрядности таймера. а то как-то не много вариантов получается с частотой...
Если нужно менять частоту, то мне кажется что Вам нужен не ШИМ а ЧИМ. Там скважность будет постоянная , а вот частоту можно менять. Что то типа того.
не совсем то. мне нужно подбирать частоту в определенном диапазоне. а потом юзать шим на этой частоте.
- max50
- Мучитель микросхем
- Сообщения: 497
- Зарегистрирован: Ср дек 10, 2008 21:24:28
- Откуда: Алтайский край, Барнаул
Re: BASCOM AVR в вопросах и ответах
Посмотри здесь:
http://bascomavr.3bb.ru/viewtopic.php?id=345
http://bascomavr.3bb.ru/viewtopic.php?id=345
Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
- Intel_agent
- Родился
- Сообщения: 18
- Зарегистрирован: Вс апр 18, 2010 16:43:08
- Откуда: Улан-Удэ
Re: BASCOM AVR в вопросах и ответах
Добрый день
Требуется создать ампервольтметр, общий код вроде сделал, а вот никак не могу просчитать как перевести данные от АЦП в вид напряжения и тока
Пределы измерений: напряжение до 9,99 вольт, ток до 3-5 ампер (датчик тока проволочный резистор 0,2 ома, при необходимости могу изменить до 0,1 ома)
Контроллер - ATMega8, код - Bascom
P.S. Код большой, находится в прикрепленном файле
Требуется создать ампервольтметр, общий код вроде сделал, а вот никак не могу просчитать как перевести данные от АЦП в вид напряжения и тока
Пределы измерений: напряжение до 9,99 вольт, ток до 3-5 ампер (датчик тока проволочный резистор 0,2 ома, при необходимости могу изменить до 0,1 ома)
Контроллер - ATMega8, код - Bascom
P.S. Код большой, находится в прикрепленном файле
- Вложения
-
- ampervoltmeter.zip
- (1.02 КБ) 313 скачиваний
Re: BASCOM AVR в вопросах и ответах
Подскажите, как программно включить подтягивающий резистор?
В одном исходнике нашел такую конструкцию:
С первой строкой понятно, а со второй не очень. Может нужно
Set Portd0.1 для включения подтяжки?
В одном исходнике нашел такую конструкцию:
Код: Выделить всё
Config Pind.0 = Input
Set Portd0.0С первой строкой понятно, а со второй не очень. Может нужно
Set Portd0.1 для включения подтяжки?
- Intel_agent
- Родился
- Сообщения: 18
- Зарегистрирован: Вс апр 18, 2010 16:43:08
- Откуда: Улан-Удэ
Re: BASCOM AVR в вопросах и ответах
dhouse
Да, но немного не так, надо Set Portd.0 - для установки подтяжки на нулевой порт D
Если надо другой порт, тогда:
Set PORTX.Y
где X - буква группы, Y - номер порта в группе
Да, но немного не так, надо Set Portd.0 - для установки подтяжки на нулевой порт D
Если надо другой порт, тогда:
Set PORTX.Y
где X - буква группы, Y - номер порта в группе
Re: BASCOM AVR в вопросах и ответах
С такой формой записи понятно.
Меня именно озадачила запись оператора
а не
И в исходнике, который я видел, была именно такая форма записи.
Компилятор не дает ошибки на этом операторе, но что он делает?
Меня именно озадачила запись оператора
Код: Выделить всё
SET PORTD0.0а не
Код: Выделить всё
SET PORTD.0И в исходнике, который я видел, была именно такая форма записи.
Компилятор не дает ошибки на этом операторе, но что он делает?
- kip96
- Держит паяльник хвостом
- Сообщения: 965
- Зарегистрирован: Ср авг 26, 2009 08:24:50
- Откуда: 1300км от Пупа
Re: BASCOM AVR в вопросах и ответах
Чёт вы не то говорите.
Set- установить 1
Reset - сбросить в 0
поэтому
SET PORTD.0 - включить порт
либо
Reset PortD.0- выключить
Set- установить 1
Reset - сбросить в 0
поэтому
SET PORTD.0 - включить порт
либо
Reset PortD.0- выключить
Все делают ошибки, только мудрецы - новые, а дураки - старые.
- Intel_agent
- Родился
- Сообщения: 18
- Зарегистрирован: Вс апр 18, 2010 16:43:08
- Откуда: Улан-Удэ
Re: BASCOM AVR в вопросах и ответах
Господа спецы, неужели никто не знает как пересчитать значения АЦП в напряжение и ток? тут