BASCOM AVR в вопросах и ответах
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
спасибо!
результат хороший не обещаю-сам новичок,но раз пошла валерьянка...
выложите к каким выв подключены кнопки,нагрузки,конретные задачи.там по ходу и посмотрим
результат хороший не обещаю-сам новичок,но раз пошла валерьянка...
выложите к каким выв подключены кнопки,нагрузки,конретные задачи.там по ходу и посмотрим
- Реклама
Re: BASCOM AVR в вопросах и ответах
Ну примерно как-то так, суть не изменилась.
Где-то читал, что можно еще через полевые транзисторы диммировать, ну я так понимаю это уже в случае с постоянным током.
И кстати, диммировать надо КЛЛ лампы.
Где-то читал, что можно еще через полевые транзисторы диммировать, ну я так понимаю это уже в случае с постоянным током.
И кстати, диммировать надо КЛЛ лампы.
- Вложения
-
- dimmer.zip
- (69.6 КБ) 189 скачиваний
- Dnepr_1186
- Потрогал лапой паяльник
- Сообщения: 398
- Зарегистрирован: Чт мар 26, 2009 20:53:27
- Откуда: Беларусь.Минская обл.
Re: BASCOM AVR в вопросах и ответах
Помогите пожалуйста. Написал програмку для счета скорости и пробега. Выод на экран нокиа 3310. В протеусе постоянно скачут показания скорости и скорость выше 70 не поднимается. Посмотрите пожалуйста знающие в чем может быть причина. Может я выбрал неправильный алгоритм. Все файлы предоставляю Не обращайте внимание на лишние элементы в протеусе.
- Вложения
-
- одометр.rar
- (32.29 КБ) 209 скачиваний
Re: BASCOM AVR в вопросах и ответах
AlekseyV писал(а):И кстати, диммировать надо КЛЛ лампы.
а пробовали ? они вобще диммируются эти ваши лампы ?
а так всего хватает три кнопки "+" ,"-" , и переключение каналов. Детект нуля перевести на INT0 (portd.2), на свободные порты повесить еще 4 оптопары.
В прерывании выдать разрешение на выключение всех портов. Включать в ноль особо не надо - не та нагрузка, если что фильтров каких-нибудь добавить. Не забывайте симистор только запускается оптопарой, выключается он сам при переходе через ноль, в любой другой момент выключить принудительно его не получится.
Спойлер
Код: Выделить всё
on int0 pulse
channel1 alias portd.1
channel2 alias portd.2
.......
channel3 alias port...
channel as byte ' номер канала управления
Dim PWM(8) as word ' массив 8-ми каналов для шим
do
if razr = 0 then ' если ноль то гасим всё
razr = 1
channel1 = 0
channel2 = 0
.............
channel8 = 0
else
if pwm(1) < timer1 then channel1 =1 ' если не ноль, то сверяем не пора ли включать по условиям ШИМ для каждого канала
if pwm(2) < timer1 then channel2 =1
..............................
if pwm(8) < timer1 then channel8 =1
end if
if knopka_channel = 1 then ' тут флаг нажатия кнопки или энкодера
knopka_channel = 0
incr channel ' увеличиваем номер канала
if channel > 8 then channel = 1 ' начинаем все сначала
end if
if knopka_plus = 1 then
knopka_plus = 0
pwm(channel) = pwm(channel) - 1000 ' здесь 1000 это шаг регулировки, выбираем исходя из максимального Timer1. Для простоты максимум 10000, значит шаг 10% = 1000
if pwm(channel) > 10000 then pwm(channel) = 0 ' верхний потолок
end if
if knopka_minus = 1 then
knopka_minus = 0
pwm(channel) = pwm(channel) + 1000 ' здесь 1000 это шаг регулировки, выбираем исходя из максимального Timer1. Для простоты максимум 10000, значит шаг 10% = 1000
if pwm(channel) > 10000 then pwm(channel) = 10000 ' нижний потолок, т.е. чем больше значение pwm тем позже включится нагрузка
end if
loop
pulse:
timer1 = 0
razr = 0
return
приблизительно так, еще опрос кнопок под себя настроить, а knopka_plus minus просто как флаги использовать, от кнопок или энкодера задавать значения...
Вобще так подумал, там в лампах какое-никакое ПРА обязательно стоит, и частота 50гц ему по барабану, оно свою частоту создает, поэтому ШИмить можно как какой-нибудь нагреватель врезая целиком полупермоды. Т.е. берем MOC3063 с контролем нуля, таймер настраиваем на 10-20 полупериодов, и включаем оптопару уже на этом отрезке на нужное время от 0 до 20 периодов. А контроль нуля и регулирование в пределах полуволны это для обычных ламп, чтоб частоту не сбивать и мерцание было не заметно.
Re: BASCOM AVR в вопросах и ответах
Импульсы в протеусе нужны прямоугольные это раз.Dnepr_1186 писал(а):Написал програмку для счета скорости и пробега.
Не грузите контроллер математиматическими вычислениями, посчитайте на бумажке сами и в конце останется что speed= consta/ timer, т.е. константа деленая на время.
Алгоритм вроде ничего, только лучше считать в больших размерностях, а потом прям перед выводом на экран переводить в км/ч. Например не скорости каждый раз считать а просуммировали 10 захватов таймера, и потом уже усредняем захваты, а не каждый раз сначала высчитывать скорость, и потом её усреднять.
Еще можно попробовать просто считать количество прерываний за определенный промежуток времени.
- Реклама
- Dnepr_1186
- Потрогал лапой паяльник
- Сообщения: 398
- Зарегистрирован: Чт мар 26, 2009 20:53:27
- Откуда: Беларусь.Минская обл.
Re: BASCOM AVR в вопросах и ответах
Ндааа, ничего не поменялось... Вот у меня мысли, может протеус глючит? Правда точно такая же программа только тахометра раюотает без прыжков показаний.
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Здравствуйте. Есть у кого пример инициализации дисплея с контроллером HX8346-a?
Слишком много времени займет изучение даташита. А дисплей нужен уже.
Слишком много времени займет изучение даташита. А дисплей нужен уже.
- evgenkostin
- Родился
- Сообщения: 5
- Зарегистрирован: Пт фев 14, 2014 00:00:05
Re: BASCOM AVR в вопросах и ответах
Ребят, подскажите только у меня или у всех не работает конструкция FOR-STEP-NEXT если шагом сделать переменную с отрицательным значением?
Вот такая элементарная вещь не работает ни в басковском эмуляторе, ни в железе:
Если шагом просто задать отрицательное число, то естественно все работает, а также если шагу назначить переменную с положительным значением (ну и перебирать от малого к большому), то тоже все работает. А "отрицательная переменная" ну ни как
Что я делаю не так?
Баском 2.0.7.5
Вот такая элементарная вещь не работает ни в басковском эмуляторе, ни в железе:
Dim A As Byte
Dim Stp As Integer
Stp = -1
For A = 7 To 2 Step Stp
Next A
Если шагом просто задать отрицательное число, то естественно все работает, а также если шагу назначить переменную с положительным значением (ну и перебирать от малого к большому), то тоже все работает. А "отрицательная переменная" ну ни как
Что я делаю не так?
Баском 2.0.7.5
Re: BASCOM AVR в вопросах и ответах
evgenkostin писал(а):Что я делаю не так?
Баском 2.0.7.5
Выставь одну размерность - всё в integer, и A, и stp
Re: BASCOM AVR в вопросах и ответах
evgenkostin писал(а):Что я делаю не так?
Нужна одна размерность переменных. И дабы не забивать память переменными типа Integer, можно сделать так:
Код: Выделить всё
Dim A As Byte
Dim Stp As Byte
A=7
While (A>=2)
' тут ваш код собственно
Decr A
Wend
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
- evgenkostin
- Родился
- Сообщения: 5
- Зарегистрирован: Пт фев 14, 2014 00:00:05
Re: BASCOM AVR в вопросах и ответах
v_Vasilij_ и serg_svd
Спасибо ОГРОМНОЕ! Вы абсолютно правы, все заработало.
Непонятно только как вы это узнали
Я весь вечер пытался найти инфу в инете, но не нашел.
По-вашему, в моем случае не получиться и прийдется забивать память. Смысл моей программки в том что бы пробегать интервал в обе стороны и с разной (произвольной) скоростью. Разве в таком случае есть другой способ не через "фо-некст"?
Спасибо ОГРОМНОЕ! Вы абсолютно правы, все заработало.
Непонятно только как вы это узнали
serg_svd писал(а):И дабы не забивать память переменными типа Integer, можно сделать так:
По-вашему, в моем случае не получиться и прийдется забивать память. Смысл моей программки в том что бы пробегать интервал в обе стороны и с разной (произвольной) скоростью. Разве в таком случае есть другой способ не через "фо-некст"?
Re: BASCOM AVR в вопросах и ответах
evgenkostin писал(а): Разве в таком случае есть другой способ не через "фо-некст"?
Да чтобы далеко не ходить, можно хоть тот же код что я привел преобразовать.
Во-первых сделать 2 таких подпрограммы для счета вверх или вниз. Во-вторых завести туже переменную байтового размера Stp, но уже беззнаковую. И по мере нужды вызывать подпрограммы со счетом вверх или вниз.
Ну или вариант 2. тот же "фо-некст" но всегда с положительным требуемым шагом, а внутри условие, содержащее в себе 2 расчетные формулы для декремента и инкремента.
Заведите битовую переменную для определения куда шагать, например
Dim Step As Bit
И если Step=0 допустим инкрементируем, а если Step=1 тогда декремент.
Так что всегда можно обойти такие подводные камни
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
- evgenkostin
- Родился
- Сообщения: 5
- Зарегистрирован: Пт фев 14, 2014 00:00:05
Re: BASCOM AVR в вопросах и ответах
serg_svd писал(а):Так что всегда можно обойти такие подводные камни.
Вы конечно правы. Если немного подумать, то можно было решить проблему другими способами. Спасибо!
Re: BASCOM AVR в вопросах и ответах
pavel1979, _Vasilij_, спасибо за советы и помощь по диммированию, потихоньку разбираюсь.
----------
Котаны, помогите пожалуйста разобраться с организацией памяти в AVR, на примере Atmega8 и др. подобных МК.
Читал данные статьи - 1. http://avrhelp.mcselec.com/index.html?memory_usage.htm 2. http://avrhelp.mcselec.com/index.html?memory_usage.htm
Смотрел разные прошивки МК, но к цели не пришел. Интересуют такие вопросы:
1. Как сохранить какую-либо переменную/константу в энергонезависимую память МК (например, пароль)?
2. Как сделать, чтобы одна переменная не налегала на другую в стечение времени?
3. Что такое overlay?
Благодарю за внимание!
----------
Котаны, помогите пожалуйста разобраться с организацией памяти в AVR, на примере Atmega8 и др. подобных МК.
Читал данные статьи - 1. http://avrhelp.mcselec.com/index.html?memory_usage.htm 2. http://avrhelp.mcselec.com/index.html?memory_usage.htm
Смотрел разные прошивки МК, но к цели не пришел. Интересуют такие вопросы:
1. Как сохранить какую-либо переменную/константу в энергонезависимую память МК (например, пароль)?
2. Как сделать, чтобы одна переменная не налегала на другую в стечение времени?
3. Что такое overlay?
Благодарю за внимание!
-
domrustika
- Грызет канифоль
- Сообщения: 257
- Зарегистрирован: Чт мар 22, 2007 13:50:33
- Откуда: казань
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
ребят посоветуйте есть кусок кода
вот так с and баском не компилит ано и понятно.
как сделать чтобы не 1 порт а несколько SET?
Код: Выделить всё
Select Case Kanal
Case 1 : Set Portc.0 and Portc.1
Case 2 : Set Portc.1
Case 3 : Set Portc.2
Case 4 : Set Portc.3
End Select
вот так с and баском не компилит ано и понятно.
как сделать чтобы не 1 порт а несколько SET?
Re: BASCOM AVR в вопросах и ответах
domrustika писал(а):ребят посоветуйте есть кусок кода
как сделать чтобы не 1 порт а несколько SET?
Case 1 : Set Portc.0: Set Portc.1
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
-
domrustika
- Грызет канифоль
- Сообщения: 257
- Зарегистрирован: Чт мар 22, 2007 13:50:33
- Откуда: казань
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
НЕТ , так не компилируется выдает ошибку. Так я уже пробовал и еще кучу по другому))
может кто знает оператор case в принципе может выполнить только 1 действие?
может кто знает оператор case в принципе может выполнить только 1 действие?
- Moto_v3x
- Потрогал лапой паяльник
- Сообщения: 307
- Зарегистрирован: Ср мар 31, 2010 11:45:58
- Откуда: Славянск
Re: BASCOM AVR в вопросах и ответах
так должно работать
Код: Выделить всё
Select Case Kanal
Case 1 :
Set Portc.0
Set Portc.1
Case 2 : Set Portc.1
Case 3 : Set Portc.2
Case 4 : Set Portc.3
End SelectRe: BASCOM AVR в вопросах и ответах
Всем привет. Надо управлять тиристором с Atmega8. Само фавзовое управление нашел на 141 страницы темы, но мне надо что бы были кнопки + и -. Второй день бьюсь, а прикрутить их не могу. Не работает как надо, и все тут, только при удержании кнопки + дает +5в на выходе(смотрю осциллографом в протеусе). В чем ошибка?
Код: Выделить всё
$regfile = "m8def.dat" 'выбираем контроллер
$crystal = 4000000 'выбираем частоту кварца
Dim Level As Byte
Dim Dimmer_delay_w As Word
Config Portb.0 = Input ' определим направление порта для ZC на вход
Config Portb.1 = Output ' определим направление порта для тиристора
Config Portb.5 = Input ' определим направление порта для кнопки 3 на вход
Config Portc.2 = Input ' определим направление порта для кнопки 2 на вход
Config Portc.3 = Input ' определим направление порта для кнопки 1 на вход
Config Portc.5 = Output ' определим направление порта для светодиода 1 на выход
Portb.0 = 1 ' включим внутренний подтягивающий резистор для ZC
Portb.5 = 1 ' включим внутренний подтягивающий резистор для кнопки 3
Portc.3 = 1 ' включим внутренний подтягивающий резистор для кнопки 2
Portc.2 = 1 ' включим внутренний подтягивающий резистор для кнопки 1
Zc Alias Pinb.0 ' обзовём ZC
Switch3 Alias Pinb.5 ' обзовём вход кнопки 3 - кнопкой 3
Switch2 Alias Pinc.3 ' обзовём вход кнопки 2 - кнопкой 2
Switch1 Alias Pinc.2 ' обзовём вход кнопки 1 - кнопкой 1
Triac Alias Portb.1 ' Тристор
Lck Alias Portc.5 ' Светодиод - Закрыто(при перегрузке и блокировке горит)
Config Int0 = Change ' Установка прерывания INT0 на изменение сигнала
On Int0 Z_cross_int
Enable Int0 ' Прерывание на вход датчика перехода синусоиды через ноль
Config Timer1 = Timer , Prescale = 8 ' конфигурируем таймер 1
Enable Timer1
Start Timer1
On Ovf1 Ovf1_my Nosave
Enable Ovf1
Triac = 0
Level = 0
Do '*-*-*-*Начало основного цикла*-*-*-*
If Switch1 = 0 Then
If Level < 8 Then
Incr Level
End If
End If
If Switch2 = 0 Then
If Level > 0 Then
Decr Level
Else
Level = 0
End If
End If
If Level = 0 Then
Disable Ovf1
Else
If Level < 8 Then Enable Ovf1
End If
If Level > 7 Then
Dimmer_delay_w = &HFFFC ' Ярко горит - 230v
Disable Ovf1
Triac = 1
Level = 8 ' <<<<<<<<<<<<<<<<<<<<<<<< ограничитель
End If
If Level = 1 Then Dimmer_delay_w = 57900 ' Тускло горит - 25v
If Level = 2 Then Dimmer_delay_w = 58300 ' 51v
If Level = 3 Then Dimmer_delay_w = 58700 ' 78v
If Level = 4 Then Dimmer_delay_w = 59000 ' 85v
If Level = 5 Then Dimmer_delay_w = 59400 ' 149v
If Level = 6 Then Dimmer_delay_w = 59900 ' 175v
If Level = 7 Then Dimmer_delay_w = 61100 ' 189v
Waitus 950
Loop '*-*-*-* возврат в основной цикл*-*-*-*
''===============
Ovf1_my:
Triac = 1
Waitus 90
Triac = 0
Return
' =============== Обработка прерывания по изменению на INT 0 ==================
Z_cross_int:
Timer1 = Dimmer_delay_w
Return
'Indication:
'Timer0 = Timerpreload_0
'Return
End '-
aleksandr-zh
- Сверлит текстолит когтями
- Сообщения: 1278
- Зарегистрирован: Пн июн 18, 2007 21:51:20
Re: BASCOM AVR в вопросах и ответах
код - мой
но вы как-то странно его изменили
1. добавьте после нажатия кнопки хотя бы паузу! а то МК будет сотню раз изменять переменную пока вы держите кнопку нажатой
2. забудьте Протеус.
но вы как-то странно его изменили
1. добавьте после нажатия кнопки хотя бы паузу! а то МК будет сотню раз изменять переменную пока вы держите кнопку нажатой
2. забудьте Протеус.


