BASCOM AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

Re: BASCOM AVR в вопросах и ответах

Сообщение pavel1979 »

спасибо!
результат хороший не обещаю-сам новичок,но раз пошла валерьянка...
выложите к каким выв подключены кнопки,нагрузки,конретные задачи.там по ходу и посмотрим
Реклама
AlekseyV
Грызет канифоль
Сообщения: 291
Зарегистрирован: Ср май 26, 2010 20:40:47

Re: BASCOM AVR в вопросах и ответах

Сообщение AlekseyV »

Ну примерно как-то так, суть не изменилась.
Где-то читал, что можно еще через полевые транзисторы диммировать, ну я так понимаю это уже в случае с постоянным током.
И кстати, диммировать надо КЛЛ лампы.
Вложения
dimmer.zip
(69.6 КБ) 189 скачиваний
Реклама
Аватара пользователя
Dnepr_1186
Потрогал лапой паяльник
Сообщения: 398
Зарегистрирован: Чт мар 26, 2009 20:53:27
Откуда: Беларусь.Минская обл.

Re: BASCOM AVR в вопросах и ответах

Сообщение Dnepr_1186 »

Помогите пожалуйста. Написал програмку для счета скорости и пробега. Выод на экран нокиа 3310. В протеусе постоянно скачут показания скорости и скорость выше 70 не поднимается. Посмотрите пожалуйста знающие в чем может быть причина. Может я выбрал неправильный алгоритм. Все файлы предоставляю Не обращайте внимание на лишние элементы в протеусе.
Вложения
одометр.rar
(32.29 КБ) 209 скачиваний
_Vasilij_
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

Re: BASCOM AVR в вопросах и ответах

Сообщение _Vasilij_ »

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 периодов. А контроль нуля и регулирование в пределах полуволны это для обычных ламп, чтоб частоту не сбивать и мерцание было не заметно.
Реклама
Эиком - электронные компоненты и радиодетали
_Vasilij_
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

Re: BASCOM AVR в вопросах и ответах

Сообщение _Vasilij_ »

Dnepr_1186 писал(а):Написал програмку для счета скорости и пробега.
Импульсы в протеусе нужны прямоугольные это раз.
Не грузите контроллер математиматическими вычислениями, посчитайте на бумажке сами и в конце останется что speed= consta/ timer, т.е. константа деленая на время.
Алгоритм вроде ничего, только лучше считать в больших размерностях, а потом прям перед выводом на экран переводить в км/ч. Например не скорости каждый раз считать а просуммировали 10 захватов таймера, и потом уже усредняем захваты, а не каждый раз сначала высчитывать скорость, и потом её усреднять.
Еще можно попробовать просто считать количество прерываний за определенный промежуток времени.
Реклама
Аватара пользователя
Dnepr_1186
Потрогал лапой паяльник
Сообщения: 398
Зарегистрирован: Чт мар 26, 2009 20:53:27
Откуда: Беларусь.Минская обл.

Re: BASCOM AVR в вопросах и ответах

Сообщение Dnepr_1186 »

Ндааа, ничего не поменялось... Вот у меня мысли, может протеус глючит? Правда точно такая же программа только тахометра раюотает без прыжков показаний.
Реклама
vanyap1
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение vanyap1 »

Здравствуйте. Есть у кого пример инициализации дисплея с контроллером HX8346-a?
Слишком много времени займет изучение даташита. А дисплей нужен уже.
Аватара пользователя
evgenkostin
Родился
Сообщения: 5
Зарегистрирован: Пт фев 14, 2014 00:00:05

Re: BASCOM AVR в вопросах и ответах

Сообщение evgenkostin »

Ребят, подскажите только у меня или у всех не работает конструкция FOR-STEP-NEXT если шагом сделать переменную с отрицательным значением?

Вот такая элементарная вещь не работает ни в басковском эмуляторе, ни в железе:
Dim A As Byte
Dim Stp As Integer

Stp = -1
For A = 7 To 2 Step Stp
Next A


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

Что я делаю не так?
Баском 2.0.7.5
_Vasilij_
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

Re: BASCOM AVR в вопросах и ответах

Сообщение _Vasilij_ »

evgenkostin писал(а):Что я делаю не так?
Баском 2.0.7.5

Выставь одну размерность - всё в integer, и A, и stp
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: BASCOM AVR в вопросах и ответах

Сообщение serg_svd »

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 в вопросах и ответах

Сообщение evgenkostin »

v_Vasilij_ и serg_svd
Спасибо ОГРОМНОЕ! Вы абсолютно правы, все заработало.
Непонятно только как вы это узнали :) Я весь вечер пытался найти инфу в инете, но не нашел.

serg_svd писал(а):И дабы не забивать память переменными типа Integer, можно сделать так:

По-вашему, в моем случае не получиться и прийдется забивать память. Смысл моей программки в том что бы пробегать интервал в обе стороны и с разной (произвольной) скоростью. Разве в таком случае есть другой способ не через "фо-некст"?
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: BASCOM AVR в вопросах и ответах

Сообщение serg_svd »

evgenkostin писал(а): Разве в таком случае есть другой способ не через "фо-некст"?

Да чтобы далеко не ходить, можно хоть тот же код что я привел преобразовать.
Во-первых сделать 2 таких подпрограммы для счета вверх или вниз. Во-вторых завести туже переменную байтового размера Stp, но уже беззнаковую. И по мере нужды вызывать подпрограммы со счетом вверх или вниз.

Ну или вариант 2. тот же "фо-некст" но всегда с положительным требуемым шагом, а внутри условие, содержащее в себе 2 расчетные формулы для декремента и инкремента.
Заведите битовую переменную для определения куда шагать, например
Dim Step As Bit
И если Step=0 допустим инкрементируем, а если Step=1 тогда декремент.

Так что всегда можно обойти такие подводные камни
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Аватара пользователя
evgenkostin
Родился
Сообщения: 5
Зарегистрирован: Пт фев 14, 2014 00:00:05

Re: BASCOM AVR в вопросах и ответах

Сообщение evgenkostin »

serg_svd писал(а):Так что всегда можно обойти такие подводные камни.


Вы конечно правы. Если немного подумать, то можно было решить проблему другими способами. Спасибо!
AlekseyV
Грызет канифоль
Сообщения: 291
Зарегистрирован: Ср май 26, 2010 20:40:47

Re: BASCOM AVR в вопросах и ответах

Сообщение AlekseyV »

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?
Благодарю за внимание!
domrustika
Грызет канифоль
Сообщения: 257
Зарегистрирован: Чт мар 22, 2007 13:50:33
Откуда: казань
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение domrustika »

ребят посоветуйте есть кусок кода

Код: Выделить всё

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?
Аватара пользователя
serg_svd
Собутыльник Кота
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Re: BASCOM AVR в вопросах и ответах

Сообщение serg_svd »

domrustika писал(а):ребят посоветуйте есть кусок кода

как сделать чтобы не 1 порт а несколько SET?

Case 1 : Set Portc.0: Set Portc.1
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
domrustika
Грызет канифоль
Сообщения: 257
Зарегистрирован: Чт мар 22, 2007 13:50:33
Откуда: казань
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение domrustika »

НЕТ , так не компилируется выдает ошибку. Так я уже пробовал и еще кучу по другому))
может кто знает оператор case в принципе может выполнить только 1 действие?
Аватара пользователя
Moto_v3x
Потрогал лапой паяльник
Сообщения: 307
Зарегистрирован: Ср мар 31, 2010 11:45:58
Откуда: Славянск

Re: BASCOM AVR в вопросах и ответах

Сообщение Moto_v3x »

так должно работать

Код: Выделить всё

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 Select
andrshpa
Родился
Сообщения: 5
Зарегистрирован: Вт фев 18, 2014 23:49:08

Re: BASCOM AVR в вопросах и ответах

Сообщение andrshpa »

Всем привет. Надо управлять тиристором с 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 в вопросах и ответах

Сообщение aleksandr-zh »

код - мой
но вы как-то странно его изменили

1. добавьте после нажатия кнопки хотя бы паузу! а то МК будет сотню раз изменять переменную пока вы держите кнопку нажатой

2. забудьте Протеус.
Ответить

Вернуться в «AVR»