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

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

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

Сообщение AlekseyV »

raf65, логично.
Только вот файл *.bas с программой, которую я писал.
Аватара пользователя
raf65
Встал на лапы
Сообщения: 87
Зарегистрирован: Вс сен 27, 2009 20:49:06
Откуда: Советск

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

Сообщение raf65 »

[uquote="AlekseyV",url="/forum/viewtopic.php?p=3646729#p3646729"]raf65, логично.
Только вот файл *.bas с программой, которую я писал.[/uquote]
да, это файл написанный в программе, никак не восстановить, можно где нибудь поискать (может он нсть) файл расширением *.bak
dgrett
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

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

Сообщение dgrett »

Или попробовать с помощью Unerase поискать в харде
Я всё-всё узнAю и стану профессором.
XPT
Родился
Сообщения: 10
Зарегистрирован: Вт сен 29, 2015 16:36:57

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

Сообщение XPT »

Здравствуйте. Имеется программа светодиодной "мигалки" с разными режимами работы. Режимы переключаются с помощью одной кнопки поочередно. Хочу добавить еще одну кнопку и пару светодиодов, которая управляет ими, с другими эффектами, но не понимаю как заставить все работать одновременно. Т.е. например первой кнопкой я включил режим мигалки с половинной яркостью(мигание + яркость регулируется с помощью ШИМ), а второй кнопкой включил режим постоянного свечения с половинной яркостью(постоянно + яркость регулируется с помощью ШИМ).

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

$map
$regfile = "m328pdef.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32

'--- Конфигурация входов и выходов контроллера ----------
Ddrb = &B00001011                                                                                     'Конфигурация порта В. Считать с права на лево (PORTB.7...PORTB.1,PORTB.0), 0 - вход, 1 - выход
Set Portb.4                                                                                           'Включить внутренний подтягивающий резистор
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8    'Активируем и настраиваем ШИМ
 '--- Инициализация PCINT0 ----------
Pcmsk0 = &B00010000                                         'Активирует обработку прерывания PORTB.4
Enable Pcint0 : On Pcint0 Buttonon
Enable Interrupts                                           'Разрешаем прерывания
'--- Обзываем всякие переменные ----------
D1 Alias OCR1A                                              'Диоды фары
D2 Alias Portb.3                                            'Индикаторный диод
Button1 Alias Pinb.4                                        'Переменная для кнопки
Dim I As Byte                                               'Универсальная переменная (0-255)
Dim Y As Byte                                               'Универсальная переменная для прерывания
Dim K As Bit                                                'Флаг отключения
Dim Ledmode As Byte                                         'Переменная для режимов
'--- Подпрограмма сна ---
Main_sleep:
Reset D1
Ledmode = 0
'--- Ждем отпускания кнопки ---
Bitwait Button1 , Set
Waitus 20
'--- Засыпаем ---
Powerdown
'--- Ждем нажатия на кнопку ---
K = 0
'--- Основная программа ---
Main:
Do
Select Case Ledmode
Case 0 : Gosub M0
Case 1 : Gosub M1
Case 2 : Gosub M2
Case 3 : Gosub M3
Case Else : Ledmode = 0
End Select
'--- Переход в спящий режим ----------
If K = 1 Then
Reset D1
Goto Main_sleep
End If
Loop

Buttonon:
If Button1 = 0 Then
   Set D2
   D1 = 0
   Y = 100
   Incr Ledmode
   Do
      If Button1 = 1 Then
      Reset D2
         Exit Do
      End If
      Waitms 10
      Incr Y
      If Y = 0 Then
         K = 1
         Reset D2
      End If
   Loop Until Y = 0
Else
  Reset D2
End If
Return
End
'--- Режимы ---
M0:            'Мигалка / Половина яркости
D1 = 128
Waitms 300
D1 = 0
Waitms 300
Return

M1:            'Постоянный / Полная яркость
D1 = 255
Return

M2:            'Постоянный / Половина яркости
D1 = 128
Return

M3:            'Мигалка / Полная яркость
D1 = 255
Waitms 300
D1 = 0
Waitms 300
Return
Последний раз редактировалось XPT Вт июн 11, 2019 21:34:46, всего редактировалось 1 раз.
AlekseyV
Грызет канифоль
Сообщения: 291
Зарегистрирован: Ср май 26, 2010 20:40:47

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

Сообщение AlekseyV »

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

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

Сообщение AlekseyV »

Вроде бы решил вопрос (агрессивным способом):
Каждую переменную принудительно пришил к конкретной ячейке в оперативной памяти. Т.к. переменных очень много (~500), то для удобного ориентирования для себя сделал таблицу в Excel с названием переменной + адрес ячейки памяти.

В определенный момент возникла заминка:
Прикреплял переменные к ячейкам начиная с адреса &H60, но в определенный момент какого-то лешего некоторые переменные начинали менять свои значения. Самое поразительное - в симуляторе все прекрасно отрабатывает в SRAM, на практике же значения меняются. Попробовал изменить начальный адрес записи переменных в SRAM на &H200 (вместо &H60) и все заработало как надо. Странно?!

PS: МК ATMega32A
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

так вариантов много, начиная от кривой программы ($hwstack $swstack $framesize ,не верная размерность переменной), до битого, китайского камня. Вообще, протеус в помощь, там всё можно отследить по шагам.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
AlekseyV
Грызет канифоль
Сообщения: 291
Зарегистрирован: Ср май 26, 2010 20:40:47

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

Сообщение AlekseyV »

kip96, с $hwstack $swstack $framesize все впорядке. Камень вроде оригинал (от популярного Российского поставщика). Вот насчет размерности переменной возникли сомнения, еще один случай: есть переменные в массиве, например dim Arr(2) as string * 3 и вроде массив в памяти должен занимать 8 байт, но переменная на 9 байте, идущая после массива, меняла свои значения. После смещения на 1 байт все наладилось.
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

Ну так может переменной присвоили три символа, вот и вылез.
Вообще, у меня тоже возникает интерес контролировать всё жёстко, но это дело личное. Потом резервируешь стек, переменную по больше, с запасом, и всё нормально.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

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

Сообщение Novice user »

В atmega328p прошит Bootloader по стандартному UART интерфейсу,используется только для прошивки
Можно ли в программе PORTD0 и PORTD1 использовать как вход?
Аватара пользователя
Секретный кот
Поставщик валерьянки для Кота
Сообщения: 2106
Зарегистрирован: Ср сен 17, 2008 14:32:15
Откуда: Старые Васюки
Контактная информация:

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

Сообщение Секретный кот »

Всем привет!

Такой вопросик возник. Функция CRC8 в BASCOM и подпрограмма Docrc8 на VB6 из хелпа дают одинаковый результат только для строк длиной не более 32 байт. Дальше они "расходятся во мнениях".

Кто-нибудь сталкивался с этой проблемой? Хотелось бы понять, это косяк BASCOM'а или примера из его хелпа.
Даже остановленные часы два раза в сутки показывают правильное время.
torneb
Родился
Сообщения: 19
Зарегистрирован: Чт дек 13, 2018 13:32:29

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

Сообщение torneb »

Привет всем)

На али в большом количестве дешево продаются дисплейчики для вывод на контроллере SSD1306. Например https://ru.aliexpress.com/item/32843196 ... 3c00sxY7CY

Кто-нибудь подключал его к BASCOM?Для этого контроллера библиотека какая-нибудь есть?
Для ардуины то написали)
vanyap1
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина
Контактная информация:

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

Сообщение vanyap1 »

[uquote="torneb",url="/forum/viewtopic.php?p=3672676#p3672676"]Привет всем)

На али в большом количестве дешево продаются дисплейчики для вывод на контроллере SSD1306. Например https://ru.aliexpress.com/item/32843196 ... 3c00sxY7CY

Кто-нибудь подключал его к BASCOM?Для этого контроллера библиотека какая-нибудь есть?
Для ардуины то написали)[/uquote]

Даже в интернет ходить не нужно. Об этом знает даже встроенный помощник баскома.

Изображение
AlekseyV
Грызет канифоль
Сообщения: 291
Зарегистрирован: Ср май 26, 2010 20:40:47

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

Сообщение AlekseyV »

Timer0 и Timer2 - одинаковые 8-ми битные таймеры или между ними есть какая-либо разница?
PS: МК Atmega32a
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

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

Сообщение vem566 »

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

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

Сообщение rojnov »

Всем привет! Нужна помощь в написании небольшой программки. Задача. Имеется шаговый

двигатель. Он должен включаться от пары геркон-магнит, вращение против часовой стрелки. Он

должен проработать 3 сек и уснуть на несколько часов до очередного срабатывания геркона. За

основу я взял готовый код из инета, переделал под себя. ШД работает, но не хочет выключаться.

Никак не могу его победить. Гляньте кто-нибудь свежим взглядом,очень надо. В качестве драйвера

ШД - готовая платка из Китая на ULN2003.

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

$regfile = "2313def.dat"
$crystal = 4000000
$hwstack = 32
$swstack = 8
$framesize = 16

Config Portd.6 = Output                                     'âûõîä íà ñâåòîäèîä
Config Portb = Output                                       'âûõîäû íà ØÄ
Config Pind.2 = Input                                       'ãåðêîí
Dim S As Byte                                               'íîìåðà îáìîòîê ØÄ
Dim A As Byte                                               'ñ÷åò÷èê ñåêóíä
Dim F As Bit                                                'ôëàã ñðàáàòûâàíèÿ ãåðêîíà

S = 0 : A = 0 : F = 0

Config Int0 = Falling
On Int0 Pusk                                                'çàïóñê ØÄ
Config Timer1 = Timer , Prescale = 64 , Clear Timer = 1
Ocr1a = 62500
On Oc1a Timecount                                           'ïåðåïîëíåíèå òàéìåðà ÷åðåç 1 ñåê

Led Alias Portd.6

Enable Interrupts
Enable Int0
Enable Timer1
Stop Timer1

Do
If F = 1 Then                                               'ñðàáîòàë ãåðêîí
   Led = 1                                                  'çàãîðåëñÿ ñâåòîäèîä
   Decr S
   If S = 0 Then                                            'ðàññ÷åò íîìåðîâ îáìîòîê ØÄ
    S = 8
   End If

   Select Case S

   Case 1 : Portb = &B00000001
   Case 2 : Portb = &B00000011
   Case 3 : Portb = &B00000010
   Case 4 : Portb = &B00000110
   Case 5 : Portb = &B00000100
   Case 6 : Portb = &B00001100
   Case 7 : Portb = &B00001000
   Case 8 : Portb = &B00001001

   End Select

   Waitus 1000

End If

If A = 3 Then Goto Ex                                       'A=3 - ïðîøëî 3 ñåêóíäû

Loop

Ex:
Stop Timer1
Led = 0 : F = 0 : A = 0

Powerdown                                                   'ÌÊ óñíóë

End

Pusk:                                                       'íàæàòà êíîïêà ïóñêà
Start Timer1
F = 1
Return

Timecount:                                                  'ïîäñ÷åò âðåìåíè
Incr A
Return


Комментарии по-русски почему-то не пишет, прикладываю на всякий случай файл.
Вложения
Akvarium.rar
(800 байт) 279 скачиваний
vanyap1
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина
Контактная информация:

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

Сообщение vanyap1 »

Так понимаю, двигатель не вырубает?

Так сделайте сброс порта до того как отключите контроллер.

Stop Timer1
Led = 0 : F = 0 : A = 0
Portb = &h00
Powerdown 'МК уснул

End
rojnov
Встал на лапы
Сообщения: 127
Зарегистрирован: Вс мар 27, 2011 07:48:48
Откуда: г. Екатеринбург

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

Сообщение rojnov »

Добавил сброс порта по вашему совету - не помогло. Мотор на выключается. Мне кажется, не работает Timer1, у меня мало опыта работы с ним. Надо думать дальше.
forter
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Пт фев 18, 2011 16:09:15

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

Сообщение forter »

@rojnov! У вас таймер1 остановлен (кусок Вашего кода):
.........
Enable Interrupts
Enable Int0
Enable Timer1
Stop Timer1
Do
....
rojnov
Встал на лапы
Сообщения: 127
Зарегистрирован: Вс мар 27, 2011 07:48:48
Откуда: г. Екатеринбург

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

Сообщение rojnov »

Да, таймер остановлен после инициализации. Но он запускается в подпрограмме обработки INT0, после замыкания геркона. И должен останавливаться через 3 сек. Но он не останавливается.
А вообще вопрос перешел из практической области в теоретическую. Я обнаружил, что с поставленной задачей отлично справляется одновибратор на 555, а вместо ШД буду использовать мотор с редуктором от привода тарелки из микроволновки. Уже собрал на картонке - все отлично работает.
Но все равно хотелось бы довести идею с ШД да конца - пригодится на будущее. Так что жду советов .
Ответить

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