Форум Микро-Чип

Форум Микро-Чип (http://www.microchip.su/index.php)
-   Продукция MICROCHIP (http://www.microchip.su/forumdisplay.php?f=6)
-   -   USB в PIC18F14K50 на 6МГц (http://www.microchip.su/showthread.php?t=6217)

Keksisce 12.06.2009 18:19

USB в PIC18F14K50 на 6МГц
 
Создание своего проекта для USB-CDC на PIC18f14k50 зашло в тупик. Решил разобрать Microchip-овские примеры. Посмотрел схему LOW PIN COUNT USB DEVELOPMENT KIT, взял примеры для него из Microchip Application Libraries, а именно тот что в папке c:\Microchip Solutions\USB Device - CDC - Basic Demo\CDC - Basic Demo - Firmware\ . Далее собрал схему, в точности такую, как на демо-плате, но поставил кварц не 12 МГц, а на 6 МГц.
При подключении к USB, WinXP Выдает "Устройство USB не опознано". Далее в файле
HardwareProfile - Low Pin Count USB Development Kit.h
изменяю
#define CLOCK_FREQ 48000000
на
#define CLOCK_FREQ 24000000
Эффект - тот же - "Устройство USB не опознано".
Подскажите - что и в каком файле проекта изменить, чтобы дело дошло хотя бы до установки драйвера, ибо голова уже пухнет.:confused:

fantom 12.06.2009 18:24

Re: USB в PIC18F14K50 на 6МГц
 
Почему кварц другой? Обычно собираешь и подключаешь всё чётко по инструкции, и всё равно не запускается сразу. А тут сразу отсебятина...

Keksisce 12.06.2009 18:33

Re: USB в PIC18F14K50 на 6МГц
 
Цитата:

Сообщение от fantom (Сообщение 67401)
Почему кварц другой? Обычно собираешь и подключаешь всё чётко по инструкции, и всё равно не запускается сразу. А тут сразу отсебятина...

Другого нет , а судя по DATASHEETу на PIC18f14k50 , кроме 12 МГц можно использовать ещё и 6 МГц.

HHIMERA 12.06.2009 18:55

Re: USB в PIC18F14K50 на 6МГц
 
Цитата:

Сообщение от Keksisce (Сообщение 67402)
Другого нет , а судя по DATASHEETу на PIC18f14k50 , кроме 12 МГц можно использовать ещё и 6 МГц.

А потому, что кварц тактирует не только ядро, но и USB модуль...

Keksisce 12.06.2009 22:13

Re: USB в PIC18F14K50 на 6МГц
 
Цитата:

Сообщение от HHIMERA (Сообщение 67403)
А потому, что кварц тактирует не только ядро, но и USB модуль...

Я-то это все понимаю, и как мне кажется, проблема вся именно в тактировании (Microchip не может же нерабочий проект подсунуть), а какие ещё изменения внести в пример при изменении частоты кварца с 12 Мгц на 6Мгц - и спрашиваю, может кто сталкивался?

Machine slave 12.06.2009 22:14

Re: USB в PIC18F14K50 на 6МГц
 
Для Full speed нужно использовать только внешнее тактирование на 12 или 48 Мгц, или кварц на 12 Мгц.
Кварц на 6 Мгц подходит только для Low speed.

Keksisce 12.06.2009 22:54

Re: USB в PIC18F14K50 на 6МГц
 
Цитата:

Сообщение от Machine slave (Сообщение 67419)
Для Full speed нужно использовать только внешнее тактирование на 12 или 48 Мгц, или кварц на 12 Мгц.
Кварц на 6 Мгц подходит только для Low speed.

Спасибо, один из моих вопросов прояснился - в даташите просмотрел. Тогда другой вопрос - как заставить работать на Low speed? По идее, найти в описании конфигурацию регистра USBCFG , бит FSEN (0 - LOW SPEED, 1 - HIGH SPEED) установить в 0 должно быть достаточно?

Machine slave 12.06.2009 23:00

Re: USB в PIC18F14K50 на 6МГц
 
В конфигурации также надо включить тактирование USB от кварца без делителя. В дескрипторе устройства поменять 0x0200 на 0x0101. А вообще по спецификации USB для Communication Device Class используется Full Speed, потому что для Low speed допустимы только Interrupt транзакции. А в CDC используются Bulk.
Цитата:

A low-speed device must
not have bulk endpoints.

Machine slave 12.06.2009 23:28

Re: USB в PIC18F14K50 на 6МГц
 
Лучше найдите кварц на 12 Мгц. И еще на будущее, добавьте строковый дескриптор с серийным номером устройства, с ним при подключении в разные USB порты не будет каждый раз устанавливаться новый COM.
Код:

/* Device Descriptor */
ROM USB_DEVICE_DESCRIPTOR device_dsc=
{
    0x12,                  // Size of this descriptor in bytes
    USB_DESCRIPTOR_DEVICE,  // DEVICE descriptor type
    0x0200,                // USB Spec Release Number in BCD format    //TODO: workaround for BSTALL erratum
    CDC_DEVICE,            // Class Code
    0x00,                  // Subclass code
    0x00,                  // Protocol code
    USB_EP0_BUFF_SIZE,          // Max packet size for EP0, see usb_config.h
    0x4D8,                // Vendor ID
    0x000A,                // Product ID: CDC RS-232 Emulation Demo
    0x0001,                // Device release number in BCD format
    0x01,                  // Manufacturer string index
    0x02,                  // Product string index
    0x03,                  // Device serial number string index
    0x01                    // Number of possible configurations
};

Красным цветом отмечен индекс строки с серийником, при запросе хоста GET DESCRIPTOR STRING с этим индексом устройство должно передать ему эту строку.
Код:

rom const unsigned char *rom USB_SD_Ptr[]=
{
    (rom const unsigned char *rom)&sd000,
    (rom const unsigned char *rom)&sd001,
    (rom const unsigned char *rom)&sd002
    (rom const unsigned char *rom)&sd003
};

Серийник:
Код:

rom struct{byte bLength;byte bDscType;word string[2];}sd003={
sizeof(sd003),DSC_STR,
'0','1'
};


Keksisce 13.06.2009 15:03

Re: USB в PIC18F14K50 на 6МГц
 
Так и сделал - нашел кварц 12МГц (так проще), все заработало. Изменения оказались полезными. Machine slave, Спасибо. Немного освою стандартные примеры - попробую LOW SPEED.

dmxuser 18.06.2009 12:44

Re: USB в PIC18F14K50 на 6МГц
 
low speed usb - необходимо соединить через резистор 1,5 КОм Vusb&D- , тогда хост поймет, что скорость устройства низкая.

vitmailru 29.07.2009 21:03

Re: USB в PIC18F14K50 на 6МГц
 
подскажите где можно скачать Microchip Application Libraries?

SSH 30.07.2009 06:21

Re: USB в PIC18F14K50 на 6МГц
 
Цитата:

Сообщение от vitmailru (Сообщение 70848)
подскажите где можно скачать Microchip Application Libraries?

http://www.microchip.com/Microchip.W...Name=en543091#

vitmailru 30.07.2009 15:40

Re: USB в PIC18F14K50 на 6МГц
 
Цитата:

Сообщение от SSH (Сообщение 70870)

Спасибо.
Кто подскажет чем прошивать этот микроконтроллер, по нему информации кот наплакал.. На радиорынке продавцы говорят что никогда о нем не слышали :)
Low pin count dev kit не могу найти

Machine slave 30.07.2009 17:23

Re: USB в PIC18F14K50 на 6МГц
 
Цитата:

Сообщение от vitmailru (Сообщение 70925)
Спасибо.
Кто подскажет чем прошивать этот микроконтроллер, по нему информации кот наплакал.. На радиорынке продавцы говорят что никогда о нем не слышали :)
Low pin count dev kit не могу найти

PICkit 2 шьет только "cвист" стоит :)

vitmailru 30.07.2009 17:31

Re: USB в PIC18F14K50 на 6МГц
 
Да, вот нашел список поддерживаемых МК http://microchip.com.ru/DevTools/pickit2_support.html
А программная часть какая, там утилита в комплекте? Она же используется при прошивке через usb когда уже прошит бутлоадер?

Machine slave 30.07.2009 17:34

Re: USB в PIC18F14K50 на 6МГц
 
Цитата:

Сообщение от vitmailru (Сообщение 70928)
Да, вот нашел список поддерживаемых МК http://microchip.com.ru/DevTools/pickit2_support.html
А программная часть какая, там утилита в комплекте? Она же используется при прошивке через usb когда уже прошит бутлоадер?

Можно прошивать из MPLAB, можно утилитой. Последнюю версию утилиты можно скачать с сайта Microchip. Все просто как раз-два.

vitmailru 04.08.2009 17:02

Re: USB в PIC18F14K50 на 6МГц
 
А возможна работа МК с USB без кварца с внутренним генератором? Если да то подозреваю только как LOW SPEED устройство. Что еще нужно для этого кроме 1,5к резистора, CLOCK_FREQ менять нужно? или другие флаги, подскажите пожалуйста. Кварц на плату не помещается

Machine slave 04.08.2009 17:22

Re: USB в PIC18F14K50 на 6МГц
 
Внутренний такотвый генератор для USB не подходит. Он не удовлетворяет требованиям USB по точности. Да вы его и не сможете применить, даже если очень захочется (см. блок схему на стр. 12). Только кварц или внешнее тактирование 6 Мгц (12 с делителем) для LS или 12 Мгц для FS. Резистор 1,5 кОм не нужен, он встроен в мк и режим LS или FS выбирается программно битами UPUEN, FSEN(регистр UCFG). В семействе PIC18F4xJ50 реализована возможность работы USB на low speed, благодаря заявленной точности внутреннего генератора тип. +-0,15 % (макс. 1 %).

vitmailru 03.09.2009 14:11

Re: USB в PIC18F14K50 на 6МГц
 
Спасибо за ответы. Подскажите еще как выставить биты конфигурации для этого МК, чтобы он работал с внутренним генератором с внешним питанием (не usb). К выводу 10 (RB7) я подключил светодиод и пытаюсь его зажечь вот таким кодом

Код:

#include "p18f14k50.h"
#pragma config WDTEN = OFF // выкл. сторожевой таймер 
void main (void)
{
TRISB = 0; //переводим порт В на вывод
PORTB = 1; //вывод 1 в порт B
while (1); // бесконечный цикл
}

Скомпилировал в MPLAB c компилятором C18 и прошил МК через piccit2 как и советовали. Ничего не загорается :o

В MPLAB выставил такие конфигурационные биты:
CPUDIV "No CPU system clock divide"
USBDIV "USB clock comes directly from the osc1/osc2, no divide"
OSC "INT RC"
PLLEN "Oscillator used directly"
PCLKEN "Primary clock enabled"
FCMEN disabled
IESO disabled
nPWRTEN disabled
BOREN "Enabled in hardware, SBOREN disabled"
BORV 1,9v
WDTEN disabled, controlled by SWDTEN
HFOFST "HFINTOSC starts clocking the cpu without waiting for the oscillator to stabilize"
MCLRE "MCLR Enabled, RA3 Disabled"
STVREN enabled
LVP disabled
All protection - disabled

Когда начнет выполняться программа, после прошивки или нужно отсоединить плату с pic от программатора и подать на пик питание? Сигнал сброса обязателен или он подается при подключении источника питания?
Еще хотелось бы прошивать из MPLAB а не утилиты pickit, но в списке программаторов и отладчиков только pickit3. В configure->select device pickit2 с желтым кружком, кто знает что это значит?

И подскажите как выставлять биты конфигурации в коде. Пытаюсь делать это сл. образом
#pragma config CPUDIV = OSC1_PLL2
компилятор ругается на константу OSC1_PLL2

Machine slave 03.09.2009 18:43

Re: USB в PIC18F14K50 на 6МГц
 
Цитата:

Сообщение от vitmailru (Сообщение 73546)
Когда начнет выполняться программа, после прошивки или нужно отсоединить плату с pic от программатора и подать на пик питание? Сигнал сброса обязателен или он подается при подключении источника питания?
Еще хотелось бы прошивать из MPLAB а не утилиты pickit, но в списке программаторов и отладчиков только pickit3. В configure->select device pickit2 с желтым кружком, кто знает что это значит?

И подскажите как выставлять биты конфигурации в коде. Пытаюсь делать это сл. образом
#pragma config CPUDIV = OSC1_PLL2
компилятор ругается на константу OSC1_PLL2

Не обязательно отсоединять, можно подать питание с PICkit 2. MCLR если включен должен быть подтянут к Vdd через резистор 5-10к, но в настройках его можно отключить,тогда он внутренне будет подтянут. Можно прошивать из MPLAB, достаточно выбрать в качестве программатора PICkit 2. Желтый кружок означает "Not production tested (Beta support available)" (кнопку Help не судьба щелкнуть? :)).
Потому что OSC1_PLL2 нет такой настройки в этом мк.
Доступно:
CPUDIV = NOCLKDIV No CPU System Clock divide
CPUDIV = CLKDIV2 CPU System Clock divided by 2
CPUDIV = CLKDIV3 CPU System Clock divided by 3
CPUDIV = CLKDIV4 CPU System Clock divided by 4.

Вместо
Код:

PORTB = 1; //вывод 1 в порт B
используйте
Код:

LATB = 1; //вывод 1 в порт B
Запомните PORTx это для чтения, LATx для выхода!

Попробуйте с этим:
Код:

#pragma config WDTEN = OFF // выкл. сторожевой таймер
#pragma config CPUDIV = NOCLKDIV
#pragma config MCLRE = OFF
#pragma config PWRTEN = ON
#pragma config PLLEN = OFF
#pragma config FOSC = IRC
#pragma config STVREN = ON
#pragma config LVP = OFF
#pragma config XINST = OFF

Забыл сказть, еще обнулите регистры ANSEL/ANSELH, а то по умолчанию некоторые выводы настроены как аналоговый вход.

vitmailru 03.09.2009 19:12

Re: USB в PIC18F14K50 на 6МГц
 
Цитата:

Не обязательно отсоединять, можно подать питание с PICkit 2
Просто подключив к разьему Pickit? Другими словами, программа запустится после прошивки?
Насчет моего косяка с MCLR я уже обнаружил, что на схеме на него подается 1. Переключил MCLRE в "MCLR Disabled, RA3 Enabled", это не помогло. Как происходит сброс когда включен RA3 и что это за зверь?

Цитата:

Можно прошивать из MPLAB, достаточно выбрать в качестве программатора PICkit 2
Его нет в меню MPLAB, вместо него пиккит3 :confused:

Цитата:

Потому что OSC1_PLL2 нет такой настройки в этом мк.
Доступно:
CPUDIV = NOCLKDIV No CPU System Clock divide
CPUDIV = CLKDIV2 CPU System Clock divided by 2
CPUDIV = CLKDIV3 CPU System Clock divided by 3
CPUDIV = CLKDIV4 CPU System Clock divided by 4.
Где обьявлены эти константы и где посмотреть их по остальным битам?

Machine slave 03.09.2009 19:19

Re: USB в PIC18F14K50 на 6МГц
 
Цитата:

Сообщение от vitmailru (Сообщение 73605)
Просто подключив к разьему Pickit? Другими словами, программа запустится после прошивки?
Насчет моего косяка с MCLR я уже обнаружил, что на схеме на него подается 1. Переключил MCLRE в "MCLR Disabled, RA3 Enabled", это не помогло. Как происходит сброс когда включен RA3 и что это за зверь?


Его нет в меню MPLAB, вместо него пиккит3 :confused:


Где обьявлены эти константы и где посмотреть их по остальным битам?

Да, плату можно питать от PICkit, в утилите даже кнопка есть или в MPLAB в меню Programmers --> Set Vdd On. Когда MCLRE = OFF, то вывод мк становится только ВХОДом порта A (RA3), а сброс внутренне подтянут к Vdd. При такой настройке внешний сброс не работает. Какой у вас MPLAB? У меня все есть :)

vitmailru 03.09.2009 19:35

Re: USB в PIC18F14K50 на 6МГц
 
Цитата:

в утилите даже кнопка есть или в MPLAB в меню Programmers --> Set Vdd On
Я нажимал, не помогало, думаю причина в конф. битах

Цитата:

Какой у вас MPLAB? У меня все есть
Вот только что поставил на рабочем компе, 8.33 версия, и, чудеса какие-то, pickit2 есть в меню. Дома не было, наверное версии разные ставил.

Цитата:

Когда MCLRE = OFF, то вывод мк становится только ВХОДом порта A (RA3), а сброс внутренне подтянут к Vdd
Сегодня где-то видел совет завести MCLR на землю для надежности работы pic, и никогда не использовать для сброса, правда или нет

Machine slave 03.09.2009 19:39

Re: USB в PIC18F14K50 на 6МГц
 
Цитата:

Сообщение от vitmailru (Сообщение 73608)
Сегодня где-то видел совет завести MCLR на землю для надежности работы pic, и никогда не использовать для сброса, правда или нет

Я пацталом :D Если внешний сброс включен, то при этом ваш мк будет все время находится в сбросе!


Часовой пояс GMT +3, время: 23:44.

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot