Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: ivan_fd  
Форум Picbasic.ru » Программирование МК » PicBasicPro » Pic Basic pro для начинающих (помощь в осваивании языка Pic Basic pro)
Pic Basic pro для начинающих
amid- Дата: Пт, 16.09.2011, 15:38  |                                                                                                                Сообщение # 661
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 89
Репутация: 0   ±
Замечания:   ±
На сайте с 02.12.2010

Статус: Offline

Quote (holyuser)
holyuser


сп. попробую отпишусь

Добавлено (16.09.2011, 15.38.37)
---------------------------------------------

Quote (holyuser)
результат преобразования - 10-бит (переменная должа быть WORD)


Сп. получилось
Возник вопрос к примеру на ноге 2.5 волта результат преобразования - 8-бит (2,5/5)*255
а какая формула 10-бит (?????)
за ранее сп.
ЯНДЕКС Дата: 16.09.2011
MagicX Дата: Пт, 16.09.2011, 20:46  |                                                                                                                Сообщение # 662
Группа: Проверенные
Ранг:  Новенький
Сообщений: 6
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Репутация: 5   ±
Замечания:   ±
На сайте с 12.12.2007

Статус: Offline

Quote (amid-)
а какая формула 10-бит (?????)


(2,5/5)*1023
amid- Дата: Пн, 19.09.2011, 13:03  |                                                                                                                Сообщение # 664
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 89
Репутация: 0   ±
Замечания:   ±
На сайте с 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

в протеусе выдает сообщение
Прикрепления: 7704674.jpg (209.2 Kb)

Сообщение отредактировал amid- - Пн, 19.09.2011, 13:09
доцент2 Дата: Вт, 20.09.2011, 23:30  |                                                                                                                Сообщение # 665
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

если кто-то работал с измерителем температуры DS18S20
подскажите как установить биты конфигурации измерителя,
чтобы перевести его в 9, 10, 11 и 12 битное представление температуры?
anatol Дата: Вт, 20.09.2011, 23:48  |                                                                                                                Сообщение # 666
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 472
Репутация: 32   ±
Замечания:   ±
На сайте с 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

В чем может быть проблема?
Прикрепления: 3330569.jpg (61.9 Kb)

Сообщение отредактировал Deemon - Вс, 25.09.2011, 18:16
ivan_fd Дата: Вс, 25.09.2011, 19:33  |                                                                                                                Сообщение # 668
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Скорее всего, проблема в битах конфигурации.
доцент2 Дата: Вс, 25.09.2011, 22:19  |                                                                                                                Сообщение # 669
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

я немножко ошибся! разрядность 9, 10, 11 или 12 надо установить для DS18B20 не могу сообразить как?
ivan_fd Дата: Пн, 26.09.2011, 10:24  |                                                                                                                Сообщение # 670
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 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]
ЯНДЕКС Дата: 26.09.2011
ivan_fd Дата: Пн, 26.09.2011, 19:27  |                                                                                                                Сообщение # 672
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Какая последовательность инициализации у Вас. Покажите.

Нужна правильная последовательность, тогда заработает.
доцент2 Дата: Пн, 26.09.2011, 22:45  |                                                                                                                Сообщение # 673
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 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
Репутация: 124   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 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]
если нужна задержка для работы измерителя, то можно ли просто поставить паузу?
представленный код работает отлично, но не задает разрядность преобразования.
может надо биты конфигурации не только отправить на измеритель но и переписать их в его память,
чтобы очередная команда типа $СС его сбросила?
Форум Picbasic.ru » Программирование МК » PicBasicPro » Pic Basic pro для начинающих (помощь в осваивании языка Pic Basic pro)
Поиск: