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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

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

Сообщение edm2007 »

tanx писал(а):На счет "всякого хлама" не согласен(без него никак).


Да я не в том смысле. Просто к тому что проект большой. А так конечно никак. :) Просто в отправленном проекте нет необходимых библиотек, вот и невозможно проверить. Он еще на этой стадии ошибки выдает. Весь бы проект... С протеусом до кучи...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Привет всем, котятки! У меня такой интересный вопросик назрел. При подключении к Тини26 часов PCF8583 по шине I2C, происходят непонятные вещи. Инициализация происходит неправильно ( вместо 01:01:59 пишет 11:00:00), начинается счет секунд не с 0, как положено, а с 8 и продолжается всего до 19 секунд, на 20-й секунде сброс секунд в 0 и потом то же самое, только секунды уже считаются с 0, а не с 8. Может Протеус чего глючит? Или все-таки код кривой (в чем я почти не сомневаюсь)... Посмотрите, пожалуйста, кто с TWI работал, что там не так?
Prj3.rar
(16.86 КБ) 186 скачиваний

Пробовал менять Hex(x) на Makedec(x) - эффект тот же. На всякий случай вот еще даташит на часики:
PCF8583T.pdf
(162.21 КБ) 306 скачиваний
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

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

$regfile = "attiny26.dat"
$crystal = 8000000
$lib "mcsbyte.lbx"
$hwstack = 32
$swstack = 16
$framesize = 24
'*************************

Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.1,
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7
Config Lcd = 16 * 2
Config Watchdog = 1024
Config I2cdelay = 10
Config Sda = Portb.0
Config Scl = Portb.2

Declare Sub Settime(byval S1 As Byte , Byval M1 As Byte , Byval H1 As Byte , Byval D1 As Byte , Byval Month1 As Byte )
Declare Sub Gettime()

'Declare variables
Dim Tm(5) As Byte At &H60
Dim I As Byte , Temp As Byte

'These are pointers to tm() for simple handling.
Dim S As Byte At &H60 Overlay
Dim M As Byte At &H61 Overlay
Dim H As Byte At &H62 Overlay
Dim D As Byte At &H63 Overlay
Dim Month As Byte At &H64 Overlay

' not needed since the pins are in the right state
I2cinit
Call Settime(56 , 1 , 1 , 29 , 11 )                         'set time


Do
   Call Gettime
   'since the values are stored in BCD format we can use Hex() to display them
   Cls
   Cursor Off
   Lcd Hex(h) ; ":" ; Hex(m) ; ":" ; Hex(s)
   Reset Watchdog
   Wait 1
Loop
End




Sub Gettime()

   'there are 2 ways to get the time. With low level i2c calls or with a high level call
   'first the high level call
    'Tm(1) = 2                                               ' point to second register

    'I2creceive &HA0 , Tm(1) , 1 , 5                         ' write the second address and get 5 bytes back
    'i2creceive will first write 1 byte from tm(1) which is 2, and then will read 5 bytes and store it onto tm(1)-tm(5)


    'and optional with low level calls
    For I = 1 To 5
       Temp = I + 1
       I2cstart
       I2cwbyte &HA0                                        'write addres of PCF8583
       I2cwbyte Temp                                        'select register
       I2cstart                                             'repeated start
       I2cwbyte &HA1                                        'write address for reading info
       I2crbyte Tm(i) , Nack                                'read data
    Next
   I2cstop
End Sub


Sub Settime(s1 As Byte , M1 As Byte , H1 As Byte , D1 As Byte , Month1 As Byte)
    'values are stored as BCD values so convert the values first

    Tm(1) = Makebcd(s1)                                     'seconds
    Tm(2) = Makebcd(m1)                                     'minutes
    Tm(3) = Makebcd(h1)                                     'hours
    Tm(4) = Makebcd(d1)                                     'days
    Tm(5) = Makebcd(month1)                                 'months

    I2cstart                                                'generate start
    I2cwbyte &HA0                                           'write address
    I2cwbyte 0                                              'select control register
    I2cwbyte 8                                              'set year and day bit for masking
    I2cstart                                                'repeated start
    I2cwbyte &HA1                                          'write mode
    I2cwbyte 2                                              'select seconds Register
    For I = 1 To 5
      I2cwbyte Tm(i)
    Next                                                    'write seconds
    I2cstop
End Sub

В строке, I2cwbyte &HA1 в подпрограмме Settime, был сначала адрес &HA0. Исправил на &HA1. Секунды стали идти с 0, но все равно до 19 и дальше все сначала.
Кстати, по умолчанию для Тини26 параметр $swstack = 8. Я изменил значение на 16, в протеусе перестала выскакивать ошибка переполнения программной памяти.
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Интересный факт получается. :shock: Написал ту же самую программу в CodeVision AVR на Си. Компилятор выдал, что код не помещается в Тини26, а в Баскоме он же занимает всего 52-53%. Вот и говори после этого про объемистость кода у Баскома... :)
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

Сообщение Мурик »

Напишите тоже самое на FastAVR и сравните с размером кода баскома.
Все познается в сравнении.
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Мурик писал(а):Напишите тоже самое на FastAVR и сравните с размером кода баскома.
Все познается в сравнении.

Сравнил. Действительно гораздо меньше. Процентов на 20. Хороший компилятор, буду осваивать. :)
Цапу крутить надо!!! Ку или не ку?
aleksandr-zh
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

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

Сообщение aleksandr-zh »

Igor_67 писал(а):
Мурик писал(а):Напишите тоже самое на FastAVR и сравните с размером кода баскома.
Все познается в сравнении.

Сравнил. Действительно гораздо меньше. Процентов на 20. Хороший компилятор, буду осваивать. :)


FastAVR - отличный продукт, но, к сожалению, брошенный
Связаться с автором ни напрямую, ни через его знакомых, ни через адреса и телефоны, указанные у него на сайте, не удалось

тут я выкладывал краткие обзоры компиляторов для АВР: http://pic-avr.narod.ru/avr/compilers.htm
а тут - частичный перевод справки для этого великолепного компилятора:
http://pic-avr.narod.ru/FastAVR_Rus-01-03.zip
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

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

Сообщение amv2000 »

Подскажите пожалуйста за что отвечают эти установки, как определить сколько нужно выделить для своих нужд?
$hwstack = 32
$swstack = 16
$framesize = 24
И в этой строке не могу разобраться
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
Я так понимаю эта строка устанавливает выход ШИМ с частотой Timer1?
Compare A Pwm = Clear Down - а эта очищает выход компаратора?
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

Сообщение Мурик »

amv2000 писал(а):Подскажите пожалуйста за что отвечают эти установки, как определить сколько нужно выделить для своих нужд?
$hwstack = 32
$swstack = 16
$framesize = 24
http://bascomavr.3bb.ru/viewtopic.php?id=494
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

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

Сообщение amv2000 »

А что делает эта строка подскажите?
Config Timer1 = Pwm ,-?
(Pwm = 10-здесь понятно задается разрядность) ,
Compare A Pwm = Clear Down , Compare B Pwm = Clear Down- вероятно очищается компаратор?
aleksandr-zh
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

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

Сообщение aleksandr-zh »

запустить баском, набрать config и нажать F1
Аватара пользователя
kkozyrev
Открыл глаза
Сообщения: 67
Зарегистрирован: Пт дек 11, 2009 02:40:44
Откуда: C-Петербург
Контактная информация:

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

Сообщение kkozyrev »

у меня вопросик есть переменная типа single.
в ней допустим число 25.456789
вопросик:
как урезать её до двух знаков после запятой?
не судите, я учусь -)
Аватара пользователя
Magicanin
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Чт янв 13, 2011 11:36:16
Откуда: Красноярский край

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

Сообщение Magicanin »

Используй конфигурацию:

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

CONFIG SINGLE = SCIENTIFIC , DIGITS = 2
[size=85][color=#80BF00][b]Извращение это[/b][/color]: программатор - [color=#40BFBF]AVR910 by Prottoss[/color], прошивка - [color=#40BFBF]Doper[/color], драйвер - [color=#40BFBF]Osamu Tamura[/color], называется - [color=#FF0000]STK500[/color]![/size]
Аватара пользователя
kkozyrev
Открыл глаза
Сообщения: 67
Зарегистрирован: Пт дек 11, 2009 02:40:44
Откуда: C-Петербург
Контактная информация:

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

Сообщение kkozyrev »

за ответ спасибо.

и еще вопрос:
как с помощью АЦП померять сопротивление?
мне в голову приходит только схема с резисторным делителем. может есть какие еще варианты.
буду рад любым советам.
не судите, я учусь -)
Аватара пользователя
Igor_67
Электрический кот
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

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

Сообщение Igor_67 »

Я так мыслю, необходим генератор стабильного тока, нагруженный на делитель, одно плечо которого известное сопротивление выбранное с достаточной точностью, другое плечо - ваше неизвестное сопротивление Rх. А дальше все просто. Меряем при помощи ADC падение напряжения на обоих сопротивлениях, и по закону Ома для участка цепи вычисляем значение Rx. Результат выдаем на индикатор.
Цапу крутить надо!!! Ку или не ку?
Аватара пользователя
kip96
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

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

Сообщение kip96 »

kkozyrev писал(а):как с помощью АЦП померять сопротивление?

Собственно ни чем не отличается от простого ОМметра, всё зависит от нужной точности, а то можно и на прецизионном резисторе делитель забахать, и мерять на исследуемом сопротивлении падение напряжение.


А у меня вопрос, как измерить ёмкость при помощи таймера и АЦП. При этом ёмкость от 0.1 до 60мк , погрешность допускается до 5% Поделитесь наработками на BASCOM, если у кого есть. :oops: :cry:
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Аватара пользователя
Alex_Megavolt_79
Грызет канифоль
Сообщения: 262
Зарегистрирован: Пт окт 30, 2009 22:33:56
Откуда: Санкт-Петербург

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

Сообщение Alex_Megavolt_79 »

Igor_67 писал(а):

+1. Это самый простой способ и широко применяемый да к тому же наиболее реализуемый под МК. Для тех кто любит по извращеннее (так как для уравновешивания плеч моста при использовании МК придётся использовать цифровые потенциометры) тогда собираем мостовую схему.
Slawakuzmich
Открыл глаза
Сообщения: 50
Зарегистрирован: Чт мар 10, 2011 20:29:23
Откуда: Челяб. обл, Троицкий район
Контактная информация:

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

Сообщение Slawakuzmich »

Помогите пожалуйста сделать аппаратный шим на аттини25, на timer1. Уже неделю мучаюсь, ничего не выходит.

вот с этим кодом только компилируется:

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

$regfile = "attiny25.dat"
$crystal = 4000000
Config Portb.2 = Input
Config Portb.1 = Output
Config Portb.0 = Output


Dim N As Word

 
Config Timer1 = Pwm , Pwm = On , [prescale = 1 , [compare A Pwm = Clear Down , [compare B Pwm = No Output]]]

                                           
N = 0

Ocr1a = 100                                                  ' регистр совпадения





Do


loop




End                                                         'end program
aleksandr-zh
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

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

Сообщение aleksandr-zh »

Чтобы было меньше вопросов о Bascom.
Тут справка по этому компилятору, частично переведена на русский.
Как появится время (к осени) - буду дальше переводить.

Качать тут: http://pic-avr.narod.ru/avr/compilers.htm
Смотреть раздел Компилятор BASCOM (вверху)


прямая ссылка на файл CHM (15.6 мБ) - http://narod.ru/disk/11334765001/BASCAVR.chm.html

Сохранить в папку с установленным компилятором, подтвердить замену
При нажатии F1 будет выполняться поиск по ключевому слову, или смотрите соответствующий раздел.
Slawakuzmich
Открыл глаза
Сообщения: 50
Зарегистрирован: Чт мар 10, 2011 20:29:23
Откуда: Челяб. обл, Троицкий район
Контактная информация:

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

Сообщение Slawakuzmich »

Так и не смог разобраться с командами конфигурирования таймера в шим режиме. В итоге выкинул строку конфига и напрямую записал значения строчкой Tccr1 = &B01100101
Ответить

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