опечаткаakl писал(а):uk8amk А что такое ADUM485?
BASCOM AVR в вопросах и ответах
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: BASCOM AVR в вопросах и ответах
Re: BASCOM AVR в вопросах и ответах
нужна помощь .как можно вывести поочерёдно на индикатор значения B = Getadc(0) отдельно от значения А . заранее спасибо. плюс файл .
Acp:
Start Adc
A = Getadc(5)
B = Getadc(0)
M1 = A * 5
M2 = M1
M3 = M1
M1 = M1 / 1000
N1 = Abs(m1) '
M2 = M2 Mod 1000
M2 = M2 / 100
N2 = Abs(m2)
M3 = M3 Mod 100
M3 = M3 / 10
N3 = Abs(m3)
Acp:
Start Adc
A = Getadc(5)
B = Getadc(0)
M1 = A * 5
M2 = M1
M3 = M1
M1 = M1 / 1000
N1 = Abs(m1) '
M2 = M2 Mod 1000
M2 = M2 / 100
N2 = Abs(m2)
M3 = M3 Mod 100
M3 = M3 / 10
N3 = Abs(m3)
- Вложения
-
- фен .0.rar
- (1.17 КБ) 261 скачивание
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Заведите счетчик, по которому будет меняться благ. Флагом может служить переменная типа БИТ.
По состоянию блага приравнивайте для М1 - А или В
Как то так..
По состоянию блага приравнивайте для М1 - А или В
Как то так..
Код: Выделить всё
dim counter as word , flag as bit
do
incr counter
if counter = 500 then : toggle flag: counter = 0 : end if
A = Getadc(5)
B = Getadc(0)
if flag = 1 then : M1 = A * 5 : else : M1 = B * 5 : end if
M2 = M1
M3 = M1
M1 = M1 / 1000
N1 = Abs(m1) '
M2 = M2 Mod 1000
M2 = M2 / 100
N2 = Abs(m2)
M3 = M3 Mod 100
M3 = M3 / 10
N3 = Abs(m3)
loopRe: BASCOM AVR в вопросах и ответах
сильно мерцают цифры на индикаторе.при таком варианте кода.
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Не знаю, у меня такой вариант в часах уже 5 лет работает.
Код ниже.
Понимаю, что код может показаться не оптимальным, но он рабочий, без таймеров и прерываний.
Код ниже.
Понимаю, что код может показаться не оптимальным, но он рабочий, без таймеров и прерываний.
Спойлер
Код: Выделить всё
$regfile = "attiny2313.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config Sda = Porta.1 : Config Scl = Porta.0
Ddrb = 255
Config Portd.3 = Output 'ok
Config Portd.4 = Output 'ok
Config Portd.5 = Output 'ok
Config Portd.6 = Output 'ok
Dim N(4) As Byte
Dim Index As Byte
Dim Seco As Byte , Mine As Byte , Hour As Byte
Dim Count As Byte , T As Byte , C As Byte
Dim Disp As String * 4
Dim W(4) As String * 1
Dim Pak(4) As String * 2
Dim T1 As Byte , Byte0 As Byte , Byte1 As Byte
Dim T2 As Byte
Dim Viv As Bit
Config 1wire = Portd.2
'Seco = 0
'Seco = Makebcd(seco) : Mine = Makebcd(43) : Hour = Makebcd(20)
'I2cstart
'I2cwbyte &HA2
'I2cwbyte &H03
'I2cwbyte Seco
'I2cwbyte Mine
'I2cwbyte Hour
'I2cstop
'1:
Do
I2cstart 'Чтение времени
I2cwbyte &HA2
I2cwbyte &H02
I2cstart
I2cwbyte &HA3
I2crbyte Seco , Ack
I2crbyte Mine , Ack
I2crbyte Hour , Nack
I2cstop
Seco = Makedec(seco) : Mine = Makedec(mine) : Hour = Makedec(hour)
If Count < Seco Then : Incr C 'Каждую секунду увеличиваем значение флага С
If C = 1 Then 'если с = 1 то -
1wreset 'Запрос на преобразование температуры
1wwrite &HCC
1wwrite &H44
End If
If C = 2 Then 'если с = 2 то -
1wreset 'Чтение температурры
1wwrite &HCC
1wwrite &HBE
Byte0 = 1wread()
Byte1 = 1wread()
T1 = Byte0 / 16
T2 = Byte1 * 16
T1 = T1 + T2
End If
If C = 5 Then : Viv = 1 : End If 'флаг для вывода температурры(1 сек)
If C = 6 Then : Viv = 0 : C = 0 : End If 'сброс флага вывода температурры
End If
Count = Seco
If Viv = 0 Then 'Формирование строки для отображение часов
Pak(1) = Str(hour) 'переводим байтовую переменную в строковую
Pak(1) = Format(pak(1) , "00") 'форматируем строковую переменную до вида - "НН"
Pak(2) = Str(mine) 'переводим байтовую переменную в строковую
Pak(2) = Format(pak(2) , "00") 'форматируем строковую переменную до вида - "ММ"
Disp = Pak(1) + Pak(2) 'Составляем строковую переменную для вывода - "ННММ"
Else 'Формирование строки для отображение температурры
Pak(1) = Str(t1) 'переводим байтовую переменную в строковую
'Pak(1) = Format(pak(1) , "00")
Disp = " " + Pak(1) + "^" 'форматируем строковую переменную до вида - " ТT^".(^-знак градуссы С)
End If
For Index = 1 To 4 'Разбор строки на разряды ы вавод на дисплей
W(index) = Mid(disp , Index , 1)
N(index) = Val(w(index))
If W(index) = " " Then : N(index) = 10 : End If
If W(index) = "^" Then : N(index) = 11 : End If
Next Index
Set Portd.6 : Portb = Lookup(n(1) , P) : Waitms 1 : Reset Portd.6
Set Portd.5 : Portb = Lookup(n(2) , P) : Waitms 1 : Reset Portd.5
Set Portd.4 : Portb = Lookup(n(3) , P) : Waitms 1 : Reset Portd.4
Set Portd.3 : Portb = Lookup(n(4) , P) : Waitms 1 : Reset Portd.3
Loop
P:
Data &B11010111 , &B10000100 , &B11001011 , &B11001110 , &H9C , &H5E , &H5F , &HC4 , &HDF , &HDE , &H00 , &HD8Re: BASCOM AVR в вопросах и ответах
все правильно .если работает от мк. а у меня через 74hc595 вот в чём проблема.
Добавлено after 57 minutes 40 seconds:
вторая версия прошивки.в ней нет значения установки при нажатия на кнопку.
https://www.youtube.com/watch?v=NVF4AUaZjsA
Добавлено after 57 minutes 40 seconds:
вторая версия прошивки.в ней нет значения установки при нажатия на кнопку.
https://www.youtube.com/watch?v=NVF4AUaZjsA
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Сделал небольшой эксперимент. Помигал светодиодом.
Понадобилось узнать разницу в частоте мигания при разных подходах к делу.
Использовал BascomAVR и AVR Studio7.
Все остальное на скринах.


Странно что toggle в баскоме отрабатывает медленнее чем set reset.
Примечательно что выходной HEX баскома = 192 байта, а студии - 142 байта.
Понадобилось узнать разницу в частоте мигания при разных подходах к делу.
Использовал BascomAVR и AVR Studio7.
Все остальное на скринах.


Странно что toggle в баскоме отрабатывает медленнее чем set reset.
Примечательно что выходной HEX баскома = 192 байта, а студии - 142 байта.
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Здравствуйте.

А для инверсии бита в Си, можно сделать так:
Если посмотреть на дизасм, то становится понятно, почему так происходит:vanyap1 писал(а): Странно что toggle в баскоме отрабатывает медленнее чем set reset.

А для инверсии бита в Си, можно сделать так:
Код: Выделить всё
PORTB ^= (1 << 5);
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Дизасм с кода баскома и студии должен быть одинаковым при простом Set, Reset bit. Кажется, но сейчас посмотрю.
Но видно что код баскома делает мигание это с частотой 2,4 МГц, а студия 2,66МГц.
Но видно что код баскома делает мигание это с частотой 2,4 МГц, а студия 2,66МГц.
Re: BASCOM AVR в вопросах и ответах
здрассьте, уважаемые. решил вот открыть для себя чудный мир микроконтроллеров и сходу заимел прикладную задачу, с которой и прошу помощи. итак, задача - линейка из 9 (лучше 11) светодиодов, поочередно вспыхивающих и плавно гаснущих. т.е. форма сигнала по сути - убывающая пила. из гугля я понял, что надо лудить ШИМ, но аппаратный ШИМ весь на таймерах, а где их взять такую палестину? не лучше ли будет использовать программный ШИМ, благо кроме этой задачи МК больше ничего делать не будет (ну почти. там еще пара фенечек). так как я твердо решил стоять на бейсике, то на нем и стою, но вот примеров программного ШИМа на нем не нашел. не подкинете хоть на 1-2 канала, а дальше я может и сам справлюсь?
Re: BASCOM AVR в вопросах и ответах
Вот тут. Если что не понятно - спрашивайте.
Re: BASCOM AVR в вопросах и ответах
vem566 спасибо, вечерком обкатаю в симулякре
Добавлено after 7 hours 22 minutes 12 seconds:
долго смотрел в код, пока он не начал смотреть в меня. но вопросы остались:
Добавлено after 7 hours 22 minutes 12 seconds:
долго смотрел в код, пока он не начал смотреть в меня. но вопросы остались:
што должен делать в данном случае цикл Do\Loop и где в теле программы вызов подпрограммы Pulse?Config Portd.2 = Output : Led Alias Portd.2
Config Timer0 = Timer , Prescale = 1 : On Timer0 Pulse : Enable Timer0 : Enable Interrupts
Dim Z As Byte , Y As Integer
Do
Y = 10
Loop
End
Pulse:
Incr Z
If Z >= Y Then : Reset Led : Z = 0
Else : Set Led : End If
Return
-
Radan
- Мучитель микросхем
- Сообщения: 465
- Зарегистрирован: Ср июн 21, 2006 08:24:32
- Откуда: Лисичанск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
IDok писал(а): што должен делать в данном случае цикл Do\Loop и где в теле программы вызов подпрограммы Pulse?
В Do\Loop вы должны менять значение яркости переменной Y.
Pulse срабатывает по таймеру 0 - On Timer0 Pulse
Re: BASCOM AVR в вопросах и ответах
тысяча извинений, я сварщик пока не настоящий, но я там вижу бесконечный пустой цикл без надежды на выход и до подпрограммы дело не доходитRadan писал(а):
В Do\Loop вы должны менять значение яркости переменной Y.
Pulse срабатывает по таймеру 0 - On Timer0 Pulse
да и симулятор Баскома тоже по циклу крутится и не хочет выходить
Re: BASCOM AVR в вопросах и ответах
А это в Proteus'e смотреть надо.симулятор Баскома тоже по циклу крутится и не хочет выходить
-
Radan
- Мучитель микросхем
- Сообщения: 465
- Зарегистрирован: Ср июн 21, 2006 08:24:32
- Откуда: Лисичанск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Здесь рабочий девайс с ШИМом - http://bascom.at.ua/publ/1-1-0-9IDok писал(а): тысяча извинений, я сварщик пока не настоящий
Re: BASCOM AVR в вопросах и ответах
шайтанская кегля! работает! О_ОА это в Proteus'e смотреть надо.
барин, я там половины слов не понимаю!Здесь рабочий девайс с ШИМом
Re: BASCOM AVR в вопросах и ответах
Почему? В приведенном примере 8 работает. Если, конечно, МК будет чем то еще занят, то эта самая "занятость" может тормозить, но в целом все работает.IDok писал(а): два эффекта одновременно (на разных выходах, ессно) я ж не запущу, да?
Если частота МК 8 МГц, таймер срабатывает по переполнению(можно сократить время срабатывания), то есть в 256 раз медленнее. Получается 31250 Гц. Дискретность ШИМа то же 256. Частота мигания диодов 122 Герца, что глазом не заметно.
Ну и можно дальше развлекаться. Частоту поднять до 16-20 МГц, таймер заставить срабатывать по совпадению, дискретность ШИМа уменьшить до 64 градаций яркости. Этим можно еще удвоить каналы.
- svic
- Друг Кота
- Сообщения: 5837
- Зарегистрирован: Ср ноя 17, 2010 23:10:55
- Откуда: Ижевск LO66NU
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Привет! Намедни была нужда поиграться с вводом/выводом, так в шпорах нета обнаружил нестыковку -
одне пишут:
Вопрос - какой из вариантов правильный?

одне пишут:
другие:К примеру нам надо сконфигурировать порт B таким образом
CONFIG PORTB = OUTPUT
CONFIG PORTB.3 = INPUT
CONFIG PORTB.4 = INPUT
CONFIG PORTB.5 = INPUT
То есть – 3,4 и 5 выводы порта настроены на вход, а остальные на выход. С помощью DDR то же самое можно сделать одной строчкой… вот так…
DDRB=&B11100011
или вовсе:Можно также устанавливать направление соответствующих линий порта с помощью установки регистра DDRB. Для примера инструкция:
DDRB = &B00001111
повлечет запись числа 15 в регистр направления порта B, и 4 старших бита (PORTB.7 до PORTB.4) будут выходами, а 4 младшие (PORTB.3 до PORTB.0) входами.
это все можно настроить через специальный регистр DDR, настройка займет всего одну строчку кода:
DDRB = 11101011 '2 и 4 ножки порта B сконфигурированы на вход, остальные - на выход
Вопрос - какой из вариантов правильный?
В начале жизнь мучает вопросами, в конце - ответами...
Re: BASCOM AVR в вопросах и ответах
Работать это будет одинаково, так что как хочется, так и пишите.