18F4550 _ usb - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » 18F4550 _ usb (где ошибка?)
18F4550 _ usb
DNM Дата: Пн, 09.03.2015, 18:12  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 76
Репутация: 0   ±
Замечания:   ±
На сайте с 29.09.2011

Статус: Offline

устройство опознается с ошибкой
не могу понять почему?
может кто поможет?

код:
Declare Reminders = off
' select MCU and clock speed
Device = 18F4550
Declare Xtal = 48
 

' descriptor file, located in \inc\usb_18 - a copy
' is located in the same folder as this file
USB_Descriptor = "USBProjectDESC.inc"

' USB Buffer...
Symbol USBBufferSizeMax = 8
Symbol USBBufferSizeTX  = 8
Symbol USBBufferSizeRX  = 8
Dim    USBBuffer [USBBufferSizeMax]As Byte
' зададим переменные для преобразования...
  Dim USB_BUFFER As string*20
  Dim AD_RESULT As ADRESL.Word
  Dim VALUE As Word
  Dim VOLTS As Byte
  Dim MILLIVOLTS As Byte

' some useful flags...
Dim PP0 As Byte System        ' USBPOLL status return
Symbol CARRY_FLAG = STATUS.0  ' high if microcontroller does not have control over the buffer
Symbol ATTACHED_STATE = 6     ' is USB attached
     

' ************************************************************
' * main program loop - remember, you must keep the USB      *
' * connection alive with a call to USBPoll, USBIn or USBOut *
' * every couple of milliseconds or so                       *
' ************************************************************
GoSub AttachToUSB
'настроим АЦП
TRISA.0=1    'порт A0 - аналоговый вход
TRISB=0
ADCON1=%10001110   'как аналоговый вход
ADCON2=%10000000

ProgramLoop:
   'GoSub DoUSBIn
   GoSub DoUSBOut
   GoTo ProgramLoop
  
' ************************************************************
' * receive data from the USB bus                            *
' ************************************************************
'DoUSBIn:
'   USBIn 1, USBBuffer, USBBufferSizeRX, DoUSBIn
'   Return
   
' ************************************************************
' * transmit data                                            *
' ************************************************************
DoUSBOut:   
    AD_RESULT=ADIn 0   'получим значение
    VALUE=((AD_RESULT */500)>>2)
    VOLTS=VALUE/100
    MILLIVOLTS=VALUE //100
    USB_BUFFER = Str$(Dec1,VOLTS)+"."+Str$(Dec2,MILLIVOLTS) 'два знака после запятой

   USBOut 1, USB_BUFFER, USBBufferSizeTX, DoUSBOut    'строка передачи данных через USB
   Return

' ************************************************************
' * wait for USB interface to attach                         *
' ************************************************************
AttachToUSB:
   Repeat
      USBPoll
   Until PP0 = ATTACHED_STATE
   Return
ЯНДЕКС Дата: 09.03.2015
ADMIN Дата: Пн, 09.03.2015, 20:21  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1106
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Я вот не вижу, где определяется конфигурация проца. Насколько я помню, кварц у меня был на 20 МГц, а проц работал на 48 МГц. Это определялось встроенным умножителем. Сейчас мне негде посмотреть. Я далеко от компа. Советую посмотреть в каталоге статей. Там есть USB вольтметр на протоне и моя же статья в swordfish. Удачи!
DNM Дата: Пн, 09.03.2015, 22:55  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 76
Репутация: 0   ±
Замечания:   ±
На сайте с 29.09.2011

Статус: Offline

Цитата ADMIN ()
Я вот не вижу, где определяется конфигурация проца
вот, исправил, но 50/50 то определяется, то нет...
(кварц на 20 МГц)


Declare Reminders = off
' select MCU and clock speed
Device = 18F4550

Config_Start
PLLDIV = 5 ; Divide by 5 (20 MHz oscillator input)
CPUDIV = OSC1_PLL2 ; [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2]
'CPUDIV = OSC3_PLL4
'CPUDIV = OSC1_PLL2 ; [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2]
USBDIV = 2 ; USB clock source comes from the 96 MHz PLL divided by 2
FOSC = HSPLL_HS ; HS oscillator, PLL enabled, HS used by USB
FCMEN = OFF ; Fail-Safe Clock Monitor disabled
IESO = OFF ; Oscillator Switchover mode disabled
PWRT = On ; PWRT enabled
BOR = OFF ; Brown-out Reset disabled in hardware and software
BORV = 2 ;
VREGEN = On ; USB voltage regulator enabled
WDT = OFF ; HW Disabled - SW Controlled
WDTPS = 2 ; 1:2
MCLRE = OFF 'On ; MCLR pin enabled; RE3 input pin disabled
LPT1OSC = OFF ; Timer1 configured for higher power operation
PBADEN = OFF ; PORTB<4:0> pins are configured as digital I/O on Reset
CCP2MX = OFF ; CCP2 input/output is multiplexed with RB3
STVREN = OFF ; Stack full/underflow will not cause Reset
LVP = OFF ; Single-Supply ICSP disabled
XINST = OFF ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
Debug = OFF ; Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
Config_End

;-------------------------------------------------------------------------------
Xtal = 20

'Declare Xtal = 48

' descriptor file, located in \inc\usb_18 - a copy
' is located in the same folder as this file
USB_Descriptor = "USBProjectDESC.inc"

' USB Buffer...
Symbol USBBufferSizeMax = 8
Symbol USBBufferSizeTX  = 8
Symbol USBBufferSizeRX  = 8
Dim    USBBuffer [USBBufferSizeMax]As Byte
' зададим переменные для преобразования...
Dim USB_BUFFER As string*20
Dim AD_RESULT As ADRESL.Word
Dim VALUE As Word
Dim VOLTS As Byte
Dim MILLIVOLTS As Byte

' some useful flags...
Dim PP0 As Byte System        ' USBPOLL status return
Symbol CARRY_FLAG = STATUS.0  ' high if microcontroller does not have control over the buffer
Symbol ATTACHED_STATE = 6     ' is USB attached

' ************************************************************
' * main program loop - remember, you must keep the USB      *
' * connection alive with a call to USBPoll, USBIn or USBOut *
' * every couple of milliseconds or so                       *
' ************************************************************
GoSub AttachToUSB
'настроим АЦП
TRISA.0=1    'порт A0 - аналоговый вход
TRISB=0
ADCON1=%10001110   'как аналоговый вход
ADCON2=%10000000

ProgramLoop:
'GoSub DoUSBIn
GoSub DoUSBOut
GoTo ProgramLoop

' ************************************************************
' * receive data from the USB bus                            *
' ************************************************************
'DoUSBIn:
'   USBIn 1, USBBuffer, USBBufferSizeRX, DoUSBIn
'   Return

' ************************************************************
' * transmit data                                            *
' ************************************************************
DoUSBOut:
AD_RESULT=ADIn 0   'получим значение
VALUE=((AD_RESULT */500)>>2)
VOLTS=VALUE/100
MILLIVOLTS=VALUE //100
USB_BUFFER = Str$(Dec1,VOLTS)+"."+Str$(Dec2,MILLIVOLTS) 'два знака после запятой
'USB_BUFFER="123345g"
USBOut 1, USB_BUFFER, USBBufferSizeTX, DoUSBOut    'строка передачи данных через USB
Return

' ************************************************************
' * wait for USB interface to attach                         *
' ************************************************************
AttachToUSB:
Repeat
USBPoll
Until PP0 = ATTACHED_STATE
Return

Добавлено (09.03.2015, 20:38)
---------------------------------------------

Цитата ADMIN ()
Там есть USB вольтметр на протоне
так по этому avi и делал wink

Добавлено (09.03.2015, 22:55)
---------------------------------------------
почему VID и PID не соответствуют тем, что задавались при использовании EasyHid?
Название устройства - соответствует.

Сообщение отредактировал DNM - Пн, 09.03.2015, 20:31
ADMIN Дата: Вт, 10.03.2015, 13:09  |                                                                                                                Сообщение # 4
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1106
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Вот как раз сейчас XTAL нужно писать 48 МГц при PPLDIV = 5 и кварце 20 Мгц. По моему, так.
доцент2 Дата: Вт, 10.03.2015, 18:00  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 313
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

Настройки из моего проекта. Все работает.
Config_Start  
PLLDIV = 5' для 20МГц         12 ' для 48 МГц
    'CPUDIV = OSC1_PLL2      ; [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2]
    'CPUDIV = OSC2_PLL3 ; [OSC1/OSC2 Src: /2][96 MHz PLL Src: /3]
CPUDIV = OSC3_PLL4 ; [OSC1/OSC2 Src: /3][96 MHz PLL Src: /4]
    'CPUDIV = OSC4_PLL6 ; [OSC1/OSC2 Src: /4][96 MHz PLL Src: /6]
USBDIV = 2
FOSC = HSPLL_HS
FCMEN = OFF
IESO = OFF
PWRT = On
BOR = OFF
BORV = 2
VREGEN = On
WDT = OFF
WDTPS = 2
MCLRE = OFF
LPT1OSC = OFF
PBADEN = OFF
CCP2MX = OFF
STVREN = OFF
LVP = OFF
XINST = OFF
Debug = OFF
CPD=OFF
Config_End
;-------------------------------------------------------------------------------
Xtal = 20
DNM Дата: Сб, 04.04.2015, 07:59  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 76
Репутация: 0   ±
Замечания:   ±
На сайте с 29.09.2011

Статус: Offline

Ура! Все работает!! smile
Спасибо Миш!
Спасибо доцент2!

Код
Declare Reminders = off
' select MCU and clock speed
Device = 18F4550

Config_Start
PLLDIV = 5 ; Divide by 5 (20 MHz oscillator input)
'CPUDIV = OSC1_PLL2 ; [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2]
CPUDIV = OSC3_PLL4 ; [OSC1/OSC2 Src: /3][96 MHz PLL Src: /4]
USBDIV = 2 ; USB clock source comes from the 96 MHz PLL divided by 2
FOSC = HSPLL_HS ; HS oscillator, PLL enabled, HS used by USB
FCMEN = OFF ; Fail-Safe Clock Monitor disabled
IESO = OFF ; Oscillator Switchover mode disabled
PWRT = On ; PWRT enabled
BOR = OFF ; Brown-out Reset disabled in hardware and software
BORV = 2 ;
VREGEN = On ; USB voltage regulator enabled
WDT = OFF ; HW Disabled - SW Controlled
WDTPS = 2 ; 1:2
MCLRE = On ; MCLR pin enabled; RE3 input pin disabled
LPT1OSC = OFF ; Timer1 configured for higher power operation
PBADEN = OFF ; PORTB<4:0> pins are configured as digital I/O on Reset
CCP2MX = OFF ; CCP2 input/output is multiplexed with RB3
STVREN = OFF ; Stack full/underflow will not cause Reset
LVP = OFF ; Single-Supply ICSP disabled
XINST = OFF ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
Debug = OFF ; Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
Config_End

;-------------------------------------------------------------------------------
Xtal = 20

'Declare Xtal = 48

' descriptor file, located in \inc\usb_18 - a copy
' is located in the same folder as this file
USB_Descriptor = "USBProjectDESC.inc"

' USB Buffer...
Symbol USBBufferSizeMax = 8
Symbol USBBufferSizeTX  = 8
Symbol USBBufferSizeRX  = 8
Dim    USBBuffer [USBBufferSizeMax]As Byte
' зададим переменные для преобразования...
Dim USB_BUFFER As string*20
Dim AD_RESULT As ADRESL.Word
Dim VALUE As Word
Dim VOLTS As Byte
Dim MILLIVOLTS As Byte
Dim d1 As Float
' some useful flags...
Dim PP0 As Byte System        ' USBPOLL status return
Symbol CARRY_FLAG = STATUS.0  ' high if microcontroller does not have control over the buffer
Symbol ATTACHED_STATE = 6     ' is USB attached

' ************************************************************
' * main program loop - remember, you must keep the USB      *
' * connection alive with a call to USBPoll, USBIn or USBOut *
' * every couple of milliseconds or so                       *
' ************************************************************
GoSub AttachToUSB

'настроим АЦП
Adin_Res    10

Adin_Tad    FRC

Adin_Stime 100

TRISA.0=1    'порт A0 - аналоговый вход
TRISB=0
ADCON1=%10001110   'как аналоговый вход
ADCON2=%10000000

ProgramLoop:
d1=d1+1
'GoSub DoUSBIn
GoSub DoUSBOut
GoTo ProgramLoop

' ************************************************************
' * receive data from the USB bus                            *
' ************************************************************
'DoUSBIn:
'   USBIn 1, USBBuffer, USBBufferSizeRX, DoUSBIn
'   Return

' ************************************************************
' * transmit data                    *
' ************************************************************
DoUSBOut:
AD_RESULT=ADIn 0   'получим значение
VALUE=((AD_RESULT */500)>>2)
VOLTS=VALUE/100
MILLIVOLTS=VALUE //100
'USB_BUFFER = Str$(Dec1,VOLTS)+"."+Str$(Dec2,MILLIVOLTS) 'два знака после запятой
'USB_BUFFER="123345g"
USBBuffer[0] = 0
USBBuffer[1] = d1' 19'VOLTS
USBBuffer[2] = 78'MILLIVOLTS

USBOut 1, USBBuffer, USBBufferSizeTX, DoUSBOut    'строка передачи данных через USB
Return

' ************************************************************
' * wait for USB interface to attach                         *
' ************************************************************
AttachToUSB:
Repeat
USBPoll
Until PP0 = ATTACHED_STATE
Return
интересная ссылка:  https://protonbasic.wordpress.com/usb/termometro-usb-hid/

Добавлено (04.04.2015, 07:58)
---------------------------------------------
Рано, короче говоря, я обрадовался..

на других компах - устройство определяется с ошибкой angry
в чем же проблема?

Добавлено (04.04.2015, 07:59)
---------------------------------------------

Сообщение отредактировал DNM - Сб, 04.04.2015, 08:00
доцент2 Дата: Сб, 04.04.2015, 13:40  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 313
Репутация: 1   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

может дело в дровах?
DNM Дата: Пн, 06.04.2015, 11:02  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 76
Репутация: 0   ±
Замечания:   ±
На сайте с 29.09.2011

Статус: Offline

Цитата доцент2 ()
может дело в дровах?
короче - моя вина! bash
VUSB - не подключил!
после подключения проблем нет!!
программа рабочая.
Сорри.    holiday
Форум Picbasic.ru » Программирование МК » Proton PicBasic » 18F4550 _ usb (где ошибка?)
Страница 1 из 11
Поиск: