BASCOM AVR в вопросах и ответах
Re: BASCOM AVR в вопросах и ответах
raf65, логично.
Только вот файл *.bas с программой, которую я писал.
Только вот файл *.bas с программой, которую я писал.
Re: BASCOM AVR в вопросах и ответах
[uquote="AlekseyV",url="/forum/viewtopic.php?p=3646729#p3646729"]raf65, логично.
Только вот файл *.bas с программой, которую я писал.[/uquote]
да, это файл написанный в программе, никак не восстановить, можно где нибудь поискать (может он нсть) файл расширением *.bak
Только вот файл *.bas с программой, которую я писал.[/uquote]
да, это файл написанный в программе, никак не восстановить, можно где нибудь поискать (может он нсть) файл расширением *.bak
Re: BASCOM AVR в вопросах и ответах
Или попробовать с помощью Unerase поискать в харде
Я всё-всё узнAю и стану профессором.
Re: BASCOM AVR в вопросах и ответах
Здравствуйте. Имеется программа светодиодной "мигалки" с разными режимами работы. Режимы переключаются с помощью одной кнопки поочередно. Хочу добавить еще одну кнопку и пару светодиодов, которая управляет ими, с другими эффектами, но не понимаю как заставить все работать одновременно. Т.е. например первой кнопкой я включил режим мигалки с половинной яркостью(мигание + яркость регулируется с помощью ШИМ), а второй кнопкой включил режим постоянного свечения с половинной яркостью(постоянно + яркость регулируется с помощью ШИМ).
Код: Выделить всё
$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 в вопросах и ответах
При вычислениях некоторые переменные меняют свои значения, хотя с ними в этот момент операции не производятся. Почему? Нехватка оперативной памяти или наложение переменных друг на друга?
Re: BASCOM AVR в вопросах и ответах
Вроде бы решил вопрос (агрессивным способом):
Каждую переменную принудительно пришил к конкретной ячейке в оперативной памяти. Т.к. переменных очень много (~500), то для удобного ориентирования для себя сделал таблицу в Excel с названием переменной + адрес ячейки памяти.
В определенный момент возникла заминка:
Прикреплял переменные к ячейкам начиная с адреса &H60, но в определенный момент какого-то лешего некоторые переменные начинали менять свои значения. Самое поразительное - в симуляторе все прекрасно отрабатывает в SRAM, на практике же значения меняются. Попробовал изменить начальный адрес записи переменных в SRAM на &H200 (вместо &H60) и все заработало как надо. Странно?!
PS: МК ATMega32A
Каждую переменную принудительно пришил к конкретной ячейке в оперативной памяти. Т.к. переменных очень много (~500), то для удобного ориентирования для себя сделал таблицу в Excel с названием переменной + адрес ячейки памяти.
В определенный момент возникла заминка:
Прикреплял переменные к ячейкам начиная с адреса &H60, но в определенный момент какого-то лешего некоторые переменные начинали менять свои значения. Самое поразительное - в симуляторе все прекрасно отрабатывает в SRAM, на практике же значения меняются. Попробовал изменить начальный адрес записи переменных в SRAM на &H200 (вместо &H60) и все заработало как надо. Странно?!
PS: МК ATMega32A
- kip96
- Держит паяльник хвостом
- Сообщения: 965
- Зарегистрирован: Ср авг 26, 2009 08:24:50
- Откуда: 1300км от Пупа
Re: BASCOM AVR в вопросах и ответах
так вариантов много, начиная от кривой программы ($hwstack $swstack $framesize ,не верная размерность переменной), до битого, китайского камня. Вообще, протеус в помощь, там всё можно отследить по шагам.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Re: BASCOM AVR в вопросах и ответах
kip96, с $hwstack $swstack $framesize все впорядке. Камень вроде оригинал (от популярного Российского поставщика). Вот насчет размерности переменной возникли сомнения, еще один случай: есть переменные в массиве, например dim Arr(2) as string * 3 и вроде массив в памяти должен занимать 8 байт, но переменная на 9 байте, идущая после массива, меняла свои значения. После смещения на 1 байт все наладилось.
- kip96
- Держит паяльник хвостом
- Сообщения: 965
- Зарегистрирован: Ср авг 26, 2009 08:24:50
- Откуда: 1300км от Пупа
Re: BASCOM AVR в вопросах и ответах
Ну так может переменной присвоили три символа, вот и вылез.
Вообще, у меня тоже возникает интерес контролировать всё жёстко, но это дело личное. Потом резервируешь стек, переменную по больше, с запасом, и всё нормально.
Вообще, у меня тоже возникает интерес контролировать всё жёстко, но это дело личное. Потом резервируешь стек, переменную по больше, с запасом, и всё нормально.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
-
Novice user
- Мудрый кот
- Сообщения: 1704
- Зарегистрирован: Вт янв 05, 2016 10:14:25
- Откуда: поселок Мелеуз
Re: BASCOM AVR в вопросах и ответах
В atmega328p прошит Bootloader по стандартному UART интерфейсу,используется только для прошивки
Можно ли в программе PORTD0 и PORTD1 использовать как вход?
Можно ли в программе PORTD0 и PORTD1 использовать как вход?
- Секретный кот
- Поставщик валерьянки для Кота
- Сообщения: 2106
- Зарегистрирован: Ср сен 17, 2008 14:32:15
- Откуда: Старые Васюки
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Всем привет!
Такой вопросик возник. Функция CRC8 в BASCOM и подпрограмма Docrc8 на VB6 из хелпа дают одинаковый результат только для строк длиной не более 32 байт. Дальше они "расходятся во мнениях".
Кто-нибудь сталкивался с этой проблемой? Хотелось бы понять, это косяк BASCOM'а или примера из его хелпа.
Такой вопросик возник. Функция CRC8 в BASCOM и подпрограмма Docrc8 на VB6 из хелпа дают одинаковый результат только для строк длиной не более 32 байт. Дальше они "расходятся во мнениях".
Кто-нибудь сталкивался с этой проблемой? Хотелось бы понять, это косяк BASCOM'а или примера из его хелпа.
Даже остановленные часы два раза в сутки показывают правильное время.
Re: BASCOM AVR в вопросах и ответах
Привет всем)
На али в большом количестве дешево продаются дисплейчики для вывод на контроллере SSD1306. Например https://ru.aliexpress.com/item/32843196 ... 3c00sxY7CY
Кто-нибудь подключал его к BASCOM?Для этого контроллера библиотека какая-нибудь есть?
Для ардуины то написали)
На али в большом количестве дешево продаются дисплейчики для вывод на контроллере SSD1306. Например https://ru.aliexpress.com/item/32843196 ... 3c00sxY7CY
Кто-нибудь подключал его к BASCOM?Для этого контроллера библиотека какая-нибудь есть?
Для ардуины то написали)
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
[uquote="torneb",url="/forum/viewtopic.php?p=3672676#p3672676"]Привет всем)
На али в большом количестве дешево продаются дисплейчики для вывод на контроллере SSD1306. Например https://ru.aliexpress.com/item/32843196 ... 3c00sxY7CY
Кто-нибудь подключал его к BASCOM?Для этого контроллера библиотека какая-нибудь есть?
Для ардуины то написали)[/uquote]
Даже в интернет ходить не нужно. Об этом знает даже встроенный помощник баскома.

На али в большом количестве дешево продаются дисплейчики для вывод на контроллере SSD1306. Например https://ru.aliexpress.com/item/32843196 ... 3c00sxY7CY
Кто-нибудь подключал его к BASCOM?Для этого контроллера библиотека какая-нибудь есть?
Для ардуины то написали)[/uquote]
Даже в интернет ходить не нужно. Об этом знает даже встроенный помощник баскома.
Re: BASCOM AVR в вопросах и ответах
Timer0 и Timer2 - одинаковые 8-ми битные таймеры или между ними есть какая-либо разница?
PS: МК Atmega32a
PS: МК Atmega32a
Re: BASCOM AVR в вопросах и ответах
По памяти, кроме названия таймеров, ко второму можно привязать аппаратный ШИМ. Могу ошибаться. Ну и очередность срабатывания прерываний.
-
rojnov
- Встал на лапы
- Сообщения: 127
- Зарегистрирован: Вс мар 27, 2011 07:48:48
- Откуда: г. Екатеринбург
Re: BASCOM AVR в вопросах и ответах
Всем привет! Нужна помощь в написании небольшой программки. Задача. Имеется шаговый
двигатель. Он должен включаться от пары геркон-магнит, вращение против часовой стрелки. Он
должен проработать 3 сек и уснуть на несколько часов до очередного срабатывания геркона. За
основу я взял готовый код из инета, переделал под себя. ШД работает, но не хочет выключаться.
Никак не могу его победить. Гляньте кто-нибудь свежим взглядом,очень надо. В качестве драйвера
ШД - готовая платка из Китая на ULN2003.
Комментарии по-русски почему-то не пишет, прикладываю на всякий случай файл.
двигатель. Он должен включаться от пары геркон-магнит, вращение против часовой стрелки. Он
должен проработать 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 в вопросах и ответах
Так понимаю, двигатель не вырубает?
Так сделайте сброс порта до того как отключите контроллер.
Stop Timer1
Led = 0 : F = 0 : A = 0
Portb = &h00
Powerdown 'МК уснул
End
Так сделайте сброс порта до того как отключите контроллер.
Stop Timer1
Led = 0 : F = 0 : A = 0
Portb = &h00
Powerdown 'МК уснул
End
-
rojnov
- Встал на лапы
- Сообщения: 127
- Зарегистрирован: Вс мар 27, 2011 07:48:48
- Откуда: г. Екатеринбург
Re: BASCOM AVR в вопросах и ответах
Добавил сброс порта по вашему совету - не помогло. Мотор на выключается. Мне кажется, не работает Timer1, у меня мало опыта работы с ним. Надо думать дальше.
Re: BASCOM AVR в вопросах и ответах
@rojnov! У вас таймер1 остановлен (кусок Вашего кода):
.........
Enable Interrupts
Enable Int0
Enable Timer1
Stop Timer1
Do
....
.........
Enable Interrupts
Enable Int0
Enable Timer1
Stop Timer1
Do
....
-
rojnov
- Встал на лапы
- Сообщения: 127
- Зарегистрирован: Вс мар 27, 2011 07:48:48
- Откуда: г. Екатеринбург
Re: BASCOM AVR в вопросах и ответах
Да, таймер остановлен после инициализации. Но он запускается в подпрограмме обработки INT0, после замыкания геркона. И должен останавливаться через 3 сек. Но он не останавливается.
А вообще вопрос перешел из практической области в теоретическую. Я обнаружил, что с поставленной задачей отлично справляется одновибратор на 555, а вместо ШД буду использовать мотор с редуктором от привода тарелки из микроволновки. Уже собрал на картонке - все отлично работает.
Но все равно хотелось бы довести идею с ШД да конца - пригодится на будущее. Так что жду советов .
А вообще вопрос перешел из практической области в теоретическую. Я обнаружил, что с поставленной задачей отлично справляется одновибратор на 555, а вместо ШД буду использовать мотор с редуктором от привода тарелки из микроволновки. Уже собрал на картонке - все отлично работает.
Но все равно хотелось бы довести идею с ШД да конца - пригодится на будущее. Так что жду советов .