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

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

Добавлено: Сб ноя 19, 2016 17:46:19
max50
У меня кварц 16 МГц.

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

Добавлено: Вс ноя 20, 2016 09:58:49
Microtech
Кусок на ассемблере. Спер у кого-то и немного подправил. Значение регистра osccal подобрал, чтобы частота была около 12.5 МГц. (внутренний RC генератор)
СпойлерSend:
Disable Interrupts

push r17
push r16
push r0
' leds - количество кристаллов. в каждом ws2812 3 кристалла.
Loadadr Leds , X 'адрес переменной bytemax загружаем в регистровую пару x (R26,R27)
ld r17,x 'в R17 загружаем x (адрес bytemax)
Loadadr Rgb1(1) , X 'адрес начала массива rgb1 загружаем в регистровую пару x (R26,R27)
'массив rgb1 должен быть не короче константы leds. в этом массиве цвета для каждого диода
Nextbyte:
ld r0,x+ 'В r0 загружается байт по адресу из регистра x, а x инкрементируется
ldi r16,8
Nextbit:
'
Sbi $1b , 0 'адрес порта вывода
lsl r0
brcs Bit1
Bit0:
cbi $1b , 0
Bit1:
Nop
dec r16
cbi $1b , 0
brne Nextbit

dec r17
cpi r17,0
brne Nextbyte

pop r0
pop r16
pop r17

Waitus 5
Enable Interrupts
Return

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

Добавлено: Пн ноя 21, 2016 00:48:35
KOTик
Урааа! :))
Подружил барсик (2.0.7.5) с библиотекой rainbow.
Ваш исходник работает!
Спасибо!

Иду дальше...
Ознакомился с описанием, что-то получается, а что-то нет.
Например, Call Settablecolor(0 , Х) работает с массивом и, меняя Х могу выбрать палитру. И очень странно, что меняется только 1 светик. А у меня неопиксель из 12ти светиков по кругу.
Чтобы включить все светики в ленте, надо воспользоваться Fill_Stripe() или Fill_color().
т.е. Call Fill_stripe(color(Х)) - здесь Х может принять значения: 1(светит белым); 2(светит желтым) и 3(светит красным). Почему только 3 и откуда такие цвета - не пойму. И почему цвет заливки не берется с массива?

Вкратце по умолчанию все светики горят белым. Каждое нажатие меняет цвет (берется из палитры). Привожу исходник
Спойлер

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

$regfile = "m328pdef.dat"
 $Crystal = 16000000
 $hwstack = 40
 $swstack = 16
 $framesize = 32

 Config Debounce = 75                                        'время задержки в мс
 '__________________________________


 Config Pind.6 = Input
 Button Alias Pind.6                                        'Присвоение КНОПКА для PIND.6


 '----[IMPLEMENT RAINBOW]--------------------------------------------------------

$lib "Rainbow1.21.lib"
$external WS2812b
 Declare Sub Select_rainbow(byval Channel As Byte)
 Declare Sub Setcolor(byval Lednr As Word , Color() As Byte)
 Declare Sub Send()
 Declare Sub Shift_Left(byval Left_index As Word , Byval Width As Word) : $external USE_Shift_Left
 Declare Sub Shift_right(byval Left_index As Word , Byval Width As Word) : $external Use_shift_right
 Declare Sub Settablecolor(byval Lednr As Word , Byval Index As Byte) : $external Use_settablecolor
 Declare Sub Fill_colors(color() As Byte) : $external Use_fill
 Declare Sub Fill_stripe(color() As Byte) : $external Use_fill_stripe



 '#Rainbow0
 Const Rainbow0_len = 12
 Const Rainbow0_port = Portc
 Const Rainbow0_pin = Pc3


 'Gloabal Color-variables
 Dim Color(3) as Byte
 R Alias Color(_base) : G Alias Color(_base + 1) : B Alias Color(_base + 2)

 Dim Click As Byte


 '__________________________________
 '----[MAIN]---------------------------------------------------------------------

 Call Select_rainbow(0)                                     'select Rainbow
 R = 255 : G = 255 : B = 255                                'define a color
 Call Send()

Do
Debounce Button , 0 , Changecolor , Sub                     'ПЕРЕХОД К МЕТКЕ ДЛЯ ВЫБОРА ЦВЕТА


 Loop

 '/// ---> МЕНЯЕМ ЦВЕТА ПО НАЖАТИЮ НА КНОПКУ
Changecolor:
Waitms 50

If Button = 0 Then
Incr Click
End If

If Click => 4 Then
Click = 1
End If


If Click = 1 Then
 Call Settablecolor(0 , 0)                                  'КРАСНЫЙ СОГЛАСНО ПАЛИТРЕ ЦВЕТОВ
 'Call Fill_stripe(color(1))                                'СВЕТИТ БЕЛЫМ - КАКОЙ-ТО ПРОИЗВОЛЬНЫЙ ЦВЕТ. ОТКУДА ОН?
 Call Send()
End If


If Click = 2 Then
 Call Settablecolor(0 , 1)                                  'ЗЕЛЕНЫЙ СОГЛАСНО ПАЛИТРЕ ЦВЕТОВ
 'Call Fill_stripe(color(2))                                 'СВЕТИТ ЖЕЛТЫМ - КАКОЙ-ТО ПРОИЗВОЛЬНЫЙ ЦВЕТ. ОТКУДА ОН?
 Call Send()
End If

If Click = 3 Then
 Call Settablecolor(0 , 2)                                  'СИНИЙ СОГЛАСНО ПАЛИТРЕ ЦВЕТОВ
 'Call Fill_stripe(color(3))                                 'СВЕТИТ КРАСНЫМ - КАКОЙ-ТО ПРОИЗВОЛЬНЫЙ ЦВЕТ. ОТКУДА ОН?
 Call Send()
End If

Bitwait Button , Set
Waitms 50
Return



  End



Rainbow_colors:
      '       R  ,  G  ,  B                    index
      Data 255 , 0 , 0                                      'Red         0
      Data 0 , 255 , 0                                      'Green       1
      Data 0 , 0 , 255                                      'Blue        2
      Data 255 , 160 , 0                                    'Orange      3
      Data 255 , 255 , 00                                   'Yellow      4
      Data 190 , 0 , 255                                    'HotPink     5
      Data 255 , 255 , 255                                  'HotPink     6

Microtech, asm для меня сложно. Я в нем ничего не понимаю. Барсик как-то привычней :)
В любом случае, спасибо!

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

Добавлено: Пн ноя 21, 2016 17:30:36
max50
KOTик писал(а):И очень странно, что меняется только 1 светик. А у меня неопиксель из 12ти светиков по кругу.
Sub Settablecolor(byval Lednr As Word , Byval Index As Byte)
LedNr.....индекс светодиода.
Index.....индекс цвета.
То есть менять нужно не только Index, но и LedNr.

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

Добавлено: Пн ноя 21, 2016 18:51:57
KOTик
Call Settablecolor(0 , 1) 'ЗЕЛЕНЫЙ СОГЛАСНО ПАЛИТРЕ ЦВЕТОВ
Здесь 0 - это первый светодиод (LedNumber). Если напишу 11, то загорится 12ый, если напишу 4, то загорится 5ый. Но никак ни все :(

Писать так:

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

Call Settablecolor(0 , 1)                                  'ЗЕЛЕНЫЙ СОГЛАСНО ПАЛИТРЕ ЦВЕТОВ
Call Settablecolor(1 , 1)                                  'ЗЕЛЕНЫЙ СОГЛАСНО ПАЛИТРЕ ЦВЕТОВ
Call Settablecolor(2 , 1)                                  'ЗЕЛЕНЫЙ СОГЛАСНО ПАЛИТРЕ ЦВЕТОВ
...
Call Settablecolor(11 , 1)                                  'ЗЕЛЕНЫЙ СОГЛАСНО ПАЛИТРЕ ЦВЕТОВ
Это не вариант. Ведь есть Call Fill_stripe(color(3)) и Call Fill_color(color(3)) , а они почему то не работают

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

Добавлено: Ср ноя 23, 2016 10:15:43
Radan
KOTик писал(а):Урааа! :))
Подружил барсик (2.0.7.5) с библиотекой rainbow.
Расскажите пожалуйста, как вы их подружили.

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

Добавлено: Ср ноя 23, 2016 15:29:16
KOTик
Radan писал(а):
KOTик писал(а):Урааа! :))
Подружил барсик (2.0.7.5) с библиотекой rainbow.
Расскажите пожалуйста, как вы их подружили.
Ооо... И не спрашивайте.
Пробовал одну версию, за другой. Гуглил тут,там.
У max50 с версией 2.0.7.7 вроде работает. Я эту версию не нашел. Закачал 2.0.7.5 и то сразу не заработало.
Пришлось удалить барсик, почистить реестр Винды и только потом вроде заработало.

В идеале, конечно, 2.0.7.9. Но как подсказал max50, он пока только ввиде обновления. Установочного дистрибутива нет.
А обновление доступно только программе с регистрационным ключом.
Синтаксисы для барсика 2.0.7.9 и ранних версий разные. Для версии 2.0.7.9 он настраивается всего одной строкой и проще управляется. В ранних же версиях, приходится объявлять Sub и вызывать их (исходник выше).
Вот команды для 2.0.7.9 http://avrhelp.mcselec.com/index.html?c ... ainbow.htm
Так что, буду ждать обновления, а пока разбираю в 2.0.7.5 и ничего не получается. Мой вопрос выше остался открытым :(

Странно, не могу сюда прикрепить файлы библиотеки :shock:

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

Добавлено: Чт ноя 24, 2016 19:02:13
uni
У меня есть две одинаковые виртуальные машины с настроенной системой сборки при помощи компилятора bascomp 2.0.7.8. Правда я делаю сборку без IDE, при помощи Makefile.
Одна машина VMware 12, вторая VirtualBox. На обеих winxp и по для работы с avr мк.
Если хотите, могу дать и показать как пользоваться. В систему сборки включена моя утилита objdump, которая позволяет получать листинги с расшифровкой кода bascom в виде ассемблерных команд. По листингам можно понять что делают библиотечные функции, если разбираться в ассемблере. Такие же листинги можно видеть при отладке кода в Proteus.

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

Добавлено: Вс ноя 27, 2016 01:23:30
carnaval
Здравствуйте. Может кто подскажет в таком вопросе.
Нужно подключить дисплей с 8 бит данными к ардуино уно.
Обычно под это дело выделяют отдельный порт так
Config Portd = Output
и далее переназначение под данные
Data_displey Alias Portd
Но на UNO 6 ног дисплея сидят на Portd.2-Portd.6 и две ножки Portb.0 и Portb.1

Может кто знает как правильно это всё конфигурировать в баскоме чтоб было равноценно Config Portd = Output ?
Под сигналы сброса дисплея, записи и т.д. конфигурируется по ножке и с этим проблем нет. Но как можно шину дата сделать когда на разных портах она висит?

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

Добавлено: Вс ноя 27, 2016 04:09:10
vem566
А что мешает у UNO переназначить порты? Да и не припомню, что бы они были вообще назначены. Подписаны - да, а конфигурация произвольная.

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

Добавлено: Вс ноя 27, 2016 10:44:58
Adagumer
Попробуйте напрямую указать "нога дисплея" = "порт контроллера"
по типу:
Config Lcdpin = Pin , Rs = Portd.5 , E = Portd.6 , Db4 = Portd.7 , Db5 = Portb.0 , Db6 = Portb.1 , Db7 = Portb.2

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

Добавлено: Вс ноя 27, 2016 12:44:56
carnaval
vem566 писал(а):А что мешает у UNO переназначить порты?
Вопрос в том как это сделать на баскоме. Назначить 8 ножек с разных портов под данные.
Проблема состоит в том что на UNO 8 ножек дисплея на которых выставляются данные попадают 2 ножки PORTB и 6 ножек PORTD.
Плату я конечно могу нарисовать и спаять как надо, но ардуиновские примеры работают с платой UNO. Попробую там посмотреть как они это делают.
Adagumer писал(а):Попробуйте напрямую указать "нога дисплея" = "порт контроллера"
Это конфигурация для двустрочника под стандартную библиотеку баскома. А у меня графический на ILI9341.

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

Добавлено: Вс ноя 27, 2016 14:54:27
Аlex
carnaval писал(а):Вопрос в том как это сделать на баскоме.
А что, в баскоме нельзя обращаться к отдельным битам порта ? :shock:

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

Добавлено: Вс ноя 27, 2016 15:05:15
Microtech
Так нелзя, чтоли?
A = 55 ' распихиваем байт данных по разным пинам

send_11:
Portc.7 = A.0
Portc.3 = A.1
Portb.2 = A.2
Portb.0 = A.3
Portd.1 = A.4
Portc.1 = A.5
Portc.2 = A.6
Portb.4 = A.7
return

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

Добавлено: Вс ноя 27, 2016 15:08:09
carnaval
Обращаться можно. Как сделать я знаю. Это вообще не проблема. Но в программе есть байт которым устанавливается нужное состояние порта целиком. А тут нужно без бубна устанавливать согласно этому байту состояние определённых 6 портов D и два порта В.
В принципе я знаю как разложить байт на биты и выставить их в нужных портах, но это действие скажется на быстродействии вывода на дисплей. Буду думать дальше как назначить это напрямую, без дополнительной подпрограммы разделения байта на биты.

Добавлено after 55 seconds:
Microtech писал(а):Так нелзя, чтоли?
Так можно. Но не проще ли один раз сделать конфигурацию для прямого обращения к портам?

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

Добавлено: Вс ноя 27, 2016 15:19:24
Microtech
Так можно. Но не проще ли один раз сделать конфигурацию для прямого обращения к портам?
А что я предложил две конфигурации? :facepalm:

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

Добавлено: Вт дек 06, 2016 19:10:31
Dnepr_1186
добрый вечер. Товраищи, примитивная задача-измерить частоту. Сделал на таймере, считывание показания по прерыванию ИНТ0. Но как то в протеусе частота прыгает, а бывает вообще выскакивает не та которая должна быть... Включил отладку, глянул как меняются переменные, так вот при каждом цикле они изменяются немного. Т.е. плавают в небольших пределах. И частота на экранчике скачет.А изредка то 0 выскочит то вообще левая частота какая то Как это победить? или я делаю что не так? пробовал измерять по регистру захвата, так вообще тогда экран зависает (от нокиа 3310), а когда выключаю прерывания на момент обращения к экрану, то вообще сильно прыгает частота. В общем может поможете "причесать" примитивную программу.
Все файлы прилагаю.

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

Добавлено: Ср дек 07, 2016 13:23:58
Dnepr_1186
4 раза скачано. А ответа нет :(

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

Добавлено: Ср дек 07, 2016 15:11:53
vem566
Несколько раз пытался в протеусе смоделировать частотомер, ни разу ни при каких алгоритмах эмулятор корректно не работал. Все было тоже самое, что и у Вас. Закончилось отладкой в железе.

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

Добавлено: Пт дек 09, 2016 20:30:17
rojnov
Приветствую всех, кто еще не спит.
Детский вопрос. Нужно задействовать Timer1, но чтобы он считал не с 0 до 65535, а с 5000 до 65535. Если я до

начала цикла Do-Loop укажу таймеру начальное значение Timer1=5000, т.е. примерно так:

Config Nimer1=Timer, Prescale=64
Timer1=5000
...
...
Do
Start Timer1
...
...
...
Stop Timer1
Loop

Будет ли при каждом круге цикла Do-Loop таймер стартовать со значения 5000, или надо каждый раз указывать ему

начальное значение?