Pic Basic pro для начинающих - Страница 46 - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 46 из 56«1244454647485556»
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » Pic Basic pro для начинающих (помощь в осваивании языка Pic Basic pro)
Pic Basic pro для начинающих
доцент2 Дата: Вт, 27.09.2011, 09:15  |                                                                                                                Сообщение # 676
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 311
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

мне не очень понятно, если есть протокол 1-Wire которому соответствуют комадны
тогоже PICBasica, зачем городить забор из прерываний?
кстати на протоне видел пример где в одной строчке перечислены коды примерно так:
OWOut PORTB.7, 1, [$CC,$4e, $00,$00,$5f]' хочу установить разрешение например 11 бит
OWOut PORTB.7, 1, [$CC, $44] ' Start (посылаем импульс
' сброса измерительного устройства и запуск преобразования)
OWOut PORTB.7, 1, [$CC, $BE] 'команда на считывание памяти
OWIn PORTB.7, 0, [temperatura.LOWBYTE, temperatura.HIGHBYTE, Skip 4, count_remain, count_per_c]
если нужна задержка для работы измерителя, то можно ли просто поставить паузу?
представленный код работает отлично, но не задает разрядность преобразования.
может надо биты конфигурации не только отправить на измеритель но и переписать их в его память,
чтобы очередная команда типа $СС его сбросила?
ЯНДЕКС Дата: 27.09.2011
ivan_fd Дата: Вт, 27.09.2011, 10:14  |                                                                                                                Сообщение # 677
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Quote (доцент2)
OWOut PORTB.7, 1, [$CC, $44] ' Start (посылаем импульс
' сброса измерительного устройства и запуск преобразования)

Где Вы в этой строчке видите импульс сброса?
Quote (доцент2)
зачем городить забор из прерываний?


Какие прерывания, Вы о чем?

Quote (доцент2)
если нужна задержка для работы измерителя, то можно ли просто поставить паузу?


Можно поставить паузу в соответсвии с розрядностью.


Меня все время преследуют умные мысли...но я быстрее!!!
ivan_fd Дата: Вт, 27.09.2011, 10:32  |                                                                                                                Сообщение # 678
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Специально для Вас написал, с проектом Протеуса. Разрядность 9 бит.

В коде init1820: и есть процедура инициализации, импульс сброса и т .....
Прикрепления: 3464882.zip(56Kb)


Меня все время преследуют умные мысли...но я быстрее!!!
Сообщение отредактировал ivan_fd - Вт, 27.09.2011, 10:33
ADMIN Дата: Вт, 27.09.2011, 10:49  |                                                                                                                Сообщение # 679
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

В даташите указано, что после команды $4E нужно послать импульс сброса.
Вот здесь пример, правда на не русском. Уверен - дело в этом импульсе, тоже когда-то мучался, но потом разобрался. Правда проект тот найти не могу.
доцент2 Дата: Ср, 28.09.2011, 16:00  |                                                                                                                Сообщение # 680
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 311
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

да вот ини прерывания
write1820:
; T0IE = 0 ' Виключити переривання по TMR0 For i = 1 To 8 ' 8 bits to a byte
If command.0 = 0 Then
GoSub write0 ' Write a 0 bit
Else
GoSub write1 ' Write a 1 bit
EndIf
command = command >> 1 ' Shift to next bit
Next i
; T0IE = 1 ' Виключити переривання по TMR0
Return

спасибо всем буду разбираться.

Добавлено (28.09.2011, 15.59.57)
---------------------------------------------
посмотрев примеры выдернул несколько кусков:
предположим мне надо считать данные с измерителя только один раз подключенного к пин 7 PORTB.
1. это инициализация
init_DS18S20:
Output PORTB.7 ' Make Pin Output
PORTB.7=0 ' OneWire line Low
PauseUs 480 ' Keep down for 480 µS
Input PORTB.7 ' Make Pin Input
PauseUs 70 ' Wait 70 µS
2. конфигурирование
OWOUT DQ, 1, [$CC,$4E, 0, 0, $3F]' допустим для 10 битного преобразования
3. читаем данные
OWOut PORTB.7, 1, [$CC, $44]
OWOut PORTB.7, 1, [$CC, $BE] 'команда на считывание памяти (первые два байта)

OWIn PORTB.7, 0, [temperatura.LOWBYTE, temperatura.HIGHBYTE]
4. расчет результата...(для каждой размерности преобразования свои расчеты)
в протеусе читает как 12 битное преобразование.
правильная ли последовательность или я чего-то упустил? может это протеус не впорядке?

Сообщение отредактировал доцент2 - Ср, 28.09.2011, 16:02
MasterPic Дата: Ср, 28.09.2011, 16:15  |                                                                                                                Сообщение # 681
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 196
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

Ты после строки
OWOUT DQ, 1, [$CC,$4E, 0, 0, $3F]' допустим для 10 битного преобразования
сделай еще раз это:

Output PORTB.7 ' Make Pin Output
PORTB.7=0 ' OneWire line Low
PauseUs 480 ' Keep down for 480 µS
Input PORTB.7 ' Make Pin Input
PauseUs 70 ' Wait 70 µS

И в протеусе смотри в меню debug - scratchpad термодатчика, меняются ли данные.
доцент2 Дата: Ср, 28.09.2011, 18:47  |                                                                                                                Сообщение # 682
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 311
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

сделал меняется байт (см.рисунок)
для 9 bit 1F - 31
для 10 bit 3F - 63
для 11 bit 5F - 95
для 12 bit 7F - 127

в программе расчет забит под 12 бит, и при изменении конфигурации по
идеи показания индикатора должны меняться, а этого не происходит.
(расчет под другую размерность я хочу зобить после того как смогу переключить этот измеритель).

сейчас попробовал использовать только одну строчку
OWOUT PORTB.7, 1, [$CC, $4E, 0, 0, $7F]
без дополнительной инициализации
биты меняются так же, а значение индикатора остается таким же как и при 12 бит.
Прикрепления: 4495242.jpg(131Kb)

Сообщение отредактировал доцент2 - Ср, 28.09.2011, 19:04
ivan_fd Дата: Ср, 28.09.2011, 19:01  |                                                                                                                Сообщение # 683
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Quote (доцент2)
правильная ли последовательность или я чего-то упустил? может это протеус не впорядке?


Не правильно!!! Вы смотрели пример который я Вам дал?

gosub init1820
OWOUT DQ, 1, [$CC,$4E, 0, 0, $3F]' допустим для 10 битного преобразования
gosubinit1820 ' ВОТ ЭТО ДОЛЖНО БЫТЬ
OWOut PORTB.7, 1, [$CC, $44]
OWOut PORTB.7, 1, [$CC, $BE] 'команда на считывание памяти (первые два байта)

OWIn PORTB.7, 0, [temperatura.LOWBYTE, temperatura.HIGHBYTE]

init1820:

PORTB.7 0
DelayUS 500 ' Wait > 480us
Input PORTB.7 ' Release data pin (set to input for high)
DelayUS 100 ' Wait > 60us
Return


Меня все время преследуют умные мысли...но я быстрее!!!
доцент2 Дата: Ср, 28.09.2011, 19:13  |                                                                                                                Сообщение # 684
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 311
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

это я попробовал в первую очередь, эффект почему-то такой же.
может в протеусе, что-то не так?
вот сам текст программы. конфигурация для 9-бит,
а счет для 12-бит, но показания индикатора как при 12 бит.

@ device pic16F84A
define osc 4
Cnt var word 'переменная счета
Digit var byte '
Pattern var byte 'переменная для хранения 7-ми сегментного кода
odin var byte 'переменная для хранения 7-ми сегментного кода для первого разряда
dva var byte 'переменная для хранения 7-ми сегментного кода для второго разряда
tri var byte 'переменная для хранения 7-ми сегментного кода для третьего разряда
chetire var byte 'переменная для хранения 7-ми сегментного кода для четвертого разряда
digit1 var porta.0 ' 1-й разряд индикатора
digit2 var porta.1 ' 2-й разряд индикатора
digit3 var porta.2 ' 3-й разряд индикатора
digit4 var porta.3 ' 4-й разряд индикатора
dit var byte ' промежуточная переменная для гашения незначащих нулей
i var byte
'+++++++++++++++++++++ переменные температуры ++++++++++++++++++++++++++++++++++
temperatura Var word ' Promen.za cuvanje izmer. temp.
count_remain Var Byte ' значение, оставшееся в счетчике в конце измерения
count_per_c Var Byte ' количество импульсов на один градус для данной температуры
control_izmer var byte
Temperatuta_ostatok var byte
Temperatuta_znak var byte
Temp var word
terme var byte
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
TRISA=0 'устанавливаем все выводы порта А на выход
TRISB=$80 'устанавливаем выводы порта В с 0 по 6 на выход, 7 на вход
'**************** Прерывания **************
INTCON=%10100000 'разрешить все прерывания и прерывание по переполнению таймера TMR0
OPTION_REG=%10000000 'подключить предделитель с коэффициентом 1:1
TMR0=100 'инициализация таймера (значение таймера Freq=6 410,25641Hz; Period=0,156 ms)

on interrupt goto Isr'при возникновении прерывания перейти на метку Isr
INTCON=%10100000 'включить прерывания по переполнению TMR0
Loop:
'+++++++++++++++++++++ измерение температуры +++++++++++++++++++++++++++++++++++
gosub init_DS18S20
OWOUT PORTB.7, 1, [$CC,$4E, 0, 0, $1F]' для 9 битного преобразования
gosub init_DS18S20
OWOut PORTB.7, 1, [$CC, $44] ' Start (посылаем импульс
' сброса измерительного устройства)
proverka:
owin PORTB.7,4,[control_izmer] 'проверяем, не закончился ли процесс измерения
if control_izmer=0 then proverka
OWOut PORTB.7, 1, [$CC, $BE] 'команда на считывание памяти (первые два байта)

'+++++++++++++++++++ процедура пересчета температуры ++++++++++++++++++++++++
'++++++++++++++++++++++++++ DS18B20 ++++++++++++++++++++++++++++++++++
'+++++++++++++++ 12-ти битовое представление температуры +++++++++++++++++++++++
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
OWIn PORTB.7, 0, [temperatura.LOWBYTE, temperatura.HIGHBYTE, Skip 4, count_remain, count_per_c]
Temperatuta_znak=temperatura.Bit12 ' определяем знак температуры, если 0 то "+", 1 то "-"
if Temperatuta_znak=0 then
temperatura = 10*(temperatura>>3)/2 ' если "+" то расчет ведется так (точность до 0.5)
else
temperatura =5+10*((temperatura^$ffff)>>3)/2 ' если "-" то расчет ведется так (точность до 0.5)
endif

pause 1
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++ сдесь блок по "расчленению" изренной темпер. ++++++++++++++++++
+++++++++++ на отдельные цифры , типа первая, вторая и т.д.+++++++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
goto loop
'++++++++++++++++++ инициализация измерителя ++++++++++++++++++++++++
init_DS18S20:
Output PORTB.7 ' Make Pin Output
PORTB.7=0 ' OneWire line Low
PauseUs 500 ' Keep down for 500 µS
Input PORTB.7 ' Make Pin Input
PauseUs 100 ' Wait 100 µS
return
'************ отключаем обработку прерывания ***************
disable
Isr:
TMR0=100 ' значение таймера Freq=6 410,25641Hz; Period=0,156 ms

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++ сдесь блок вывода на динамич.индикацию ++++++++++++
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

INTCON.2=0 'флаг прерывания по переполнению (0-переполнение было;
'1-произошло переполнение TMR0 [сброс програмно])
resume 'возврат к основной программе откуда она была выведена для
'для обработки прерывания
enable 'включить обработку прерывания

convert:
lookup Digit,[$40,$79,$24,$30,$19,$12,$02,$78,$00,$10,$7f,$3f], Pattern
return
end

Сообщение отредактировал доцент2 - Ср, 28.09.2011, 20:12
доцент2 Дата: Ср, 28.09.2011, 20:58  |                                                                                                                Сообщение # 685
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 311
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

вот еще одна картинка
Прикрепления: 1581900.jpg(122Kb)
ivan_fd Дата: Ср, 28.09.2011, 23:30  |                                                                                                                Сообщение # 686
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Вы можете прикрепить полностью проект? С файлами Протеуса.

Меня все время преследуют умные мысли...но я быстрее!!!
MasterPic Дата: Чт, 29.09.2011, 08:08  |                                                                                                                Сообщение # 687
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 196
Репутация: 2   ±
Замечания:   ±
На сайте с 22.11.2008

Статус: Offline

если в протеусе меняются байты скратчпад, то попробуй считать его в какую нибудь переменную. Если считается тот, что записан, то, наверное модель датчика глючит
доцент2 Дата: Чт, 29.09.2011, 15:51  |                                                                                                                Сообщение # 688
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 311
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

что значит считать в переменную? считать из памяти датчика?
а потом как я ее посмотрю. к сожалению PICBasic это не VisualBasic
где можно в процессе отладки посмотреть содержание любой переменной.
я пока не знаю может в протеусе можно переменные посмотреть?
не получается прикрепить файл протеуса, пишет "не допустимый формат изображения"

Сообщение отредактировал доцент2 - Чт, 29.09.2011, 15:56
ivan_fd Дата: Чт, 29.09.2011, 16:27  |                                                                                                                Сообщение # 689
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

На файлообменник положите.

Меня все время преследуют умные мысли...но я быстрее!!!
доцент2 Дата: Чт, 29.09.2011, 18:13  |                                                                                                                Сообщение # 690
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 311
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

я ни когда не выкладывал ничего на файлообменники, поэтому не знаю как.
Форум Picbasic.ru » Программирование МК » PicBasicPro » Pic Basic pro для начинающих (помощь в осваивании языка Pic Basic pro)
Страница 46 из 56«1244454647485556»
Поиск: