Отговори на тема  [ 13 мнения ] 
Изпращане на keep alive импулси за USB в CCS ? 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Авг 24, 2009 7:48 pm
Мнения: 15
Мнение Изпращане на keep alive импулси за USB в CCS ?
Правя комуникация с USB HID устройство. Използвам PIC18F2550. Ако може да ми дадете идея как ще изглежда едно прекъсване от таймера за изпращане на keep alive импулси, че в менуъл-а на CCS не намерих готови функции както има в MikroC например.


Нед Мар 28, 2010 6:06 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
keep alive (SOF) ги праща хоста. Твоето устройство може да ги обработва - или да ги игнорира. Предназначението им е само да го предпазят от заспиване - утройството е длъжно да изпадне в летаргия след няколко милисекунди без активност по шината иначе


Пон Мар 29, 2010 12:32 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Авг 24, 2009 7:48 pm
Мнения: 15
Мнение 
А обработването на тези импулси от микроконтролера как става ?


Пон Мар 29, 2010 5:45 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
Те са пакети, не импулси, но както и да е...
Обработката на всички събития по usb при CCS е в прекъсването #int_usb. Там някъде трябва да има функция, от сорта usb_isr_sof() или нещо подобно. Мисля че прекъсването по SOF не е разрешено в техния стек. keep alive се нарича про Low speed, SOF при full speed. Общо взето, не мисля че има смисъл да ги обработваш по какъвто и да било начин... БТВ, какво се опитваш да правиш все пак ?


Вто Мар 30, 2010 12:17 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Авг 24, 2009 7:48 pm
Мнения: 15
Мнение 
Устройство с оптичен сензор, регистриращо брой чипове на входа на един автоматичен тестер. Чрез Vbasic приложение през USB на определено време се обновява информацията за максималния брой чипове, които може да преминат, както и микроконтролерът трябва да записва в база данни през определен период преминалите чипове. Та се чудя няма ли комуникацията по USB да се смути ако устройството не обработва тези поддържащи пакети...


Вто Мар 30, 2010 8:02 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
Няма. :D


Сря Мар 31, 2010 9:36 am
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Авг 24, 2009 7:48 pm
Мнения: 15
Мнение 
А за да не отварям нова тема, сега се опитвам да подкарам примера, който е дaден в ccs за комуникация с usb hid устройство - ex_usb_hid. При компилирането ми дава следната грешка: A #DEVICE required before this line в хедъра usb.h, където се декларира функцията: int1 usb_enumerated(void). Микроконтролерът, който използвам е 18ф2550.


Пон Май 24, 2010 3:03 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Сеп 24, 2005 2:00 pm
Мнения: 787
Мнение 
премести #include <usb.h> реда по-надолу да е след хедъра за процесора


Вто Май 25, 2010 2:31 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Авг 24, 2009 7:48 pm
Мнения: 15
Мнение 
Сложих го точно след реда #include <18F2550.h>, но пак има същият проблем. Други предложения ?


Вто Май 25, 2010 8:34 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 30, 2004 11:19 pm
Мнения: 609
Мнение 
грешката зависи от някоя декларация, без сорса отиваме в сферата на гадателството.


Вто Май 25, 2010 10:15 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Авг 24, 2009 7:48 pm
Мнения: 15
Мнение 
#include <18F2550.h>
#include <pic18_usb.h> //Microchip PIC18Fxx5x hardware layer for usb.c
#include <usb_desc_hid.h> //USB Configuration and Device descriptors for this UBS device
#include <usb.c> //handles usb setup tokens and get descriptor reports

#use fast_io(A) // all other ports default to 'standard_io'
#use fast_io(B) // fast_io means the tris bits only change
#use fast_io(C) // when we explicitly set them.

#byte PORTA = 0xF80
#byte PORTB = 0xF81
#byte PORTC = 0xF82
#byte ADCON1 = 0xFC1
#byte INTCON2 = 0xFF1


#bit RS = PORTC.0
#bit RW = PORTC.1
#bit EN = PORTC.2
#bit BUSY = PORTB.4
#bit EXT_INT0 = PORTB.0
#bit INTEDG0 = INTCON2.6

#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)

int digit = 0, count = 0;

void delay()
{
int i,j;
for(i = 0; i < 100; i++);
}





void init_io()
{

SET_TRIS_A(0x00);

// set up PORTB so RB0 is an input for the switch SW1, RB1-RB7 are outputs
SET_TRIS_B(0x01); // RB0 0 = input
ADCON1 = 0b00001111; //AN0-AN12 digital I/O
// set up remaining ports to be all outputs
SET_TRIS_C(0x00);

}



void wait_lcd()
{
RS = 0; //command
RW = 1; //read
EN = 0;

PORTA = 0x0F;
PORTB = PORTB | 0b00011110;

EN = 1; //Send the command

SET_TRIS_B(0b00010000);

while (BUSY == 1); //check if LCD is still busy

SET_TRIS_B(0x00);
PORTB = PORTB & 0b00000001;
RW = 0; //Turn to write commands
}

void init_lcd()
{
EN = 1;

PORTA = 0x08; //Communicate with 8-bit data bus, 5x8 character font
PORTB = PORTB | 0b00000110;
EN = 0;

wait_lcd();
EN = 1;

PORTA = 0x0E; //turn LCD and cursor on
PORTB = PORTB & 0x01;
EN = 0;

wait_lcd();
}

void clear_lcd()
{

PORTA = 0x01;
EN = 1;
EN = 0;
wait_lcd();
}

void write_text()
{
EN = 1;
RS = 1;
PORTA = digit;
PORTB = PORTB | 0b00000110;
EN = 0;
wait_lcd();
}

#INT_EXT
EXT_isr()
{
int units, decs, flag = 0;
delay();
while(EXT_INT0);
clear_lcd();
count = count + 1;

if (count > 10)
flag = 1;

jump:
if (flag == 0)
{
digit = count;
write_text();
}

if (flag == 1)
{
decs = count / 10;
digit = decs;
write_text();

units = count % 10;
digit = units;
write_text();
}

}

void main(void)
{
int8 out_data[4];
int8 in_data[4];

init_io();
init_lcd();
clear_lcd();
clear_interrupt(INT_EXT);
ext_int_edge(0,L_TO_H);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
usb_init_cs();
while (TRUE)
{

if (usb_enumerated())
{
if (usb_kbhit(1))
{
usb_get_packet(1, in_data, 4);

}


delay_ms(1);
}
}
}
От примера за USB съм оставил само хедърите и сорсовете за процесора, който ползвам и съм добавил един модул за управление на LCD. В usb_desc_hid.h съм променил само размерите на HID_TX_SIZE и HID_RX_SIZE. Оттам се извиква usb.h, който изглежда така:
#IFNDEF __USB_PROTOTYPES__
#DEFINE __USB_PROTOTYPES__

//// CONFIGURATION ////////////////////////////////////////////////////////////

#ifndef USB_CON_SENSE_PIN
#define USB_CON_SENSE_PIN 0
#endif

#IFNDEF USB_HID_BOOT_PROTOCOL
#DEFINE USB_HID_BOOT_PROTOCOL FALSE
#ENDIF

#IFNDEF USB_HID_IDLE
#DEFINE USB_HID_IDLE FALSE
#ENDIF

//should the compiler add the extra HID handler code? Defaults to yes.
#IFNDEF USB_HID_DEVICE
#DEFINE USB_HID_DEVICE TRUE
#ENDIF

#IFNDEF USB_CDC_DEVICE
#DEFINE USB_CDC_DEVICE FALSE
#ENDIF

//set to false to opt for less RAM, true to opt for less ROM
#ifndef USB_OPT_FOR_ROM
#define USB_OPT_FOR_ROM TRUE
#endif

#IFNDEF USB_MAX_EP0_PACKET_LENGTH
#DEFINE USB_MAX_EP0_PACKET_LENGTH 8
#ENDIF


////// USER-LEVEL API /////////////////////////////////////////////////////////

/**************************************************************
/* usb_enumerated()
/*
/* Input: Global variable USB_Curr_Config
/* Returns: Returns a 1 if device is configured / enumerated,
/* Returns a 0 if device is un-configured / not enumerated.
/*
/* Summary: See API section of USB.H for more documentation.
/***************************************************************/

int1 usb_enumerated(void);
При деклариране на първата функция на USB грешката е: A #DEVICE required before this line


Сря Май 26, 2010 8:06 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 30, 2004 11:19 pm
Мнения: 609
Мнение 
подреди началото така:
Код:
#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include <pic18_usb.h> //Microchip PIC18Fxx5x hardware layer for usb.c
#include <usb_desc_hid.h> //USB Configuration and Device descriptors for this UBS device
#include <usb.c> //handles usb setup tokens and get descriptor reports

компилирах го с 4107 има инсталл някъде във форума, вади някакви warning, но там вече ти ще си гледаш, имаш забележки за кода


Сря Май 26, 2010 10:11 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Авг 24, 2009 7:48 pm
Мнения: 15
Мнение 
И при мен се компилира. Благодаря за помощта.


Чет Май 27, 2010 9:32 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 13 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни