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

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

Добавлено: Пн сен 21, 2015 22:19:17
SIM31
Tankor писал(а):В хедпе васика есть, но надо с английским дружить или онлайн переводчик использовать.
В хелпе нету, там много теории, от которой не легче, с начальным настройками понятно, всё работает, но когда кончается память для обычных переменных начинается черная магия.

http://bascomavr.3bb.ru/viewtopic.php?id=494
Я так методом втыка проверил - любая комбинация цифр в стеках не превышающая 63 ( с Вашей одной переменной) - работает. 64 и более ругается на отсутствие памяти. По крайней мере для Тини 2313. И еще, если добавляются переменные - то "магическое" число под стек уменьшается. Попробуйте сами - добавьте 2 переменные и стек придется уменьшать на 2.
P.S. Посмотрел на реальной проге - так переменные вроде и не влияют.
http://avrproject.ru/forum/9-122-1
Это распределение пространства статической памяти (SRAM) под нужды программы в байтах, так называемый стэк.
hwstack - аппаратный стек, он необходим контроллеру чтобы записывать в него адреса того места, откуда прыгнула программа на подпрограмму или функцию. Если проще то так, камень выполняет программу и тут ему нужно уйти на выполнение какой-то подпрограммы (например прерывание), вот чтобы знать куда возвращаться после того как подпрограмма отработана, необходимо место чтобы сохранить этот адрес. При использовании в программе одного Gosub необходимо место в 2 байта.
swstack - программный стэк. Практически тоже самое, но хранит переменные (вернее их адреса) чтобы не потерять их после ухода на подпрограмму. Для хранения каждого адреса переменной тоже нужно резервировать по 2 байта.
framesize - это размер выделяемой памяти для преобразований строк, их форматирования, подготовку вывода на дисплей по команде LCD или PRINT/INPUT. В общем та область памяти куда буферизируются переменные для последующей обработки.
Можно читать тут
http://www.mcselec.com/index.php?option ... &Itemid=57
но там теория сложная. Я ожидал что распределение памяти сделает какой-нибудь мастер.

Программу нет смысла выкладывать, чтобы не забивать голову, примерно такое что-то, беспощадный цикл, прерываний нет. Такое впечатление hwstack можно уменьшить до 0 (нет прерываний), swstack до 2 (одна подпрограмма), но не уверен что поможет и не будет глюков.
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 16
$swstack = 16
$framesize = 16

Dim A As Long
Dim B As Long
Dim C As Long
Dim D As Long
Dim E As Long


Do

incr A
incr B
incr C
incr D
incr E

if a>3335556666 then 'сколько то часов покрутили и хватит
gosub pdprogramma
return

if b>111555111 then 'сколько то часов покрутили и хватит
gosub pdprogramma
return

delayms(1) 'длительность цикла примерно

Loop

End

Podprogramma
a=0
b=0
c=0
d=0
e=0
return

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

Добавлено: Вт сен 22, 2015 06:45:12
Tankor
if a>3335556666 then 'сколько то часов покрутили и хватит
gosub pdprogramma
return 'ВОТ ЭТО ЗАЧЕМ, может end if

if b>111555111 then 'сколько то часов покрутили и хватит
gosub pdprogramma
return 'ВОТ ЭТО ЗАЧЕМ, может end if

Можно короче:
if a>3335556666 then gosub pdprogramma
if b>111555111 then gosub pdprogramma
А ещё лучше всё в ассме (можно и отдельные куски), и место ещё останется.
Со стеками "магия". Не видел точное, простое описание и методу вычислений. Только на практике.
Обнуление:
Loadadr a , X
!ldI r16,0
!st x+,r16
!st x+,r16
!st x+,r16
!st x+,r16
Можно и так:
!LDI r16,0
!STS {a},r16
!STS {a+1},r16
!STS {a+2},r16
!STS {a+3},r16
Тут много интересного про асм вставки. http://bascomavr.3bb.ru/viewtopic.php?id=1275

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

Добавлено: Вт сен 22, 2015 21:08:56
KOTик
Мрр неспящим котам :)
Я к вам за помощью.

Имеется Ардуино Нано, блютус и светик.
Нашел простенькую программу - по УАРТ приходит символ и частота мерцания меняется (1 - чаще; 2 - реже). Подружил Барсик с АРдуино и прошил из него же.
Посылаю по уарт 1 и/или 2- ничего не меняется. В протеусе все четко работает.
Залил тестовый скетч с Ардуино ИДЕ - тоже все работает, а вот прошитый hex/bin из под барсика ни в какую.
Два дня голову ломаю, не пойму в чем дело :kill:

Может где фьюзы поставить надо, бутлоадер отключить (в случае с барсиком) или еще что?
Буду признателен, если кто поможет
Прикладываю архив.
ARDUINO_NANO.zip
протеус, исходник
(21.25 КБ) 174 скачивания
Вот, портировал ещё один пример - программный УАРТ. В протеусе пашет, в железе нет.

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

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



Open "comd.2:9600,8,n,1" For Output As #1                   'PD.2 TXD - ARDUINO PIN D2
Open "comd.4:9600,8,n,1" For Input As #2                    'PD.4 RXD - ARDUINO PIN D4
Dim Cmd As String * 8

Config Portb.0 = Output                                     'ARDUINO PIN D8
Led Alias Portb.0


Print #1 , "Program UART for AVR microcontroller Attiny13"
Print #1 , "------"
Print #1 , "Developer: Yakovlev Alexander"
Print #1 , "E-mail: haker.by@mail.ru"
Print #1 , "------"
Print #1 , "Hello http://cxem.net !!!"
Print #1 , "------"

Do

Print #1 , "Command: (0=[OFF] / 1=[ON])"
Input #2 , Cmd

If Cmd = "1" Then
Led = 1
Print #1 , "LED IS ON!"
End If

If Cmd = "0" Then
Led = 0
Print #1 , "LED IS OFF!"
End If

Loop


End

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

Добавлено: Вт сен 22, 2015 23:38:13
SIM31
Tankor писал(а):if a>3335556666 then 'сколько то часов покрутили и хватит
gosub pdprogramma
return 'ВОТ ЭТО ЗАЧЕМ, может end if
Спасибо за анализ моей писанины, не было связи с рабочим ПК, писал по памяти ночью )) Именно программа и подпрограммы работают четко, даже вдвойне, под надзором WDT )) Сложность была с выбором стеков. Иногда удивляет, в отладчике сплошняком нули в памяти неизменные, а памяти нет. В принципе в общих чертах понятно, но так чтобы с точностью до байта расписать, надо уже крепко задуматься. На ровном месте на час лишняя работа.

Интересно в Codevision AVR мастер тоже не распределяет память на мелких МК?

Можно короче:
if a>3335556666 then gosub pdprogramma
if b>111555111 then gosub pdprogramma
Так действительно, красивее, исправил ))
А ещё лучше всё в ассме (можно и отдельные куски), и место ещё останется.
Со стеками "магия". Не видел точное, простое описание и методу вычислений. Только на практике.
Обнуление:
Loadadr a , X
!ldI r16,0
!st x+,r16
!st x+,r16
!st x+,r16
!st x+,r16
Можно и так:
!LDI r16,0
!STS {a},r16
!STS {a+1},r16
!STS {a+2},r16
!STS {a+3},r16
Тут много интересного про асм вставки. http://bascomavr.3bb.ru/viewtopic.php?id=1275
Для меня этот код набор букв, по 4 байта какие-то операции, пусть лучше Bascom компилирует ))

С соседней темы кусок кода для Codevision от какой-то мигалки-пищалки
http://radiokot.ru/forum/viewtopic.php?p=1071371
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.5a Evaluation
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 18.12.2011
Author : Freeware, for evaluation and
non-commercial use only
Company :
Comments:


Chip type : ATtiny13
AVR Core Clock frequency: 4,800000 MHz
Memory model : Tiny
External RAM size : 0
Data Stack size : 16
*****************************************************/

#include <tiny13.h>

#include <delay.h>

int get,but;
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here

}
... и так далее
Помоему проще, всего один стек 16 байт и визардом сконфигурированы прерывания.

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

Добавлено: Ср сен 23, 2015 13:11:45
kip96
KOTик писал(а):Мрр неспящим котам :)
Я к вам за помощью.

Имеется Ардуино Нано, блютус и светик.
Нашел простенькую программу - по УАРТ приходит символ и частота мерцания меняется (1 - чаще; 2 - реже). Подружил Барсик с АРдуино и прошил из него же.
Посылаю по уарт 1 и/или 2- ничего не меняется. В протеусе все четко работает.
Залил тестовый скетч с Ардуино ИДЕ - тоже все работает, а вот прошитый hex/bin из под барсика ни в какую.
Два дня голову ломаю, не пойму в чем дело :kill:

Может где фьюзы поставить надо, бутлоадер отключить (в случае с барсиком) или еще что?
Буду признателен, если кто поможет
Прикладываю архив.
ARDUINO_NANO.zip
Вот, портировал ещё один пример - программный УАРТ. В протеусе пашет, в железе нет.

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

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



Open "comd.2:9600,8,n,1" For Output As #1                   'PD.2 TXD - ARDUINO PIN D2
Open "comd.4:9600,8,n,1" For Input As #2                    'PD.4 RXD - ARDUINO PIN D4
Dim Cmd As String * 8

Config Portb.0 = Output                                     'ARDUINO PIN D8
Led Alias Portb.0


Print #1 , "Program UART for AVR microcontroller Attiny13"
Print #1 , "------"
Print #1 , "Developer: Yakovlev Alexander"
Print #1 , "E-mail: haker.by@mail.ru"
Print #1 , "------"
Print #1 , "Hello http://cxem.net !!!"
Print #1 , "------"

Do

Print #1 , "Command: (0=[OFF] / 1=[ON])"
Input #2 , Cmd

If Cmd = "1" Then
Led = 1
Print #1 , "LED IS ON!"
End If

If Cmd = "0" Then
Led = 0
Print #1 , "LED IS OFF!"
End If

Loop


End
Так у ардуино вроде кварц на 16МГц стоит. А в программе 8 написанно.
З.Ы,
Я вообще все свои ардуино перепрошил на бутлоадер баскома. Всё на много проще.

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

Добавлено: Ср сен 23, 2015 16:12:51
KOTик
kip96 писал(а): Так у ардуино вроде кварц на 16МГц стоит. А в программе 8 написанно.
З.Ы,
Я вообще все свои ардуино перепрошил на бутлоадер баскома. Всё на много проще.
Вот я балда! И как я такое упустил из виду. Странно что протеус нормально работал :shock:

А не поделитесь ссылкой на ветку форума (для чайников) для перепрошивки дудки под баском бутлоадер?
И будет ли работать баском-бутлоадер в среде Arduino IDE? Не хотелось бы терять универсальность.
Меня привлекла дудка тем, что можно все делать на лету: прототипировать и отлаживать. Но от барсика отказываться не собираюсь :)

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

Добавлено: Ср сен 23, 2015 20:51:45
kip96
Ну значит и в протеусе на мк установлен 8000000.
Я подключаю ардуино к программатор и прощиваю бутлоадер из хелпа баскома. Можете перед этим скачать ардуиновский бутлоадер и сохранить. Потом если надо всё вернуть назад. В баскомем можно настроить так, что будет компилить и прошиват одним нажатием.
http://avrproject.ru/publ/poleznaja_inf ... /4-1-0-109

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

Добавлено: Ср сен 23, 2015 22:20:13
Moto_v3x
так вроде в настройках баскома 2.0.7.8 в разделе программатор есть ардуино, по идее не надо бут перепрошивать

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

Добавлено: Сб сен 26, 2015 14:44:50
Foton-4n
Хай товарищи! А кто у курсе в чём проблема что на tiny84 на 8 канале он же термодатчик 0? Глюк баском? Только плиз если не в теме не пишите всякой ерунды. Жду ответа кто юзал термодатчик на данной серии МК.

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

Добавлено: Вс сен 27, 2015 20:03:49
vanyap1
Приветствую.
Может кто то уже работал с флешками - 25Q64 winbond , или аналогичными?

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

Добавлено: Вс сен 27, 2015 22:41:43
fedyasolder
vanyap1, в планах...

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

Добавлено: Ср окт 07, 2015 13:44:27
Dnepr_1186
Доброго времени суток! Бьюсь я с часами реального времени на ds1302. Пришел с китая модуль, хотя в описании значилась микросхема дс1207. С горем пополам запустил часы с этим модулем, потому как нормального примера и библиотеки не нашел, только какие-то отрывки кода на китайском сайте. Так вот собственно все работает, когда данные часов ввожу через компьютер, то есть задав начальное врмя в прошивке. Когда же пытаюсь кнопкой увеличить показания допустим часа, оно не меняется. Но заметил такую фишку что когда пишу в программе hour=hour+1 показания не меняется, если же задаю hour=hour+2, то при нажатии кнопки время исправно меняется на 2 часа вперед. Помогите разобраться, уже голова кипит. :shock:
Проект протеус и все остальное прилагаю.

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

Добавлено: Ср окт 07, 2015 17:56:42
pavel1979
собираю радиоуправляемый жук,включение жука-по сигналу с рации,передача DTMF,есть ли у кого пример декодера (не кодера,а именно декодера) на баском авр?нет желания использовать спец дешифраторы типа mt8870 так как питание от лития с сотового,минимум потребления и габариты

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

Добавлено: Ср окт 07, 2015 19:40:15
Tankor
Dnepr_1186 писал(а):Доброго времени суток! Бьюсь я с часами реального времени на ds1302. Пришел с китая модуль, хотя в описании значилась микросхема дс1207. С горем пополам запустил часы с этим модулем, потому как нормального примера и библиотеки не нашел, только какие-то отрывки кода на китайском сайте. Так вот собственно все работает, когда данные часов ввожу через компьютер, то есть задав начальное врмя в прошивке. Когда же пытаюсь кнопкой увеличить показания допустим часа, оно не меняется. Но заметил такую фишку что когда пишу в программе hour=hour+1 показания не меняется, если же задаю hour=hour+2, то при нажатии кнопки время исправно меняется на 2 часа вперед. Помогите разобраться, уже голова кипит. :shock:
Проект протеус и все остальное прилагаю.
Повнимательней с поиском. На сайте баскома уже всё есть готовое. http://www.mcselec.com/index2.php?optio ... ght=ds1302
А из празного интереса вопрос можно? Накой такой "древний модель" использовать? Ну хотя бы ds1307 по шине i2c.

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

Добавлено: Ср окт 07, 2015 21:13:22
SIM31
pavel1979 писал(а):собираю радиоуправляемый жук,включение жука-по сигналу с рации,передача DTMF,есть ли у кого пример декодера (не кодера,а именно декодера) на баском авр?нет желания использовать спец дешифраторы типа mt8870 так как питание от лития с сотового,минимум потребления и габариты
Может дешифратор и экономичнее будет (3 мА потребление всего), а программная дешифрация достаточно сложная. Для Arduino всё есть:
http://arduino.ru/forum/proekty/dtmf-dekoder
http://forum.arduino.cc/index.php?topic=121540.0

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

Добавлено: Ср окт 07, 2015 22:13:34
Dnepr_1186
Tankor писал(а): Повнимательней с поиском. На сайте баскома уже всё есть готовое. http://www.mcselec.com/index2.php?optio ... ght=ds1302
А из празного интереса вопрос можно? Накой такой "древний модель" использовать? Ну хотя бы ds1307 по шине i2c.
да с микрой разобрался. Работает уже все. Оказалось глюк протеуса. В железе все как надо переключает.
По древнему модулю все просто. Живу в деревне, радиорынка под боком нету, заказывал модуль на ebay на 1307, однако пришел модуль на 1302, сразу не разобрался, не посмотрел маркировку. Поэтому пришлось этот осваивать, притом брал несколько штук, не выкидывать же их.
Точность часов нормальная, не убегают.Думаю не намного хуже 1307 будет.

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

Добавлено: Чт окт 08, 2015 00:36:58
SIM31
Таймер 0, например в ATtiny13a при делении на 256,

Интервал 256*256/128000= 512 мс, на практике 540 мс

Изображение
'The prescale parameter excepts 1,8,64,256 or 1024
Config Timer0 = Timer , Prescale = 256
On Timer0 My_timer
Enable Interrupts
Enable Timer0
Вроде нормально ))

Только удивило что прерывания кучу памяти отъедают, в отладчике сразу четверть памяти из 64 байт "покраснела" при вызове прерывания. При вызове подпрограммы из прерывания вообще отладчик ругался на Overlap, но работал. На всякий случай убрал подпрограмму.
$regfile = "attiny13a.dat"
$crystal = 128000 '57 FD (wdt+, 1.8V, 128k, 4ms)
$hwstack = 16
$swstack = 16
$framesize = 16

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

Добавлено: Чт окт 08, 2015 09:29:17
Dnepr_1186
Вопрос может не в тему но все же. Хочу подключить ds18b20 с паразитным питанием. Нужны ли какие нибудь изменения в коде? Просто в нормальном режиме подключения температура отображается, а с паразитным питанием-пишет 85гр и все :( Может есть какие хитрости?

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

Добавлено: Чт окт 08, 2015 09:36:05
SIM31
Dnepr_1186 писал(а):Вопрос может не в тему но все же. Хочу подключить ds18b20 с паразитным питанием. Нужны ли какие нибудь изменения в коде? Просто в нормальном режиме подключения температура отображается, а с паразитным питанием-пишет 85гр и все :( Может есть какие хитрости?
Датчик не получает питания значит. На момент измерения нужно переключать порт на выход и подавать высокий уровень.

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

Добавлено: Чт окт 08, 2015 10:59:44
Dnepr_1186
может подскажете что здесь нужно добавить?

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

1wreset
 1wwrite &HCC                                               ' Выдаем команду чтения ПЗУ
 1wwrite &H44                                               ' Запуск измерения

 Waitms 200                                                 ' Ждем окончания преобразования

 1wreset
 1wwrite &HCC
 1wwrite &HBE                                               ' Команда чтения ОЗУ датчика


 Byte0 = 1wread()                                           ' Читаем нулевой байт

 Byte1 = 1wread()

 If Byte1 >= 248 Then                                       ' Проверяем на отрицательную температуру.248 в десятичном – 11111000 в двоичном. Если температура отрицательная – вычитаем из &HFF

 Byte0 = &HFF - Byte0
 Byte1 = &HFF - Byte1
 Signtemperatura = "-"

 Else
 Signtemperatura = "+"
 End If

 T11 = Byte0 / 16                                           ' Сдвигаем нулевой байт вправо на 4 бита (2*2*2*2=16)
 T22 = Byte1 * 16                                           ' Сдвигаем первый байт влево на 4 бита (2*2*2*2=16)

 T11 = T11 + T22
                                  ' Формирмируем результам и выдаем его на индикатор. Команда LCD сама преобразует его в десятичный вид
 T33 = Str(t11)
 T33 = Signtemperatura + T33
 T33 = T33 + "C "
 Waitms 250