Да я не в том смысле. Просто к тому что проект большой. А так конечно никак.tanx писал(а):На счет "всякого хлама" не согласен(без него никак).
BASCOM AVR в вопросах и ответах
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Реклама
Привет всем, котятки! У меня такой интересный вопросик назрел. При подключении к Тини26 часов PCF8583 по шине I2C, происходят непонятные вещи. Инициализация происходит неправильно ( вместо 01:01:59 пишет 11:00:00), начинается счет секунд не с 0, как положено, а с 8 и продолжается всего до 19 секунд, на 20-й секунде сброс секунд в 0 и потом то же самое, только секунды уже считаются с 0, а не с 8. Может Протеус чего глючит? Или все-таки код кривой (в чем я почти не сомневаюсь)... Посмотрите, пожалуйста, кто с TWI работал, что там не так?
Пробовал менять Hex(x) на Makedec(x) - эффект тот же. На всякий случай вот еще даташит на часики:
Цапу крутить надо!!! Ку или не ку?
Код: Выделить всё
$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Кстати, по умолчанию для Тини26 параметр $swstack = 8. Я изменил значение на 16, в протеусе перестала выскакивать ошибка переполнения программной памяти.
Цапу крутить надо!!! Ку или не ку?
Интересный факт получается.
Написал ту же самую программу в CodeVision AVR на Си. Компилятор выдал, что код не помещается в Тини26, а в Баскоме он же занимает всего 52-53%. Вот и говори после этого про объемистость кода у Баскома... 
Цапу крутить надо!!! Ку или не ку?
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Напишите тоже самое на FastAVR и сравните с размером кода баскома.
Все познается в сравнении.
Все познается в сравнении.
- Реклама
Сравнил. Действительно гораздо меньше. Процентов на 20. Хороший компилятор, буду осваивать.Мурик писал(а):Напишите тоже самое на FastAVR и сравните с размером кода баскома.
Все познается в сравнении.
Цапу крутить надо!!! Ку или не ку?
- Сообщения: 1278
- Зарегистрирован: Пн июн 18, 2007 21:51:20
FastAVR - отличный продукт, но, к сожалению, брошенныйIgor_67 писал(а):Сравнил. Действительно гораздо меньше. Процентов на 20. Хороший компилятор, буду осваивать.Мурик писал(а):Напишите тоже самое на FastAVR и сравните с размером кода баскома.
Все познается в сравнении.
Связаться с автором ни напрямую, ни через его знакомых, ни через адреса и телефоны, указанные у него на сайте, не удалось
тут я выкладывал краткие обзоры компиляторов для АВР: http://pic-avr.narod.ru/avr/compilers.htm
а тут - частичный перевод справки для этого великолепного компилятора:
http://pic-avr.narod.ru/FastAVR_Rus-01-03.zip
Подскажите пожалуйста за что отвечают эти установки, как определить сколько нужно выделить для своих нужд?
$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 - а эта очищает выход компаратора?
$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
http://bascomavr.3bb.ru/viewtopic.php?id=494amv2000 писал(а):Подскажите пожалуйста за что отвечают эти установки, как определить сколько нужно выделить для своих нужд?
$hwstack = 32
$swstack = 16
$framesize = 24
А что делает эта строка подскажите?
Config Timer1 = Pwm ,-?
(Pwm = 10-здесь понятно задается разрядность) ,
Compare A Pwm = Clear Down , Compare B Pwm = Clear Down- вероятно очищается компаратор?
Config Timer1 = Pwm ,-?
(Pwm = 10-здесь понятно задается разрядность) ,
Compare A Pwm = Clear Down , Compare B Pwm = Clear Down- вероятно очищается компаратор?
- Сообщения: 1278
- Зарегистрирован: Пн июн 18, 2007 21:51:20
у меня вопросик есть переменная типа single.
в ней допустим число 25.456789
вопросик:
как урезать её до двух знаков после запятой?
в ней допустим число 25.456789
вопросик:
как урезать её до двух знаков после запятой?
не судите, я учусь -)
Используй конфигурацию:
Код: Выделить всё
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]
за ответ спасибо.
и еще вопрос:
как с помощью АЦП померять сопротивление?
мне в голову приходит только схема с резисторным делителем. может есть какие еще варианты.
буду рад любым советам.
и еще вопрос:
как с помощью АЦП померять сопротивление?
мне в голову приходит только схема с резисторным делителем. может есть какие еще варианты.
буду рад любым советам.
не судите, я учусь -)
Я так мыслю, необходим генератор стабильного тока, нагруженный на делитель, одно плечо которого известное сопротивление выбранное с достаточной точностью, другое плечо - ваше неизвестное сопротивление Rх. А дальше все просто. Меряем при помощи ADC падение напряжения на обоих сопротивлениях, и по закону Ома для участка цепи вычисляем значение Rx. Результат выдаем на индикатор.
Цапу крутить надо!!! Ку или не ку?
Собственно ни чем не отличается от простого ОМметра, всё зависит от нужной точности, а то можно и на прецизионном резисторе делитель забахать, и мерять на исследуемом сопротивлении падение напряжение.kkozyrev писал(а):как с помощью АЦП померять сопротивление?
А у меня вопрос, как измерить ёмкость при помощи таймера и АЦП. При этом ёмкость от 0.1 до 60мк , погрешность допускается до 5% Поделитесь наработками на BASCOM, если у кого есть.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
+1. Это самый простой способ и широко применяемый да к тому же наиболее реализуемый под МК. Для тех кто любит по извращеннее (так как для уравновешивания плеч моста при использовании МК придётся использовать цифровые потенциометры) тогда собираем мостовую схему.Igor_67 писал(а):
Помогите пожалуйста сделать аппаратный шим на аттини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
Чтобы было меньше вопросов о Bascom.
Тут справка по этому компилятору, частично переведена на русский.
Как появится время (к осени) - буду дальше переводить.
Качать тут: http://pic-avr.narod.ru/avr/compilers.htm
Смотреть раздел Компилятор BASCOM (вверху)
прямая ссылка на файл CHM (15.6 мБ) - http://narod.ru/disk/11334765001/BASCAVR.chm.html
Сохранить в папку с установленным компилятором, подтвердить замену
При нажатии F1 будет выполняться поиск по ключевому слову, или смотрите соответствующий раздел.
Тут справка по этому компилятору, частично переведена на русский.
Как появится время (к осени) - буду дальше переводить.
Качать тут: http://pic-avr.narod.ru/avr/compilers.htm
Смотреть раздел Компилятор BASCOM (вверху)
прямая ссылка на файл CHM (15.6 мБ) - http://narod.ru/disk/11334765001/BASCAVR.chm.html
Сохранить в папку с установленным компилятором, подтвердить замену
При нажатии F1 будет выполняться поиск по ключевому слову, или смотрите соответствующий раздел.
Так и не смог разобраться с командами конфигурирования таймера в шим режиме. В итоге выкинул строку конфига и напрямую записал значения строчкой Tccr1 = &B01100101


