BASCOM AVR в вопросах и ответах
- max50
- Мучитель микросхем
- Сообщения: 497
- Зарегистрирован: Ср дек 10, 2008 21:24:28
- Откуда: Алтайский край, Барнаул
Re: BASCOM AVR в вопросах и ответах
Посмотри здесь.
Того, кто не задумывается о далеких трудностях, ожидают близкие неприятности.
- Реклама
- kip96
- Держит паяльник хвостом
- Сообщения: 965
- Зарегистрирован: Ср авг 26, 2009 08:24:50
- Откуда: 1300км от Пупа
Re: BASCOM AVR в вопросах и ответах
Да Вы её и не написали! А собрали по кускам, не вникая в принцип работы.mr4ester писал(а):можно небольшой пример? если бы не примеры я бы даже не написал и эту программу.
Код: Выделить всё
Do
Gosub Ds1307 'уходим на выполнение подпрограммы чтобы узнать время и дату
Gosub Ds18b20
Gosub Displey 'выполняем подпрограмму вывода на дисплей
LoopТот-же датчик температуры- упорно все пихают кусок кода для семисегментного индикатора, хотя для LCD код намного проще. Изучите даташиты. Смените алгоритм программы. У Вас индикация не выходит пока, не отработает обмен с переферией.
Опыт приходит с изучением.mr4ester писал(а):может вам с более большим опытом что то придет в голову?
К примеруhttp://avrproject.ru/publ/kak_podkljuch ... 7/2-1-0-11
Не принимайте близко к сердцу! С праздником!
Все делают ошибки, только мудрецы - новые, а дураки - старые.
- mr4ester
- Держит паяльник хвостом
- Сообщения: 900
- Зарегистрирован: Чт авг 27, 2009 20:09:01
- Откуда: Приднестровье г.Бендеры
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
kip96 вместо того чтоб так критиковать лучше бы помогли или подсказали, я и не отрицаю что я его по кускам собрал, и на программиста я никогда не учился, баском и вообще программирование изучаю всего 1.5 месяца, а программу надо написать, и считаю вашу критику необоснованной т.к если бы я все знал то и не просил бы помощи!, и опыт не всегда приходит с изучением, сколько не учи только только с опытом начинаешь понимать что лучше в том или ином месте применить для оптимальной работы. А max50 отдельное спасибо!
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
- kip96
- Держит паяльник хвостом
- Сообщения: 965
- Зарегистрирован: Ср авг 26, 2009 08:24:50
- Откуда: 1300км от Пупа
Re: BASCOM AVR в вопросах и ответах
Да, не обижайтесь, ради Бога!
Вы же сами просите:
За критикой Вы не заметили и подсказку-Вы опрашиваете 1307-это время,1820-это время(у Вас там даже задержка 700 мС стоит)
после этого только на индикатор выводите
потом я Вам ссылку дал на такой-же проект
А программы начинают писать с составления алгоритма и блок-схем

и тогда будет всё наглядней
Вы же сами просите:
что-бы наверняка вставить очереднойожно небольшой пример? если бы не примеры я бы даже не написал и эту программу
Код: Выделить всё
Gosub примерпосле этого только на индикатор выводите
потом я Вам ссылку дал на такой-же проект
А программы начинают писать с составления алгоритма и блок-схем

и тогда будет всё наглядней
Все делают ошибки, только мудрецы - новые, а дураки - старые.
- mr4ester
- Держит паяльник хвостом
- Сообщения: 900
- Зарегистрирован: Чт авг 27, 2009 20:09:01
- Откуда: Приднестровье г.Бендеры
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
спасибо за разъяснение, я понимал что у меня есть такая задержка, но придумать как сделать по другому за неимением опыта так и не придумал, и решил отписаться на форуме
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
- Реклама
- kip96
- Держит паяльник хвостом
- Сообщения: 965
- Зарегистрирован: Ср авг 26, 2009 08:24:50
- Откуда: 1300км от Пупа
Re: BASCOM AVR в вопросах и ответах
вот описание (действительно на русском)http://piclist.ru/D-DS-DS1307-RUS/D-DS-DS1307-RUS.html
Хороший совет был использовать SQW/OUT
читаем:
Или\и
1820 нет необходимости опрашивать часто, даже вредно(говорят на точность влияет), Потом, сначала даёте команду 1820 на измерение,ждёте 700 мс , считываете. А сделайте так, что в первую сек. меряем, а во вторую считываете. Это как вариант, что в голову пришло.
Скорее всего Вам не совсем понятно, но прочитав даташит всё станет ясно.
Хороший совет был использовать SQW/OUT
читаем:
Вешаем на него прерывание , и по прерыванию опрашиваем 1307 и выводим на дисплей.SQW/OUT (Square Wave/Output Driver - сигнал с прямоугольными импульсами) - когда включен, т.е. бит SQWE установлен в 1, вывод SQW/OUT выдаёт прямоугольные импульсы с одной из четырёх частот (1 Гц, 4 кГц, 8 кГц, 32 кГц). Вывод SQW/OUT - с открытым стоком и требует внешнего подтягивающего резистора. SQW/OUT будет работать как при питании от VCC, так и при питании от VBAT.
Или\и
1820 нет необходимости опрашивать часто, даже вредно(говорят на точность влияет), Потом, сначала даёте команду 1820 на измерение,ждёте 700 мс , считываете. А сделайте так, что в первую сек. меряем, а во вторую считываете. Это как вариант, что в голову пришло.
Скорее всего Вам не совсем понятно, но прочитав даташит всё станет ясно.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
- mr4ester
- Держит паяльник хвостом
- Сообщения: 900
- Зарегистрирован: Чт авг 27, 2009 20:09:01
- Откуда: Приднестровье г.Бендеры
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
то есть если я правильно понял вывод SQW/OUT вешаем к примеру на внешнее прерывание к примеру INR0 и по каждому прерыванию опрашиваем 1307 и 18b20 и выводим на дисплей?
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
- Gordon Shumway
- Мучитель микросхем
- Сообщения: 486
- Зарегистрирован: Пн авг 20, 2007 21:35:45
- Откуда: Мытищи, Московская область
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Я сделал так:mr4ester писал(а):то есть если я правильно понял вывод SQW/OUT вешаем к примеру на внешнее прерывание к примеру INR0 и по каждому прерыванию опрашиваем 1307 и 18b20 и выводим на дисплей?
Код: Выделить всё
'включаем 1 гц с выхода SQW/OUT
I2cstart
I2cwbyte Ds1307w
I2cwbyte 7
I2cwbyte &B00010000
I2cstop
'включаем прерывание int0
Config Int0 = Falling
On Int0 Startds
Enable Interrupts
Enable Int0
'основной цикл
Do
If Seco = 0 Then Gosub Hod ' тут проверка на 0 секунд для выполнения хитрых функций
Loop
startds:
'опрашиваем ds1307
I2cstart
I2cwbyte Ds1307w
I2cwbyte &H00
I2cstart
I2cwbyte Ds1307r
I2crbyte Seco , Ack
I2crbyte Mine , Ack
I2crbyte Hour , Nack
I2cstop
Hour = Hour And &B00011111 'у меня 12-часовой формат, поэтому убираем лишнее
Seco = Makedec(seco)
Mine = Makedec(mine)
Hour = Makedec(hour)
'выводим на дисплей
Cls
Ho = Str(hour)
Mi = Str(mine)
Ss = Str(seco)
Ho = Format(ho , "00")
Mi = Format(mi , "00")
Ss = Format(ss , "00")
Locate 1 , 5
Lcd Ho ; ":" ; Mi ; ":" ; Ss
ReturnС уважением,
Алексей.
Алексей.
- kip96
- Держит паяльник хвостом
- Сообщения: 965
- Зарегистрирован: Ср авг 26, 2009 08:24:50
- Откуда: 1300км от Пупа
Re: BASCOM AVR в вопросах и ответах
Не надо только 1820 в прерывании опрашивать. А то выйдет то=же самое что и в первый раз, а то и хуже! Я же говорил - слишком много времени. К тому-же у Вас думаю не АЭС, что-бы каждую секунду температуру контролироватьmr4ester писал(а): каждому прерыванию опрашиваем 1307 и 18b20 и выводим на дисплей?
Код: Выделить всё
Do
If Seco = 0 Then Gosub Hod ' тут проверка на 0 секунд для выполнения хитрых функций
LoopТолько я думаю, что бы не обрабатывалась 1820 больше одного раза в минуту нужно ввести флаг.По прерыванию его сбрасывать, а в подпрограмме Hod его выставлять. А команду подправить так:
Код: Выделить всё
If Seco = 0 and Флаг=0 Then Gosub HodАто и каждые пять минут, если датчик для бытовых нужд.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
- mr4ester
- Держит паяльник хвостом
- Сообщения: 900
- Зарегистрирован: Чт авг 27, 2009 20:09:01
- Откуда: Приднестровье г.Бендеры
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
спасибо!! вообщем то понятно, попробую собрать программу воедино, и выложу на ваш СУД 
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
- Gordon Shumway
- Мучитель микросхем
- Сообщения: 486
- Зарегистрирован: Пн авг 20, 2007 21:35:45
- Откуда: Мытищи, Московская область
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
А зачем флаг ? Ведь 0 секунд бывает только раз в минуту, так что только раз в минуту и опросит.kip96 писал(а): Только я думаю, что бы не обрабатывалась 1820 больше одного раза в минуту нужно ввести флаг.По прерыванию его сбрасывать, а в подпрограмме Hod его выставлять. А команду подправить так:Логика понятна?Код: Выделить всё
If Seco = 0 and Флаг=0 Then Gosub Hod
Ато и каждые пять минут, если датчик для бытовых нужд.
Я, когда делал проект "мегатермо", сделал опрос датчиков раз в минуту по таймерному прерыванию (timer1, тактовая частота микроконтроллера 1 мгц, чуть больше минуты выходит).
Но там стоял вопрос сохранения батарейки...
С уважением,
Алексей.
Алексей.
- kip96
- Держит паяльник хвостом
- Сообщения: 965
- Зарегистрирован: Ср авг 26, 2009 08:24:50
- Откуда: 1300км от Пупа
Re: BASCOM AVR в вопросах и ответах
Не путайте! Прерывание бывает один раз! Т.е. Вы находитесь в основном цикле, бац -прерывание по таймеру- отработали и вернулись в основной цикл.
А в Вашем примере проверка секунды на 0 находится в основном цикле. А нуль (чем дальше от Москвы, тем больше ноль
) бывает аж 1000 мС , и даже 1000000 uC! И вот Seco = 0, уходим на Hod, через 900мС возвращаемся и Seco до сих пор равно 0! опять уходим на Hod, только начинаем общаться с 1820 , как бац нам по голове прерывание и вместо "художник" слышим "худо" 
А в Вашем примере проверка секунды на 0 находится в основном цикле. А нуль (чем дальше от Москвы, тем больше ноль
Все делают ошибки, только мудрецы - новые, а дураки - старые.
- Gordon Shumway
- Мучитель микросхем
- Сообщения: 486
- Зарегистрирован: Пн авг 20, 2007 21:35:45
- Откуда: Мытищи, Московская область
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Доходчиво !kip96 писал(а):Не путайте! Прерывание бывает один раз! Т.е. Вы находитесь в основном цикле, бац -прерывание по таймеру- отработали и вернулись в основной цикл.
А в Вашем примере проверка секунды на 0 находится в основном цикле. А нуль (чем дальше от Москвы, тем больше ноль) бывает аж 1000 мС , и даже 1000000 uC! И вот Seco = 0, уходим на Hod, через 900мС возвращаемся и Seco до сих пор равно 0! опять уходим на Hod, только начинаем общаться с 1820 , как бац нам по голове прерывание и вместо "художник" слышим "худо"
С уважением,
Алексей.
Алексей.
- mr4ester
- Держит паяльник хвостом
- Сообщения: 900
- Зарегистрирован: Чт авг 27, 2009 20:09:01
- Откуда: Приднестровье г.Бендеры
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
возник такой вопрос, нет ли такой программы что то вроде терминала чтобы могла выводить данные,но к примеру каждые 30 сек. обновляла окно, чтоб можно было вывести к примеру значение температуры, и оно не шло одной длинной строчкой как в терминале?
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
в основном цикле перекидывает метки на опрос часов, вывод на ЖКИ, проверка будильника, настройка ШИМ, проверка одной кнопки - которая для входа в меню настройки часов.
Задержку в коде термометра убрал, ибо после чтения датчика первый раз то дает результат - 85 градусов.
Я сделал опрос температуры раз в минуту, и нормально.
Задержку в коде термометра убрал, ибо после чтения датчика первый раз то дает результат - 85 градусов.
Я сделал опрос температуры раз в минуту, и нормально.
- mr4ester
- Держит паяльник хвостом
- Сообщения: 900
- Зарегистрирован: Чт авг 27, 2009 20:09:01
- Откуда: Приднестровье г.Бендеры
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
вообщем я извиняюсь за мой предыдущий флуд и потраченные нервы, я решил сделать просто 2х канальный термометр с регистрацией максимальных и минимальных значений температур, и каждые 10 мин выдача текущей температуры и макс и мин результата в сом порт. И возник вопрос как лучше отсчитывать эти десять минут хотелось бы спросить вашего мнение о моей идее, конфигурируем таймер 1 на прерывание по переполнению по моим подсчетам при делителе 1024 и кварце 4 мгц он будет переполняться каждые 16 сек, в прерывании увеличиваем переменную на 1 и сравниваем с другой переменной в которое положено число 37 это количество прерываний в суме дающих 10 мин если сравнялось выдаем данные в порт обнуляем переменную счетчик и выходим из прерывания. Правильно я мыслю или это можно как нибудь по другому сделать?
Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Подсчитывать количество переполнений таймера - это вполне нормальный ход. Только зачем сравнивать с переменной, в которую положено число 37? Можно просто с числом сравнивать. 
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- mr4ester
- Держит паяльник хвостом
- Сообщения: 900
- Зарегистрирован: Чт авг 27, 2009 20:09:01
- Откуда: Приднестровье г.Бендеры
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
вот составил схему программы как советовал kip96, хотелось бы услышать ваше мнение, нужно внести ли какие то изменения?


Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
- mr4ester
- Держит паяльник хвостом
- Сообщения: 900
- Зарегистрирован: Чт авг 27, 2009 20:09:01
- Откуда: Приднестровье г.Бендеры
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
возник такой вопрос можно ли так делать tmin переменная типа string или integer, Znakd2 здесь знак (+) или ( - ) , Hhd2 и Mmd2 числа, "." точка разделительная ?
Код: Выделить всё
tmin1 = Znakd2 ; Hhd2 ; "." ; Mmd2Работа избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)
- mr4ester
- Держит паяльник хвостом
- Сообщения: 900
- Зарегистрирован: Чт авг 27, 2009 20:09:01
- Откуда: Приднестровье г.Бендеры
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
еще такой вопрос я сделал определение температуры вот таким образом
и не могу двинуться дальше так как хочу ввести такое
но как мне сделать так чтоб было понятно какой датчик при опросе не отозвался чтоб установить флаг ошибки для того датчика?
Код: Выделить всё
Ini:
W = 1wirecount() ' ищем датчики
Dath1 = 1wsearchfirst() ' считываем код первого датчика
Dath2 = 1wsearchnext() ' считываем код 2 датчика
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 901
1wreset
1wwrite &H55
1wverify Dath1 'указываем адрес 1 датчика
1wwrite &HBE
Byte0d1 = 1wread() ' Читаем нулевой байт
Byte1d1 = 1wread() ' Читаем первый байт
End If
If Byte1 >= 248 Then ' Проверяем на отрицательную температуру.248 в десятичном - 11111000 в двоичном. Если температура отрицательная - вычитаем из &HFF
Byte0d1 = &HFF - Byte0
Byte1d1 = &HFF - Byte1
Znakd1 = "-"
Else
Znakd1 = "+"
End If
T1d1 = Byte0d1 / 16 ' Сдвигаем нулевой байт вправо на 4 бита (2*2*2*2=16)
T2d1 = Byte1d1 * 16 ' Сдвигаем первый байт влево на 4 бита (2*2*2*2=16)
T1d1 = T1d1 + T2d1
Hhd1 = Fix(t1d1) 'отсекаем от температуры все после запятой
Ttempd1 = T1 * 10 '
Mmd1 = Ttempd1 Mod 10 ' берем десятую часть температурыКод: Выделить всё
1wreset
If Err = 1 Then 'если при опросе появился флаг ошибки делаем что тоРабота избавляет нас от трех великих зол: скуки, порока, нужды. (Вольтер)


