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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
SIM31
Это не хвост, это антенна
Сообщения: 1363
Зарегистрирован: Чт апр 04, 2013 22:22:57
Откуда: Белгород, РФ

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

Сообщение 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
Аватара пользователя
Tankor
Встал на лапы
Сообщения: 139
Зарегистрирован: Вт май 03, 2011 10:13:12
Откуда: Россия, Татарстан

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

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

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

Сообщение KOTик »

Мрр неспящим котам :)
Я к вам за помощью.

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

Может где фьюзы поставить надо, бутлоадер отключить (в случае с барсиком) или еще что?
Буду признателен, если кто поможет
Прикладываю архив.
ARDUINO_NANO.zip
протеус, исходник
(21.25 КБ) 170 скачиваний


Вот, портировал ещё один пример - программный УАРТ. В протеусе пашет, в железе нет.

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

$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
Аватара пользователя
SIM31
Это не хвост, это антенна
Сообщения: 1363
Зарегистрирован: Чт апр 04, 2013 22:22:57
Откуда: Белгород, РФ

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

Сообщение 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 от какой-то мигалки-пищалки
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 байт и визардом сконфигурированы прерывания.
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

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

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

Сообщение KOTик »

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


Вот я балда! И как я такое упустил из виду. Странно что протеус нормально работал :shock:

А не поделитесь ссылкой на ветку форума (для чайников) для перепрошивки дудки под баском бутлоадер?
И будет ли работать баском-бутлоадер в среде Arduino IDE? Не хотелось бы терять универсальность.
Меня привлекла дудка тем, что можно все делать на лету: прототипировать и отлаживать. Но от барсика отказываться не собираюсь :)
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

Ну значит и в протеусе на мк установлен 8000000.
Я подключаю ардуино к программатор и прощиваю бутлоадер из хелпа баскома. Можете перед этим скачать ардуиновский бутлоадер и сохранить. Потом если надо всё вернуть назад. В баскомем можно настроить так, что будет компилить и прошиват одним нажатием.
http://avrproject.ru/publ/poleznaja_informacija/ispolzovanie_zagruzchika_bascom_avr/4-1-0-109
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
Moto_v3x
Потрогал лапой паяльник
Сообщения: 307
Зарегистрирован: Ср мар 31, 2010 11:45:58
Откуда: Славянск

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

Сообщение Moto_v3x »

так вроде в настройках баскома 2.0.7.8 в разделе программатор есть ардуино, по идее не надо бут перепрошивать
Аватара пользователя
Foton-4n
Электрический кот
Сообщения: 1073
Зарегистрирован: Вт май 22, 2012 19:29:06

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

Сообщение Foton-4n »

Хай товарищи! А кто у курсе в чём проблема что на tiny84 на 8 канале он же термодатчик 0? Глюк баском? Только плиз если не в теме не пишите всякой ерунды. Жду ответа кто юзал термодатчик на данной серии МК.
vanyap1
Электрический кот
Сообщения: 1048
Зарегистрирован: Пт июл 30, 2010 11:49:03
Откуда: Украина
Контактная информация:

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

Сообщение vanyap1 »

Приветствую.
Может кто то уже работал с флешками - 25Q64 winbond , или аналогичными?
Аватара пользователя
fedyasolder
Поставщик валерьянки для Кота
Сообщения: 2168
Зарегистрирован: Ср май 01, 2013 13:53:56
Откуда: с пальмы в Рио-Инженейро

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

Сообщение fedyasolder »

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

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

Сообщение Dnepr_1186 »

Доброго времени суток! Бьюсь я с часами реального времени на ds1302. Пришел с китая модуль, хотя в описании значилась микросхема дс1207. С горем пополам запустил часы с этим модулем, потому как нормального примера и библиотеки не нашел, только какие-то отрывки кода на китайском сайте. Так вот собственно все работает, когда данные часов ввожу через компьютер, то есть задав начальное врмя в прошивке. Когда же пытаюсь кнопкой увеличить показания допустим часа, оно не меняется. Но заметил такую фишку что когда пишу в программе hour=hour+1 показания не меняется, если же задаю hour=hour+2, то при нажатии кнопки время исправно меняется на 2 часа вперед. Помогите разобраться, уже голова кипит. :shock:
Проект протеус и все остальное прилагаю.
Вложения
ds1302.rar
(229.17 КБ) 197 скачиваний
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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

Сообщение pavel1979 »

собираю радиоуправляемый жук,включение жука-по сигналу с рации,передача DTMF,есть ли у кого пример декодера (не кодера,а именно декодера) на баском авр?нет желания использовать спец дешифраторы типа mt8870 так как питание от лития с сотового,минимум потребления и габариты
Аватара пользователя
Tankor
Встал на лапы
Сообщения: 139
Зарегистрирован: Вт май 03, 2011 10:13:12
Откуда: Россия, Татарстан

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

Сообщение Tankor »

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

Повнимательней с поиском. На сайте баскома уже всё есть готовое. http://www.mcselec.com/index2.php?option=com_forum&Itemid=59&page=viewtopic&t=8905&highlight=ds1302
А из празного интереса вопрос можно? Накой такой "древний модель" использовать? Ну хотя бы ds1307 по шине i2c.
Аватара пользователя
SIM31
Это не хвост, это антенна
Сообщения: 1363
Зарегистрирован: Чт апр 04, 2013 22:22:57
Откуда: Белгород, РФ

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

Сообщение SIM31 »

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


Может дешифратор и экономичнее будет (3 мА потребление всего), а программная дешифрация достаточно сложная. Для Arduino всё есть:
http://arduino.ru/forum/proekty/dtmf-dekoder
http://forum.arduino.cc/index.php?topic=121540.0
Аватара пользователя
Dnepr_1186
Потрогал лапой паяльник
Сообщения: 398
Зарегистрирован: Чт мар 26, 2009 20:53:27
Откуда: Беларусь.Минская обл.

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

Сообщение Dnepr_1186 »

Tankor писал(а):Повнимательней с поиском. На сайте баскома уже всё есть готовое. http://www.mcselec.com/index2.php?option=com_forum&Itemid=59&page=viewtopic&t=8905&highlight=ds1302
А из празного интереса вопрос можно? Накой такой "древний модель" использовать? Ну хотя бы ds1307 по шине i2c.

да с микрой разобрался. Работает уже все. Оказалось глюк протеуса. В железе все как надо переключает.
По древнему модулю все просто. Живу в деревне, радиорынка под боком нету, заказывал модуль на ebay на 1307, однако пришел модуль на 1302, сразу не разобрался, не посмотрел маркировку. Поэтому пришлось этот осваивать, притом брал несколько штук, не выкидывать же их.
Точность часов нормальная, не убегают.Думаю не намного хуже 1307 будет.
Аватара пользователя
SIM31
Это не хвост, это антенна
Сообщения: 1363
Зарегистрирован: Чт апр 04, 2013 22:22:57
Откуда: Белгород, РФ

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

Сообщение 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
Аватара пользователя
Dnepr_1186
Потрогал лапой паяльник
Сообщения: 398
Зарегистрирован: Чт мар 26, 2009 20:53:27
Откуда: Беларусь.Минская обл.

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

Сообщение Dnepr_1186 »

Вопрос может не в тему но все же. Хочу подключить ds18b20 с паразитным питанием. Нужны ли какие нибудь изменения в коде? Просто в нормальном режиме подключения температура отображается, а с паразитным питанием-пишет 85гр и все :( Может есть какие хитрости?
Аватара пользователя
SIM31
Это не хвост, это антенна
Сообщения: 1363
Зарегистрирован: Чт апр 04, 2013 22:22:57
Откуда: Белгород, РФ

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

Сообщение SIM31 »

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


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

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

Сообщение 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
Ответить

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