BASCOM AVR в вопросах и ответах
- Dnepr_1186
- Потрогал лапой паяльник
- Сообщения: 398
- Зарегистрирован: Чт мар 26, 2009 20:53:27
- Откуда: Беларусь.Минская обл.
Re: BASCOM AVR в вопросах и ответах
да провода то короткие питания. А вот датчик температуры один провод под метр длиной как раз вдоль провода антенны, но провод датчика экранированный.
А по частоте, какиеи там сложные вычисления? Опрос часов, ацп и датчиков температуры. Попробую 1мгц забить
А по частоте, какиеи там сложные вычисления? Опрос часов, ацп и датчиков температуры. Попробую 1мгц забить
Re: BASCOM AVR в вопросах и ответах
Может быть мало для 1-Wire.Dnepr_1186 писал(а):Попробую 1мгц забить
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
пришла ардуина уно http://ru.aliexpress.com/item/Free-shipping-UNO-R3-board-MEGA328P-100-original-and-new-ATMEGA16U2-1PCS-USB-Cable-for-Arduino/32380699737.html?adminSeq=205603858&shopNumber=428050,как его подключить?как прошить?нужны ли драйвера?
Re: BASCOM AVR в вопросах и ответах
pavel1979 писал(а):пришла ардуина уно http://ru.aliexpress.com/item/Free-shipping-UNO-R3-board-MEGA328P-100-original-and-new-ATMEGA16U2-1PCS-USB-Cable-for-Arduino/32380699737.html?adminSeq=205603858&shopNumber=428050,как его подключить?как прошить?нужны ли драйвера?
Поздравляю!
У меня Nano. Установил Arduino IDE (среда разработки) и драйвера сами установились.
Затем открыл Bascom-AVR (v 2.0.5.0) и в настройках выбрал программатор ARDUINO, выставил COM-порт, куда воткнул и вуаля.

Шью оттуда же, через басик. Если не будет прошиваться, уменьшите BAUD.
-
pavel1979
- Мучитель микросхем
- Сообщения: 494
- Зарегистрирован: Пн авг 12, 2013 19:07:47
- Откуда: башкирия мелеуз
Re: BASCOM AVR в вопросах и ответах
я обе поставил,подробнее-http://vrtp.ru/index.php?showtopic=26112&hl=
- Вложения
-
- Безымянный.jpg
- (58.68 КБ) 871 скачивание
Re: BASCOM AVR в вопросах и ответах
Здравствуйте. Не могу побороть ошибку с приемом строки по UART. SIM 900D шлет "нормальную" строку после запроса баланса, которую смотрю через терминальную программу. Мега 8 в СМСке присылет только первые 16 символов... В конце листинга кода приведена полная и усеченная строка. Что я делаю не так?
- Вложения
-
- 9.rar
- (1.23 КБ) 227 скачиваний
Re: BASCOM AVR в вопросах и ответах
Дико извиняюсь за вопрос, который может показаться банальным..
Хочу переделать прошивку для часов с семисегментным индикатором в ИД1 с ИН.
выходы Attiny2313 PB0-PB3 для соответствующих входов ИД1
а PB4-PB7 для динамической индикации анодов.
А теперь уважаемые знатоки, внимание вопрос.
А что писать в конце кода в
Этот код был для семисегментных, а мне надо чтоб бинарный код для ИД1 был.
----
Сам сообразил методом ковыряния. Оказывается, это уровни указаны в обратном порядке, от последнего к первому..
Хочу переделать прошивку для часов с семисегментным индикатором в ИД1 с ИН.
выходы Attiny2313 PB0-PB3 для соответствующих входов ИД1
а PB4-PB7 для динамической индикации анодов.
А теперь уважаемые знатоки, внимание вопрос.
А что писать в конце кода в
Код: Выделить всё
Digits:
Data &B00101000 , &B01111011 , &B00110100 , &B00110010 , &B01100011
Data &B10100010 , &B10100000 , &B00101011 , &B00100000 , &B00100010
Data &B00001000 , &B01011011 , &B00010100 , &B00010010 , &B01000011
Data &B10000010 , &B10000000 , &B00001011 , &B00000000 , &B00000010
Этот код был для семисегментных, а мне надо чтоб бинарный код для ИД1 был.
----
Сам сообразил методом ковыряния. Оказывается, это уровни указаны в обратном порядке, от последнего к первому..
Re: BASCOM AVR в вопросах и ответах
Хэлп, коты... помогите подалуйста....
Есть кусок кода, который нужно ЗАСТАВИТЬ выполнятсья определенное время, скажем 10 секунд!
Код:
'Включаем порт, на порте висит релюшка, которая управляет чем нибудь
Toggle Portb.3 ' включаем порт и релюшка начинает управлять чем нибудь
If Getadc(1) => 890 Then ' тут измеряем напряжение на датчике, пока реле управляет чем нибудь
Wait 1 ' просто задержка
Reset Portb.3 'выключаем порт и перестаем управлять чем нибудь
Else
End If
---
Вопрос, как сделать так, чтобы в этом куске кода измерение напряжения (на датчике) длилось не более 10 секунд?
То есть, включили порт и ждем 10 секунд, если в течение 10 секунд у нас напряжение не дошло до нужного нам значения, выключаем порт.
Если же напряжение вышло на нужный нам уровень за любое время но меньше чем за 10 секунд (хоть 3 или 6 секунд), то ждем 1 секунду и выключаем порт.
Есть кусок кода, который нужно ЗАСТАВИТЬ выполнятсья определенное время, скажем 10 секунд!
Код:
'Включаем порт, на порте висит релюшка, которая управляет чем нибудь
Toggle Portb.3 ' включаем порт и релюшка начинает управлять чем нибудь
If Getadc(1) => 890 Then ' тут измеряем напряжение на датчике, пока реле управляет чем нибудь
Wait 1 ' просто задержка
Reset Portb.3 'выключаем порт и перестаем управлять чем нибудь
Else
End If
---
Вопрос, как сделать так, чтобы в этом куске кода измерение напряжения (на датчике) длилось не более 10 секунд?
То есть, включили порт и ждем 10 секунд, если в течение 10 секунд у нас напряжение не дошло до нужного нам значения, выключаем порт.
Если же напряжение вышло на нужный нам уровень за любое время но меньше чем за 10 секунд (хоть 3 или 6 секунд), то ждем 1 секунду и выключаем порт.
Re: BASCOM AVR в вопросах и ответах
Считать в этом куске прерывания от таймера. Вываливаться из цикла по условию или 10 сек, или температура + 1 сек.
Ну и не понятно, в это время что нибудь еще должно выполняться, или нет. От этого будет зависеть способ реализации.
Ну и не понятно, в это время что нибудь еще должно выполняться, или нет. От этого будет зависеть способ реализации.
Re: BASCOM AVR в вопросах и ответах
Нет, больше ничего выполняться не должно...
сможете помочь кодом? был бы безумно благодарен
сможете помочь кодом? был бы безумно благодарен
Re: BASCOM AVR в вопросах и ответах
Нужен полный код проекта. Добавлю, исправлю. Без проблем.
Re: BASCOM AVR в вопросах и ответах
Это и есть почти полный код, вначале указал лишь параметры, задал порты, начал цикл
$regfile = "attiny13.dat"
$crystal = 400000
Config Portb.5 = Output : Set Portb.1
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portb.4 = Output
Config Portb.3 = Output
Config Portb.0 = Output
Speaker Alias Portb.0
Sound Speaker , 250 , 54
Start Adc
Do
Waitms 500
If Pinb.1 = 0 Then
Wait 1
Toggle Portb.4
Wait 3
Toggle Portb.3
If Getadc(1) => 890 Then
Waitms 1500
Reset Portb.3
Else
End If
Waitms 30
Reset Portb.3
loop
$regfile = "attiny13.dat"
$crystal = 400000
Config Portb.5 = Output : Set Portb.1
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portb.4 = Output
Config Portb.3 = Output
Config Portb.0 = Output
Speaker Alias Portb.0
Sound Speaker , 250 , 54
Start Adc
Do
Waitms 500
If Pinb.1 = 0 Then
Wait 1
Toggle Portb.4
Wait 3
Toggle Portb.3
If Getadc(1) => 890 Then
Waitms 1500
Reset Portb.3
Else
End If
Waitms 30
Reset Portb.3
loop
Re: BASCOM AVR в вопросах и ответах
$regfile = "attiny13.dat"
/* частота генератора 4 МГц, а не 400 кГц. Если кварц действительно 400 кГц, изменить условие
$Crystal=4000000
$hwstack = 10
$swstack = 8
$framesize=32
Config Portb.5 = Output : Set Portb.1
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portb.4 = Output
Config Portb.3 = Output
Config Portb.0 = Output
Speaker Alias Portb.0
/* Определяем таймер с делением до 15,26 герца
Config Timer0 = Timer , Prescale = 1024 ' (4000000 / 256 / 1024 = 15.26 Гц)
/* подпрограмма прерывания по срабатыванию таймера
On Timer0 Tik
/* Переменная для счетчика срабатываний таймера
Dim A As Integer
/* Включаем прерывания
Enable Interrupts
/* старт таймера.
Start Timer0
Sound Speaker , 250 , 54
Start Adc
Do
Waitms 500
If Pinb.1 = 0 Then Wait 1
Toggle Portb.4
Wait 3
Toggle Portb.3
/* устанавливаем счетчик таймера в ноль
A = 0
/* пока не достигнем количества срабататываний за 10 секунд
While A < 1526
/* если значение ацп достигло нужного
If Getadc(1) => 890 Then
/* пауза в 1 секунду
Wait 1
/* значение счетчика далеко за пределы 10 сек для выхода из цикла
A = 10000
End If
Wend
Reset Portb.3
Waitms 30
Loop
/* подпрограмма срабатывания таймера
Tik:
Incr A
Return
/* частота генератора 4 МГц, а не 400 кГц. Если кварц действительно 400 кГц, изменить условие
$Crystal=4000000
$hwstack = 10
$swstack = 8
$framesize=32
Config Portb.5 = Output : Set Portb.1
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Portb.4 = Output
Config Portb.3 = Output
Config Portb.0 = Output
Speaker Alias Portb.0
/* Определяем таймер с делением до 15,26 герца
Config Timer0 = Timer , Prescale = 1024 ' (4000000 / 256 / 1024 = 15.26 Гц)
/* подпрограмма прерывания по срабатыванию таймера
On Timer0 Tik
/* Переменная для счетчика срабатываний таймера
Dim A As Integer
/* Включаем прерывания
Enable Interrupts
/* старт таймера.
Start Timer0
Sound Speaker , 250 , 54
Start Adc
Do
Waitms 500
If Pinb.1 = 0 Then Wait 1
Toggle Portb.4
Wait 3
Toggle Portb.3
/* устанавливаем счетчик таймера в ноль
A = 0
/* пока не достигнем количества срабататываний за 10 секунд
While A < 1526
/* если значение ацп достигло нужного
If Getadc(1) => 890 Then
/* пауза в 1 секунду
Wait 1
/* значение счетчика далеко за пределы 10 сек для выхода из цикла
A = 10000
End If
Wend
Reset Portb.3
Waitms 30
Loop
/* подпрограмма срабатывания таймера
Tik:
Incr A
Return
Re: BASCOM AVR в вопросах и ответах
все хорошо, но программа не ждет моего нажатия на кнопку, а сразу начинает включать порты
Re: BASCOM AVR в вопросах и ответах
Корректно писать нужно программу. В исходном варианте было 2 оператора if и один end if.
Исправлено.
Do
If Pinb.1 = 0 Then
Wait 1
Toggle Portb.4
Wait 3
Toggle Portb.3
A = 0
While A < 1526
If Getadc(1) => 890 Then
Wait 1
A = 10000
End If
Wend
Reset Portb.3
Waitms 30
end if
Loop
Задержек много бессмысленных. Отчасти поэтому и путаница.
Исправлено.
Do
If Pinb.1 = 0 Then
Wait 1
Toggle Portb.4
Wait 3
Toggle Portb.3
A = 0
While A < 1526
If Getadc(1) => 890 Then
Wait 1
A = 10000
End If
Wend
Reset Portb.3
Waitms 30
end if
Loop
Задержек много бессмысленных. Отчасти поэтому и путаница.
Re: BASCOM AVR в вопросах и ответах
vem566, жму лапу!, Большое спасибо!
но реагировать на нажатие кнопки начинает ТОЛЬКО при напряжении ниже положенного, а при напряжении выше положенного, кнопка уже не работает...
Нужно чтобы рекция на кнпоку была при любом напряжении, то есть, нажатием на кнопку мы запускаем процесс, при котором включается реле и в течение 10 секунд измеряется напряжение,
и кстати, по истечении 10 секунд если напряжение не выросло, порт не выключается... ждет бесконечно до тех пор пока я его подниму.
---
пс, программу проверяю в железе, не в протеусе
но реагировать на нажатие кнопки начинает ТОЛЬКО при напряжении ниже положенного, а при напряжении выше положенного, кнопка уже не работает...
Нужно чтобы рекция на кнпоку была при любом напряжении, то есть, нажатием на кнопку мы запускаем процесс, при котором включается реле и в течение 10 секунд измеряется напряжение,
и кстати, по истечении 10 секунд если напряжение не выросло, порт не выключается... ждет бесконечно до тех пор пока я его подниму.
---
пс, программу проверяю в железе, не в протеусе
Re: BASCOM AVR в вопросах и ответах
Есть такая штука, называется блок-схема программы. Вот в ней и разрисовывается как должна себя вести программа. Из опыта знаю, что при рассказе, как сейчас, многое опускается, как само собой разумеющееся. В результате часть функций не реализовано или реализовано не правильно.
А кнопка работает. Хоть выше порога, хоть ниже. Просто если выше, то сразу же отключается по условию. Что касается отключения, то оператор toggle нужно заменить на явный set. Ну и нарисовать алгоритм работы программы. Сразу многое станет понятным.
А кнопка работает. Хоть выше порога, хоть ниже. Просто если выше, то сразу же отключается по условию. Что касается отключения, то оператор toggle нужно заменить на явный set. Ну и нарисовать алгоритм работы программы. Сразу многое станет понятным.
Re: BASCOM AVR в вопросах и ответах
Вообщем, решил вопрос по другому....
----------
Toggle Portb.4
Waitms 4500
If Getadc(1) <= 890 Then
Goto P1
Else
Waitms 900
Reset Portb.4
End If
P1:
Waitms 2000
If Getadc(1) <= 890 Then
Goto P2
Else
Waitms 900
Reset Portb.4
End If
P2:
Waitms 2000
If Getadc(1) <= 890 Then
Goto P3
Else
Waitms 900
Reset Portb.4
End If
P3:
Waitms 2000
If Getadc(1) <= 890 Then
Goto P4
Else
Waitms 900
Reset Portb.4
End If
P4:
Waitms 2000
If Getadc(1) <= 890 Then
Goto P5
Else
Waitms 900
Reset Portb.4
End If
P5:
Waitms 2000
If Getadc(1) <= 890 Then
Reset Portb.4
Else
Waitms 900
Reset Portb.4
End If
-----
Ссылаясь с 1 по 5 пункты мы проверяем состояние напряжения, если в каком то из пунктов оно удовлетворяет нашим требьованиям то выключаем порт
--
Мне кажется, что уходить из условия нужно как то грамотнее,
главное работает
----------
Toggle Portb.4
Waitms 4500
If Getadc(1) <= 890 Then
Goto P1
Else
Waitms 900
Reset Portb.4
End If
P1:
Waitms 2000
If Getadc(1) <= 890 Then
Goto P2
Else
Waitms 900
Reset Portb.4
End If
P2:
Waitms 2000
If Getadc(1) <= 890 Then
Goto P3
Else
Waitms 900
Reset Portb.4
End If
P3:
Waitms 2000
If Getadc(1) <= 890 Then
Goto P4
Else
Waitms 900
Reset Portb.4
End If
P4:
Waitms 2000
If Getadc(1) <= 890 Then
Goto P5
Else
Waitms 900
Reset Portb.4
End If
P5:
Waitms 2000
If Getadc(1) <= 890 Then
Reset Portb.4
Else
Waitms 900
Reset Portb.4
End If
-----
Ссылаясь с 1 по 5 пункты мы проверяем состояние напряжения, если в каком то из пунктов оно удовлетворяет нашим требьованиям то выключаем порт
--
Мне кажется, что уходить из условия нужно как то грамотнее,
главное работает
Re: BASCOM AVR в вопросах и ответах
Проще говоря, проверяется каждые 2 сек. Тоже вариант.
Кажется правильно.
Адвансед писал(а):Мне кажется, что уходить из условия нужно как то грамотнее,
Кажется правильно.
- Spatial_chair
- Родился
- Сообщения: 1
- Зарегистрирован: Пт ноя 07, 2014 19:34:14
Re: BASCOM AVR в вопросах и ответах
Доброго времени суток уважаемые форумчане. Необходима помощь с реализацией работы микросхемы АЦП для тензодатчика HX711. При самостоятельных попытках освоить ее протокол возникло несколько проблем. Для выборки с канала A и усилением 128 необходимо после падения напряжения на ножке DOUT подать 25 импульсов на SCK при этом записывать уровни на DOUT

При попытке это реализовать во первых, возникает непонятная для меня пауза после 13 импульсов
, и чем больше и сложнее код, тем дольше эта пауза (в конечном коде она аж 800мс
). Во вторых, при появлении импульсов на DOUT создание импульсов на SCK прекращается, то есть, как я понимаю, при попытке записать получающееся число происходит какая-то ошибка, и программа просто останавливается.
Вопрос вот в чем: как создать 25 импульсов без лишних задержек (можно и таймерами, они свободны,только конкретных идей у меня нет), и при этом записать выходящие значения в двоичном виде, а затем преобразовать в десятичный. Заранее спасибо всем тем, кто откликнется.
При попытке это реализовать
Спойлер
Код: Выделить всё
$regfile = "m168def.dat"
$crystal = 8000000
Config Lcdbus = 4
Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 'Rs = Portb.2 , E = Portb.1 , Db4 = Portb.0 , Db5 = Portd.7 , Db6 = Portd.6 , Db7 = Portd.5
Config Lcd = 16 * 2
Cursor Off
Cls
Config Pinc.0 = Output
Config Pinc.1 = Input
Sck Alias Pinc.0
Dat Alias Pinc.1
Dim Force As Long
Dim Sforce As String * 24
Dim Xforce As Byte
Dim I As Byte
Do
Force = 0
'Sck = 0
If Dat = 0 Then
For I = 1 To 26
Sck = 1
Waitms 1
Sck = 0
If Dat = 0 Then
Shift Force , Left
Else
Set Force.0
Shift Force , Left
End If
Next
End If
Sforce = Str(force)
Xforce = Binval(sforce)
Locate 1 , 3
Lcd Xforce
Loop
EndВопрос вот в чем: как создать 25 импульсов без лишних задержек (можно и таймерами, они свободны,только конкретных идей у меня нет), и при этом записать выходящие значения в двоичном виде, а затем преобразовать в десятичный. Заранее спасибо всем тем, кто откликнется.
- Вложения
-
- hx711_english.pdf
- Даташит на Hx711
- (160.43 КБ) 194 скачивания