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

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

Сообщение edm2007 »

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

Сообщение Igor_67 »

Привет всем, котятки! У меня такой интересный вопросик назрел. При подключении к Тини26 часов PCF8583 по шине I2C, происходят непонятные вещи. Инициализация происходит неправильно ( вместо 01:01:59 пишет 11:00:00), начинается счет секунд не с 0, как положено, а с 8 и продолжается всего до 19 секунд, на 20-й секунде сброс секунд в 0 и потом то же самое, только секунды уже считаются с 0, а не с 8. Может Протеус чего глючит? Или все-таки код кривой (в чем я почти не сомневаюсь)... Посмотрите, пожалуйста, кто с TWI работал, что там не так?
Prj3.rar
(16.86 КБ) 188 скачиваний
Пробовал менять Hex(x) на Makedec(x) - эффект тот же. На всякий случай вот еще даташит на часики:
PCF8583T.pdf
(162.21 КБ) 308 скачиваний
Цапу крутить надо!!! Ку или не ку?
Реклама
Электрический кот
Аватара пользователя
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Сообщение 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, в протеусе перестала выскакивать ошибка переполнения программной памяти.
Цапу крутить надо!!! Ку или не ку?
Электрический кот
Аватара пользователя
Сообщения: 1051
Зарегистрирован: Вт окт 21, 2008 11:46:23
Откуда: Барнаул

Сообщение Igor_67 »

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

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

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

Сообщение Igor_67 »

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

Сообщение 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
Опытный кот
Аватара пользователя
Сообщения: 725
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

Сообщение 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 - а эта очищает выход компаратора?
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

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

Сообщение amv2000 »

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

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

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

Сообщение kkozyrev »

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

Сообщение 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]
Открыл глаза
Аватара пользователя
Сообщения: 67
Зарегистрирован: Пт дек 11, 2009 02:40:44
Откуда: C-Петербург

Сообщение kkozyrev »

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

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

Сообщение Igor_67 »

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

Сообщение kip96 »

kkozyrev писал(а):как с помощью АЦП померять сопротивление?
Собственно ни чем не отличается от простого ОМметра, всё зависит от нужной точности, а то можно и на прецизионном резисторе делитель забахать, и мерять на исследуемом сопротивлении падение напряжение.


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

Сообщение Alex_Megavolt_79 »

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

Сообщение 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
Контактная информация:
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

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

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

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


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

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

Сообщение Slawakuzmich »

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

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