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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Dnepr_1186
Потрогал лапой паяльник
Сообщения: 398
Зарегистрирован: Чт мар 26, 2009 20:53:27
Откуда: Беларусь.Минская обл.

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

Сообщение Dnepr_1186 »

да провода то короткие питания. А вот датчик температуры один провод под метр длиной как раз вдоль провода антенны, но провод датчика экранированный.
А по частоте, какиеи там сложные вычисления? Опрос часов, ацп и датчиков температуры. Попробую 1мгц забить
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

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

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

Dnepr_1186 писал(а):Попробую 1мгц забить
Может быть мало для 1-Wire.
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

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,как его подключить?как прошить?нужны ли драйвера?
Аватара пользователя
KOTик
Встал на лапы
Сообщения: 148
Зарегистрирован: Пн июн 07, 2010 16:16:57
Контактная информация:

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

Сообщение KOTик »

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 в вопросах и ответах

Сообщение pavel1979 »

я обе поставил,подробнее-http://vrtp.ru/index.php?showtopic=26112&hl=
Вложения
Безымянный.jpg
(58.68 КБ) 871 скачивание
Alexlon
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Сб июн 02, 2012 10:01:06

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

Сообщение Alexlon »

Здравствуйте. Не могу побороть ошибку с приемом строки по UART. SIM 900D шлет "нормальную" строку после запроса баланса, которую смотрю через терминальную программу. Мега 8 в СМСке присылет только первые 16 символов... В конце листинга кода приведена полная и усеченная строка. Что я делаю не так?
Вложения
9.rar
(1.23 КБ) 227 скачиваний
goldskif
Открыл глаза
Сообщения: 68
Зарегистрирован: Пт окт 25, 2013 17:13:03

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

Сообщение goldskif »

Дико извиняюсь за вопрос, который может показаться банальным..
Хочу переделать прошивку для часов с семисегментным индикатором в ИД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 был.
----
Сам сообразил методом ковыряния. Оказывается, это уровни указаны в обратном порядке, от последнего к первому..
Аватара пользователя
Адвансед
Встал на лапы
Сообщения: 98
Зарегистрирован: Вс мар 11, 2012 23:06:08
Откуда: Казань

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 секунду и выключаем порт.
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

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

Сообщение vem566 »

Считать в этом куске прерывания от таймера. Вываливаться из цикла по условию или 10 сек, или температура + 1 сек.
Ну и не понятно, в это время что нибудь еще должно выполняться, или нет. От этого будет зависеть способ реализации.
Аватара пользователя
Адвансед
Встал на лапы
Сообщения: 98
Зарегистрирован: Вс мар 11, 2012 23:06:08
Откуда: Казань

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

Сообщение Адвансед »

Нет, больше ничего выполняться не должно...
сможете помочь кодом? был бы безумно благодарен
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

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

Сообщение vem566 »

Нужен полный код проекта. Добавлю, исправлю. Без проблем.
Аватара пользователя
Адвансед
Встал на лапы
Сообщения: 98
Зарегистрирован: Вс мар 11, 2012 23:06:08
Откуда: Казань

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
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

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

Сообщение vem566 »

$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
Аватара пользователя
Адвансед
Встал на лапы
Сообщения: 98
Зарегистрирован: Вс мар 11, 2012 23:06:08
Откуда: Казань

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

Сообщение Адвансед »

все хорошо, но программа не ждет моего нажатия на кнопку, а сразу начинает включать порты
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

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

Сообщение vem566 »

Корректно писать нужно программу. В исходном варианте было 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

Задержек много бессмысленных. Отчасти поэтому и путаница.
Аватара пользователя
Адвансед
Встал на лапы
Сообщения: 98
Зарегистрирован: Вс мар 11, 2012 23:06:08
Откуда: Казань

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

Сообщение Адвансед »

vem566, жму лапу!, Большое спасибо!

но реагировать на нажатие кнопки начинает ТОЛЬКО при напряжении ниже положенного, а при напряжении выше положенного, кнопка уже не работает...
Нужно чтобы рекция на кнпоку была при любом напряжении, то есть, нажатием на кнопку мы запускаем процесс, при котором включается реле и в течение 10 секунд измеряется напряжение,


и кстати, по истечении 10 секунд если напряжение не выросло, порт не выключается... ждет бесконечно до тех пор пока я его подниму.


---
пс, программу проверяю в железе, не в протеусе
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

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

Сообщение vem566 »

Есть такая штука, называется блок-схема программы. Вот в ней и разрисовывается как должна себя вести программа. Из опыта знаю, что при рассказе, как сейчас, многое опускается, как само собой разумеющееся. В результате часть функций не реализовано или реализовано не правильно.
А кнопка работает. Хоть выше порога, хоть ниже. Просто если выше, то сразу же отключается по условию. Что касается отключения, то оператор toggle нужно заменить на явный set. Ну и нарисовать алгоритм работы программы. Сразу многое станет понятным.
Аватара пользователя
Адвансед
Встал на лапы
Сообщения: 98
Зарегистрирован: Вс мар 11, 2012 23:06:08
Откуда: Казань

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 пункты мы проверяем состояние напряжения, если в каком то из пунктов оно удовлетворяет нашим требьованиям то выключаем порт
--
Мне кажется, что уходить из условия нужно как то грамотнее,
главное работает
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

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

Сообщение vem566 »

Проще говоря, проверяется каждые 2 сек. Тоже вариант.
Адвансед писал(а):Мне кажется, что уходить из условия нужно как то грамотнее,

Кажется правильно.
Аватара пользователя
Spatial_chair
Родился
Сообщения: 1
Зарегистрирован: Пт ноя 07, 2014 19:34:14

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

Сообщение Spatial_chair »

Доброго времени суток уважаемые форумчане. Необходима помощь с реализацией работы микросхемы АЦП для тензодатчика HX711. При самостоятельных попытках освоить ее протокол возникло несколько проблем. Для выборки с канала A и усилением 128 необходимо после падения напряжения на ножке DOUT подать 25 импульсов на SCK при этом записывать уровни на DOUT
Изображение
При попытке это реализовать
Спойлер

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

$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
во первых, возникает непонятная для меня пауза после 13 импульсов Изображение, и чем больше и сложнее код, тем дольше эта пауза (в конечном коде она аж 800мс :shock: ). Во вторых, при появлении импульсов на DOUT создание импульсов на SCK прекращается, то есть, как я понимаю, при попытке записать получающееся число происходит какая-то ошибка, и программа просто останавливается.
Вопрос вот в чем: как создать 25 импульсов без лишних задержек (можно и таймерами, они свободны,только конкретных идей у меня нет), и при этом записать выходящие значения в двоичном виде, а затем преобразовать в десятичный. Заранее спасибо всем тем, кто откликнется.
Вложения
hx711_english.pdf
Даташит на Hx711
(160.43 КБ) 194 скачивания
Ответить

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