Обсуждаем контроллеры компании Atmel.
Ответить

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

Пт июн 07, 2019 05:51:13

raf65, логично.
Только вот файл *.bas с программой, которую я писал.

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

Пт июн 07, 2019 06:06:13

raf65, логично.
Только вот файл *.bas с программой, которую я писал.

да, это файл написанный в программе, никак не восстановить, можно где нибудь поискать (может он нсть) файл расширением *.bak

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

Пт июн 07, 2019 10:51:24

Или попробовать с помощью Unerase поискать в харде

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

Вт июн 11, 2019 21:19:14

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

Код:
$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 раз.

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

Вт июн 11, 2019 21:25:39

При вычислениях некоторые переменные меняют свои значения, хотя с ними в этот момент операции не производятся. Почему? Нехватка оперативной памяти или наложение переменных друг на друга?

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

Чт июн 13, 2019 09:54:00

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

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

PS: МК ATMega32A

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

Чт июн 13, 2019 18:02:40

так вариантов много, начиная от кривой программы ($hwstack $swstack $framesize ,не верная размерность переменной), до битого, китайского камня. Вообще, протеус в помощь, там всё можно отследить по шагам.

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

Чт июн 13, 2019 18:10:26

kip96, с $hwstack $swstack $framesize все впорядке. Камень вроде оригинал (от популярного Российского поставщика). Вот насчет размерности переменной возникли сомнения, еще один случай: есть переменные в массиве, например dim Arr(2) as string * 3 и вроде массив в памяти должен занимать 8 байт, но переменная на 9 байте, идущая после массива, меняла свои значения. После смещения на 1 байт все наладилось.

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

Чт июн 13, 2019 20:16:26

Ну так может переменной присвоили три символа, вот и вылез.
Вообще, у меня тоже возникает интерес контролировать всё жёстко, но это дело личное. Потом резервируешь стек, переменную по больше, с запасом, и всё нормально.

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

Вс июн 30, 2019 14:55:12

В atmega328p прошит Bootloader по стандартному UART интерфейсу,используется только для прошивки
Можно ли в программе PORTD0 и PORTD1 использовать как вход?

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

Чт июл 25, 2019 17:10:03

Всем привет!

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

Кто-нибудь сталкивался с этой проблемой? Хотелось бы понять, это косяк BASCOM'а или примера из его хелпа.

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

Вс июл 28, 2019 08:27:00

Привет всем)

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

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

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

Сб авг 03, 2019 18:26:55

Привет всем)

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

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


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

Изображение

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

Пн авг 26, 2019 08:52:16

Timer0 и Timer2 - одинаковые 8-ми битные таймеры или между ними есть какая-либо разница?
PS: МК Atmega32a

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

Вт авг 27, 2019 20:59:48

По памяти, кроме названия таймеров, ко второму можно привязать аппаратный ШИМ. Могу ошибаться. Ну и очередность срабатывания прерываний.

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

Чт ноя 28, 2019 14:22:40

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

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

должен проработать 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 байт) Скачиваний: 93

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

Чт ноя 28, 2019 21:50:24

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

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

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

End

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

Пт ноя 29, 2019 07:17:06

Добавил сброс порта по вашему совету - не помогло. Мотор на выключается. Мне кажется, не работает Timer1, у меня мало опыта работы с ним. Надо думать дальше.

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

Пт ноя 29, 2019 08:38:23

@rojnov! У вас таймер1 остановлен (кусок Вашего кода):
.........
Enable Interrupts
Enable Int0
Enable Timer1
Stop Timer1
Do
....

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

Пт ноя 29, 2019 09:05:36

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