Pic Basic pro для начинающих
|
|
amid- |
Дата: Пт, 16.09.2011, 15:38 | Сообщение # 661 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
89
Замечания:
±
На сайте с 02.12.2010
Статус:
Offline
|
сп. попробую отпишусьДобавлено (16.09.2011, 15.38.37) ---------------------------------------------
Quote (holyuser) результат преобразования - 10-бит (переменная должа быть WORD)
Сп. получилось Возник вопрос к примеру на ноге 2.5 волта результат преобразования - 8-бит (2,5/5)*255 а какая формула 10-бит (?????) за ранее сп.
|
|
|
|
MagicX |
Дата: Пт, 16.09.2011, 20:46 | Сообщение # 662 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
6
Замечания:
±
На сайте с 09.04.2011
Статус:
Offline
|
Вопрос такой,как заставить кнопку по разному реагировать на нажатия.К примеру мне нужно чтобы включение девайса было по долгому нажатию кнопки.Пытался через разные условия:IF THEN,REPEAT UNTIL,WHILE WEND.Работает только Button,но нет того эффекта. Добавлено (16.09.2011, 20.46.13) --------------------------------------------- Извиняюсь не в тему.Я про протон имел ввиду.
|
|
|
|
holyuser |
Дата: Сб, 17.09.2011, 00:48 | Сообщение # 663 |
Группа:
Проверенные
Ранг:
Могу и подсказать
Сообщений:
228
Замечания:
±
На сайте с 12.12.2007
Статус:
Offline
|
Quote (amid-) а какая формула 10-бит (?????)
(2,5/5)*1023
|
|
|
|
amid- |
Дата: Пн, 19.09.2011, 13:03 | Сообщение # 664 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
89
Замечания:
±
На сайте с 02.12.2010
Статус:
Offline
|
Quote (MagicX) Вопрос такой,как заставить кнопку по разному реагировать на нажатия.К примеру мне нужно чтобы включение девайса было по долгому нажатию кнопки. На идеал не притиндую но работает (таймер на 10 мин) там описывается работы кнопки (проект в протеусе)
Не могу прикрепить файл (не zip не rar) дай адрес почты отправлю
Добавлено (19.09.2011, 13.03.28) --------------------------------------------- Quote (holyuser) ADCON0 = %10000001 ADCON1 = %01110000 ANSEL = %00000001 результат преобразования - 10-бит (переменная должа быть WORD) аналоговый вход - AN0 (13-я ножка)
ADCON0 = %10000001 ADCON1 = %01110000 ANSEL = %00000001
правильно ли прописаны конфигурация ацп 16f676 DEFINE ADC_BITS 10 DEFINE ADC_CLOCK 3 DEFINE ADC_SAMPLEUS 50 adval var word
в протеусе выдает сообщение
Сообщение отредактировал
amid- - Пн, 19.09.2011, 13:09
|
|
|
|
доцент2 |
Дата: Вт, 20.09.2011, 23:30 | Сообщение # 665 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
293
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
если кто-то работал с измерителем температуры DS18S20 подскажите как установить биты конфигурации измерителя, чтобы перевести его в 9, 10, 11 и 12 битное представление температуры?
|
|
|
|
anatol |
Дата: Вт, 20.09.2011, 23:48 | Сообщение # 666 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
В DS18S20 (в отличие от DS18B20) разрядность отличную от 9 установить невозможно, считать данные из ОЗУ можно программно.
|
|
|
|
Deemon |
Дата: Вс, 25.09.2011, 18:15 | Сообщение # 667 |
Группа:
Удаленные
Ранг:
Сообщений:
Статус:
|
Доброго времени суток всем. Недавно начал изучать PicBasic и столкнулся со следующей проблемой, в протеусе программа работает как надо, а в реальности не хочет запускаться. Программа вывода лог.1 в опред последовательности на ножки МК. Использовал Pic16F876. программа для прошивки- icprog106B. Кварц на 20МГц. Ну, собстно текст:
DEFINE osc 20
INIT: PORTB = 0 TRISB = %00000000 TRISC = %00000000 PORTC = 0 ADCON1 = %00000000
Main:
PORTB= %01010101 PORTC= %01010101
PAUSE 500
PORTB= %10101010 PORTC= %10101010
PAUSE 500
GOTO MAIN end
В чем может быть проблема?
Сообщение отредактировал
Deemon - Вс, 25.09.2011, 18:16
|
|
|
|
ivan_fd |
Дата: Вс, 25.09.2011, 19:33 | Сообщение # 668 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Скорее всего, проблема в битах конфигурации.
|
|
|
|
доцент2 |
Дата: Вс, 25.09.2011, 22:19 | Сообщение # 669 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
293
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
я немножко ошибся! разрядность 9, 10, 11 или 12 надо установить для DS18B20 не могу сообразить как?
|
|
|
|
ivan_fd |
Дата: Пн, 26.09.2011, 10:24 | Сообщение # 670 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Quote Запись в память [4Eh]
Эта команда позволяет устройству управления записывать 3 байта данных в память DS18B20. Первый байт данных записывается в регистр (TH), второй байт записывается в регистр (TL), и третий байт записывается в регистр конфигурации. Данные должны быть переданы наименьшим значащим битом вперед.
Нам нужен третий байт, регистр конфигурации:
Code GoSub init1820 ' Init the DS1820
command = $cc ' Команда пропуска ROM GoSub write1820
command = $4e ' Запись в память GoSub write1820 command = $0 ' 1 байт GoSub write1820 command = $0 ' 2 байт GoSub write1820 command = %00011111 'устанавливаем 9-ти битный режим GoSub write1820
GoSub init1820 ' Init the DS1820
command = $cc ' Issue Skip ROM command GoSub write1820
command = $44 ' Start temperature conversion GoSub write1820
Сообщение отредактировал
ivan_fd - Пн, 26.09.2011, 10:31
|
|
|
|
доцент2 |
Дата: Пн, 26.09.2011, 10:54 | Сообщение # 671 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
293
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
описание DS18B20 я читал. у меня вот такой текст: ________________________________________________________________________________ OWOut PORTB.7, 1, [$4e, $00,$00,$5f]' хочу установить разрешение например 11 бит или так ? OWOut PORTB.7, 1, [$4e, $5f]' что так, что так, результата ни какого преобразование идет в 12 бит ________________________________________________________________________________ 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]
|
|
|
|
ivan_fd |
Дата: Пн, 26.09.2011, 19:27 | Сообщение # 672 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Какая последовательность инициализации у Вас. Покажите.
Нужна правильная последовательность, тогда заработает.
|
|
|
|
доцент2 |
Дата: Пн, 26.09.2011, 22:45 | Сообщение # 673 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
293
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
да нет ни какой инициализации. просмотрел несколько примеров, у всех просто при одном измерителе присутствует строчка 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] а потом расчет температуры. А как правильно инициализировать измеритель в PICBasic
|
|
|
|
ivan_fd |
Дата: Пн, 26.09.2011, 23:35 | Сообщение # 674 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Ну раз Вы читали описание, вы должни были видеть там такое:
Quote Инициализация Все операции на шине (1-Wire bus) начинаются с последовательности инициализации. Последовательность инициализации состоит из импульса сброса, переданного устройством управления шиной, сопровождаемым импульсом(ами) присутствия, переданными подчиненными устройствами. Импульс присутствия позволяет устройству управления шиной знать, что подчиненные устройства (типа DS18B20) присутствуют на шине и готовы к работе.
Вот смотрите код, рабочий --->
В нем протокол 1 wire написан вручную, но не в этом дело, команды то те самые. Code temploop: GoSub init1820 ' Init the DS1820
If terme = 0 Then Return
command = $cc ' Issue Skip ROM command GoSub write1820
command = $4e ' То что Вам нужно GoSub write1820 command = $0 ' .......... GoSub write1820 command = $0 ' ................ GoSub write1820 command = %00011111 '................... GoSub write1820
GoSub init1820 ' Init the DS1820
command = $cc ' Issue Skip ROM command GoSub write1820
command = $44 ' Start temperature conversion GoSub write1820
Repeat ' цикл DelayMS 25 ' ORead dq, 4, [C] ' чекаємо поки з датчика прийде Until C > 0 ' 1 GoSub init1820 ' Do another init
command = $cc ' Issue Skip ROM command GoSub write1820
command = $be ' Read the temperature GoSub write1820
GoSub read1820 return
init1820:
Low dq ' Встановити 0 на шині DelayUS 500 ' Wait > 480us Input dq ' Release data pin (set to input for high) DelayUS 100 ' Wait > 60us If dq = 1 Then terme = 0 Return ' Try again EndIf terme = 1 DelayUS 400 ' Wait for end of presence pulse Return
' Write "command" byte to the DS1820 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
' Write a 0 bit to the DS1820 write0: Low dq DelayUS 60 ' Low for > 60us for 0 Input dq ' Release data pin (set to input for high) Return
' Write a 1 bit to the DS1820 write1: Low dq ' Low for < 15us for 1 @ nop ' Delay 1us at 4MHz Input dq ' Release data pin (set to input for high) DelayUS 60 ' Use up rest of time slot Return
' Read temperature from the DS1820 read1820:
; T0IE = 0 ' Виключити переривання по TMR0 For i = 1 To 16 ' 16 bits to a word Temp_read = Temp_read >> 1 ' Shift down bits GoSub readbit ' Get the bit to the top of temp Next i ; T0IE = 1 ' Виключити переривання по TMR0
Return
' Read a bit from the DS1820 readbit: Temp_read.15 = 1 ' Preset read bit to 1 Low dq ' Start the time slot @ nop ' Delay 1us at 4MHz Input dq ' Release data pin (set to input for high) If dq = 0 Then Temp_read.15 = 0 ' Set bit to 0 EndIf DelayUS 60 ' Wait out rest of time slot Return Правда он на Протоне, но принцып должен быть понятен.
|
|
|
|
доцент2 |
Дата: Вт, 27.09.2011, 09:15 | Сообщение # 675 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
293
Замечания:
±
На сайте с 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] если нужна задержка для работы измерителя, то можно ли просто поставить паузу? представленный код работает отлично, но не задает разрядность преобразования. может надо биты конфигурации не только отправить на измеритель но и переписать их в его память, чтобы очередная команда типа $СС его сбросила?
|
|
|
|