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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
max50
Мучитель микросхем
Сообщения: 497
Зарегистрирован: Ср дек 10, 2008 21:24:28
Откуда: Алтайский край, Барнаул

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

Сообщение max50 »

У меня кварц 16 МГц.
Вложения
noname3.hex
(2.78 КБ) 283 скачивания
Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
Аватара пользователя
Microtech
Поставщик валерьянки для Кота
Сообщения: 2052
Зарегистрирован: Вт ноя 03, 2009 21:02:38
Откуда: Москва
Контактная информация:

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

Сообщение 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
Аватара пользователя
KOTик
Встал на лапы
Сообщения: 148
Зарегистрирован: Пн июн 07, 2010 16:16:57
Контактная информация:

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

Сообщение 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 для меня сложно. Я в нем ничего не понимаю. Барсик как-то привычней :)
В любом случае, спасибо!
Аватара пользователя
max50
Мучитель микросхем
Сообщения: 497
Зарегистрирован: Ср дек 10, 2008 21:24:28
Откуда: Алтайский край, Барнаул

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

Сообщение max50 »

KOTик писал(а):И очень странно, что меняется только 1 светик. А у меня неопиксель из 12ти светиков по кругу.

Sub Settablecolor(byval Lednr As Word , Byval Index As Byte)
LedNr.....индекс светодиода.
Index.....индекс цвета.

То есть менять нужно не только Index, но и LedNr.
Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
Аватара пользователя
KOTик
Встал на лапы
Сообщения: 148
Зарегистрирован: Пн июн 07, 2010 16:16:57
Контактная информация:

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

Сообщение 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)) , а они почему то не работают
Radan
Мучитель микросхем
Сообщения: 465
Зарегистрирован: Ср июн 21, 2006 08:24:32
Откуда: Лисичанск
Контактная информация:

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

Сообщение Radan »

KOTик писал(а):Урааа! :))
Подружил барсик (2.0.7.5) с библиотекой rainbow.


Расскажите пожалуйста, как вы их подружили.
Аватара пользователя
KOTик
Встал на лапы
Сообщения: 148
Зарегистрирован: Пн июн 07, 2010 16:16:57
Контактная информация:

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

Сообщение 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?config_rainbow.htm
Так что, буду ждать обновления, а пока разбираю в 2.0.7.5 и ничего не получается. Мой вопрос выше остался открытым :(

Странно, не могу сюда прикрепить файлы библиотеки :shock:
Аватара пользователя
uni
Встал на лапы
Сообщения: 137
Зарегистрирован: Пт дек 07, 2007 11:17:40
Откуда: г. Екатеринбург
Контактная информация:

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

Сообщение uni »

У меня есть две одинаковые виртуальные машины с настроенной системой сборки при помощи компилятора bascomp 2.0.7.8. Правда я делаю сборку без IDE, при помощи Makefile.
Одна машина VMware 12, вторая VirtualBox. На обеих winxp и по для работы с avr мк.
Если хотите, могу дать и показать как пользоваться. В систему сборки включена моя утилита objdump, которая позволяет получать листинги с расшифровкой кода bascom в виде ассемблерных команд. По листингам можно понять что делают библиотечные функции, если разбираться в ассемблере. Такие же листинги можно видеть при отладке кода в Proteus.
Россия навсегда!
carnaval
Родился
Сообщения: 17
Зарегистрирован: Пт ноя 21, 2014 00:41:47
Откуда: г. Донецк

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

Сообщение carnaval »

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

Может кто знает как правильно это всё конфигурировать в баскоме чтоб было равноценно Config Portd = Output ?
Под сигналы сброса дисплея, записи и т.д. конфигурируется по ножке и с этим проблем нет. Но как можно шину дата сделать когда на разных портах она висит?
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

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

Сообщение vem566 »

А что мешает у UNO переназначить порты? Да и не припомню, что бы они были вообще назначены. Подписаны - да, а конфигурация произвольная.
Аватара пользователя
Adagumer
Поставщик валерьянки для Кота
Сообщения: 2283
Зарегистрирован: Чт ноя 15, 2012 20:47:59
Откуда: Крымск

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

Сообщение Adagumer »

Попробуйте напрямую указать "нога дисплея" = "порт контроллера"
по типу:
Config Lcdpin = Pin , Rs = Portd.5 , E = Portd.6 , Db4 = Portd.7 , Db5 = Portb.0 , Db6 = Portb.1 , Db7 = Portb.2
carnaval
Родился
Сообщения: 17
Зарегистрирован: Пт ноя 21, 2014 00:41:47
Откуда: г. Донецк

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

Сообщение carnaval »

vem566 писал(а):А что мешает у UNO переназначить порты?

Вопрос в том как это сделать на баскоме. Назначить 8 ножек с разных портов под данные.
Проблема состоит в том что на UNO 8 ножек дисплея на которых выставляются данные попадают 2 ножки PORTB и 6 ножек PORTD.
Плату я конечно могу нарисовать и спаять как надо, но ардуиновские примеры работают с платой UNO. Попробую там посмотреть как они это делают.
Adagumer писал(а):Попробуйте напрямую указать "нога дисплея" = "порт контроллера"

Это конфигурация для двустрочника под стандартную библиотеку баскома. А у меня графический на ILI9341.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

carnaval писал(а):Вопрос в том как это сделать на баскоме.
А что, в баскоме нельзя обращаться к отдельным битам порта ? :shock:
Аватара пользователя
Microtech
Поставщик валерьянки для Кота
Сообщения: 2052
Зарегистрирован: Вт ноя 03, 2009 21:02:38
Откуда: Москва
Контактная информация:

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

Сообщение 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
carnaval
Родился
Сообщения: 17
Зарегистрирован: Пт ноя 21, 2014 00:41:47
Откуда: г. Донецк

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

Сообщение carnaval »

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

Добавлено after 55 seconds:
Microtech писал(а):Так нелзя, чтоли?
Так можно. Но не проще ли один раз сделать конфигурацию для прямого обращения к портам?
Аватара пользователя
Microtech
Поставщик валерьянки для Кота
Сообщения: 2052
Зарегистрирован: Вт ноя 03, 2009 21:02:38
Откуда: Москва
Контактная информация:

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

Сообщение Microtech »

Так можно. Но не проще ли один раз сделать конфигурацию для прямого обращения к портам?

А что я предложил две конфигурации? :facepalm:
Аватара пользователя
Dnepr_1186
Потрогал лапой паяльник
Сообщения: 398
Зарегистрирован: Чт мар 26, 2009 20:53:27
Откуда: Беларусь.Минская обл.

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

Сообщение Dnepr_1186 »

добрый вечер. Товраищи, примитивная задача-измерить частоту. Сделал на таймере, считывание показания по прерыванию ИНТ0. Но как то в протеусе частота прыгает, а бывает вообще выскакивает не та которая должна быть... Включил отладку, глянул как меняются переменные, так вот при каждом цикле они изменяются немного. Т.е. плавают в небольших пределах. И частота на экранчике скачет.А изредка то 0 выскочит то вообще левая частота какая то Как это победить? или я делаю что не так? пробовал измерять по регистру захвата, так вообще тогда экран зависает (от нокиа 3310), а когда выключаю прерывания на момент обращения к экрану, то вообще сильно прыгает частота. В общем может поможете "причесать" примитивную программу.
Все файлы прилагаю.
Вложения
автопдсос.rar
(44.28 КБ) 190 скачиваний
Аватара пользователя
Dnepr_1186
Потрогал лапой паяльник
Сообщения: 398
Зарегистрирован: Чт мар 26, 2009 20:53:27
Откуда: Беларусь.Минская обл.

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

Сообщение Dnepr_1186 »

4 раза скачано. А ответа нет :(
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

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

Сообщение vem566 »

Несколько раз пытался в протеусе смоделировать частотомер, ни разу ни при каких алгоритмах эмулятор корректно не работал. Все было тоже самое, что и у Вас. Закончилось отладкой в железе.
rojnov
Встал на лапы
Сообщения: 127
Зарегистрирован: Вс мар 27, 2011 07:48:48
Откуда: г. Екатеринбург

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

Сообщение 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, или надо каждый раз указывать ему

начальное значение?
Ответить

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