Страница 170 из 304

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

Добавлено: Вс мар 10, 2013 12:50:29
edm2007
Так и надо приводить код, вызывающий ошибки. А то пишите одно, а компилируете другое. Уберите строку $lib "mcsbyte.lbx".

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

Добавлено: Вс мар 10, 2013 13:00:27
tomas111
edm2007 писал(а):Так и надо приводить код, вызывающий ошибки. А то пишите одно, а компилируете другое. Уберите строку $lib "mcsbyte.lbx".
Спасибо!!! Все откомпилилось! :)) Пошел дальше учить бейсик :))

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

Добавлено: Вс мар 10, 2013 13:02:29
tomas111
А вот в протеусе не работает ... :((

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

Добавлено: Вс мар 10, 2013 13:04:52
edm2007
Работает, я проверял. На AVCC не забыли питание подать?

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

Добавлено: Вс мар 10, 2013 13:07:55
tomas111
edm2007 писал(а):Работает, я проверял. На AVCC не забыли питание подать?
НЕ забыл! висит питание ....

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

Добавлено: Вс мар 10, 2013 13:20:57
edm2007
У меня все работает. Только добавил

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

Config Single = Scientific , Digits = 2 
чтобы до двух знаков после запятой обрезать. И один канал АЦП вывел для наглядности.

Изображение

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

Добавлено: Вс мар 10, 2013 13:24:37
tomas111
А у меня снова ошибка!! Что за фигня ....
И почему показания такие огромные !? Вроде как должно быть до 80 !?

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

Добавлено: Вс мар 10, 2013 13:30:03
edm2007
Это непосредственное значение АЦП. Оно от 0 до 1023.

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

Добавлено: Вс мар 10, 2013 13:34:30
tomas111
Я про верхние показания ... они то и вроде ограничивают диапазон. От 0 до 80
Суть в том что у тебя работает а у меня нет. Хотя я уверен что протеусы у нас по схемам одинаковые ...
Где искать касяк !?
P.S. Мне вообще нужно вывести 4 показания по разным углам экрана... Но я и с одним разобраться не могу ....

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

Добавлено: Вс мар 10, 2013 13:43:57
edm2007
tomas111 писал(а):И почему показания такие огромные !?
tomas111 писал(а):Я про верхние показания ... они то и вроде ограничивают диапазон. От 0 до 80
Послушайте, а 15,72 в каком именно месте больше? Это во-первых. А во-вторых, в коде ограничивается Channel_1 до 80, в то время как выводится Chvar_1. Так что ни о каком ограничении речь не идет, смотрите внимательнее в код.

Свой проект отправлю, но у меня Proteus 7.7.
upd: Отправил.

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

Добавлено: Вс мар 10, 2013 14:09:19
tomas111
Получил! Спасибо!
Почти то что нужно! :))
А подскажи как сделать 4 канала но счет для них один !? Что бы задействовать ADC 0 по ADC 4 и вывод на экране был 0,00 по 8,00 !?

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

Добавлено: Вс мар 10, 2013 15:38:49
edm2007
Отправил в личку.

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

Добавлено: Вс мар 10, 2013 18:52:30
tomas111
edm2007 писал(а):Отправил в личку.
Спасибо! очень хорошо получилось! :)) Есть над чем задуматься :))

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

Добавлено: Вс мар 10, 2013 22:29:07
freeman401
Помогите пожалуйста с прошивкой ;)
Кое-как освоил bascom за полдня
Нужно было написать прошивку для шим контроллера на ATtiny13 для реализации плавной накачки в QCW DRSSTC.
Суть такова: подаем сигнал с внешнего запускающего источника на вход МК, он выдает сигнал запуска генерации для драйвера DRSSTC, затем, через 10мс начинает рост заполнения ШИМ на выходе, чтобы на выходе усилителя класса D начала расти пила. значение шим растет заданное переменным резистором время до заданного переменным резистором предела. как только заполнение дойдет до предела, начинается спад, происходящий в процентном отношении ко времен нарастания, которое тоже выставляется резистором. после окончания пилы пропадает сигнал запуска генерации.
итого: имеем 3 задействованных АЦП, 1 ШИМ, 1 простой вход, 1 простой выход.

вот код:

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

$regfile = "attiny13.dat"
$crystal = 12000000
Config Adc = Single , Prescaler = Auto , Reference = Internal       ' задаем параметры ацп
Config Timer0 = Pwm , Compare A Pwm = Clear Down , Prescale = 1        ' задаем параметры ШИМ'а
Config Portb.0 = Output                                                ' задаем конфигурацию портов
Config Portb.1 = Output
Config Portb.2 = Input
Dim F As Integer ' задаем переменные
Dim R As Integer
Dim I As Integer
Dim V As Integer
Dim N As Integer
Dim A As Integer
Dim B As Integer
Dim C As Integer
N = 256 / 1000
A = getadc(2)
B = getadc(3)
C = getadc(0)
I = Portb.2                                                 ' эта переменная - сигнал с запускающего входа
F =((a / 32) / N) *(b / 1024)                               ' задаем паузу между повышениями значения ШИМ на 1, заздаем нарастание пилы
' ((getadc(2) / 32) численно равно времени накачки
' ((getadc(2) / 32) / 0.256) - это получаем время паузы (мкс) между повышением значения ШИМ на 1, опираясь на разрядность ШИМ'а
' ШИМ у нас 8 битный, значит возможно 256 значений, время перехода межу значениями (мкс) бует равно: время(мс)/256*1000 или время(мс)*0.256
' поскольку у пилы должен быть еще и регулируемый спад, введем переменный резистор, висящий на третьем канале АЦП
' он отвечает за процентную долю нарастающей части пилы во всей длине пилы
R =((a / 32) / N) -((a / 32) / N) *(b / 1024)' задаем паузу между уменьшениями значения ШИМ на 1, создаем спад пилы
' для получения времени паузы (мкс) между понижением значения ШИМ на 1 вычтем из общего времени паузы для пилы врея паузы для фронта филы
V =(c / 4) - 2 ' переменным резистором устанавливаем максимальное выходное напряжение бака.
' т.к. АЦП 10-разрядный и имеет 1024 значения, а ШИМ 8 разрядный (для достижения нужно частоты) и имеет 256 значений, делим значение с АЦП на 4
' отнимаем 2 для безпасности ;)
Start Adc

Do

Pwm0a = 25                                                  'задали начальные 30 вольт на выходе усилителя класса D

Ask_inter:                                                  ' опрос ножки запускающего входа
If I = 1 Then                                               ' если сигнал есть, выдаем сигнал на старт генерации
Set Portb.1 = 1
Waitms 10                                                   ' ждем начала генерации
Goto Ramp_fr
Else
Pwm0a = 25                                                  ' если сигнала нет, то для профилактики сиавим 30 вольт yf выходt и снова оправшивает ножку внешнего прерывателя
Goto Ask_inter

Ramp_fr:                                                    ' начинаем рост пилы
If Pwm0a < V Then                                           ' если значегние ШИМ меньше установленного предела, увеличиваем на 1 и жждем заданное время
Incr Pwm0a
Waitus F
Goto Ramp_fr                                                ' если значение ШИМ достигло установленного предела, начинаем спад пилы
Elseif Pwm0a = V Then
Goto Ramp_re
End If

Ramp_re:                                                    ' спад пилы
If Pwm0a > 25 Then
Decr Pwm0a
Waitus R
Goto Ramp_re                                                ' если значение ШИМ больше, чем 25, то уменьшаем на 1, ждепм установленное время и повторяем операцию
Elseif Pwm0a = 25 Then
Waitms 2                                                    ' немного ждем для того, чтобы все успокоилось
Set Portb.1 = 0                                             ' после окончания спада пилы вылючаем генерацию
Waitms 2                                                    ' немного ждем для того, чтобы все успокоилось
Goto Ask_inter                                              ' идем опрашивать запускающий вход
End If

Loop                                                        ' зацикливаем все

End
Вся проблема в том, что на сроках:

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

F =((a / 32) / N) *(b / 1024) 

и

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

R =((a / 32) / N) -((a / 32) / N) *(b / 1024)
проверка синтаксиса выдает ошибку "3 parameters expected"
у меня уже нет идей...

С бейсиком раньше дело имел, но не очень хорошо его помню

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

Добавлено: Пн мар 11, 2013 07:21:09
max50
tomas111 писал(а):проверка синтаксиса выдает ошибку "3 parameters expected"
Все правильно. :)
Васик позволяет делать одно арифметическое действие в строке, то есть нужно завести промежуточные переменные, и их помощью произвести расчеты. Примерно так:

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

F_1= =a / 32
F_2= =F_1/ N
F_3= =b / 1024
F =F_2 *F_3
F_1, F_2, F_3 - нужно объявить в начале программы. Тип выбрать в зависимости от результата.
С R нужно проделать тоже самое.

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

Добавлено: Пн мар 11, 2013 12:56:34
freeman401
Надеюсь, после ведения этих переменных код влезет в 1Кб ;D

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

Добавлено: Пн мар 11, 2013 12:59:44
max50
freeman401 писал(а):адеюсь, после ведения этих переменных код влезет в 1Кб :))
Надежда умирает последней. :))

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

Добавлено: Пн мар 11, 2013 13:33:44
freeman401
Все теперь правильно, но пишет, что "Out of SRAM space"
не влезло, значит

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

Добавлено: Пн мар 11, 2013 13:37:27
edm2007
Пробуйте на Си. :wink:

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

Добавлено: Пн мар 11, 2013 13:55:46
freeman401
лучше я контроллер возьму тини85, он мне даже дешевле выходит, а памяти в 8 раз больше