在NDK這篇HelloUart中,有人詢問到開發平台轉移至智慧型手機上應該如何實現呢??
前面寫了一個方法是透過無線藍牙 -- Android Bluetooth 應用之 HelloBTUart(RS-232)
本文延續這個問題,提供了第二個答案就是直接使用有線的USB來做 Virtual COM port (VCP) 。
Android自從Honeycomb (3.1)版本後就開始支援USB hosting機制,也就是說從3.1版後Android提供了android.hardware.usb類別來使用,把早先Android從Accessory的角色變成Host及Accessory(Device)兩種都可以的角色。
至目前為止,Android在USB hosting機制從一開始只支援USB Keyboard、Mouse到現在Jelly Bean陸續已經可以支援到USB儲存裝置、攝影機、網卡、搖桿、....等總類非常繁多。
所以,本篇實作的部分主要是如何在Android上使用USB裝置(UsbDevice API)。
本社群由Nantou.py使用者社群以及國立虎尾科技大學電機資訊學院負責維護,它是一群熱愛智慧生活科技以及Python的專業教師所組成,大家一同快樂地研究有關數位生活中人工智慧、大數據、物聯網、雲端服務、APPS、福祉科技、感知網路服務、車載網路服務、及網際網路等資通訊技術,並運用這些資通訊以及Python技術來提升我們的日常生活品質,建立更好的生活環境。
2012年11月1日 星期四
2010年11月22日 星期一
下載USB HID測試程式及測試USB設備上的LED
在USB Central網站上提供許多USB學習資源

點選HID選項

將下載到的generic_hid_vb_46.zip解開

開啟Visual Studio 2005,選擇File選單中的Open之Project/Solution選項,開啟GenericHid。


然後利用USB線將USB發展工具與電腦連接在一起,再打開Cypress USB Control Panel,下載led.hex到發展工具。

按下Visual Studio的執行鈕後,設定Vendor ID及Product ID為1234及5678。

然後按下Find My Device按鈕及One按鈕,就可以觀察USB設備上LED的變化。
點選HID選項
將下載到的generic_hid_vb_46.zip解開
開啟Visual Studio 2005,選擇File選單中的Open之Project/Solution選項,開啟GenericHid。
然後利用USB線將USB發展工具與電腦連接在一起,再打開Cypress USB Control Panel,下載led.hex到發展工具。
按下Visual Studio的執行鈕後,設定Vendor ID及Product ID為1234及5678。
然後按下Find My Device按鈕及One按鈕,就可以觀察USB設備上LED的變化。
2010年4月6日 星期二
液晶(LCD)顯示器實驗
今天跟大家分享如何撰寫LCD控制程式,控制LCD很簡單,必須瞭解2個函式:wr_inst和wr_data,前者是送命令給LCD,而後者是送資料給LCD。相關LCD控制命令可以查http://www.8051projects.net/lcd-interfacing/commands.php。完整程式列表如下:
xdata volatile char PORTACFG _at_ 0x7F93;
xdata volatile char PORTBCFG _at_ 0x7F94;
xdata volatile char PORTCCFG _at_ 0x7F95;
xdata volatile char OUTA _at_ 0x7F96;
xdata volatile char OUTB _at_ 0x7F97;
xdata volatile char OUTC _at_ 0x7F98;
xdata volatile char PINSA _at_ 0x7F99;
xdata volatile char PINSB _at_ 0x7F9A;
xdata volatile char PINSC _at_ 0x7F9B;
xdata volatile char OEA _at_ 0x7F9C;
xdata volatile char OEB _at_ 0x7F9D;
xdata volatile char OEC _at_ 0x7F9E;
xdata volatile char OUTD _at_ 0x7841;
xdata volatile char PINSD _at_ 0x7842;
xdata volatile char OED _at_ 0x7843;
static const char T1[]="LiNe_1";
static const char T2[]={0X4C,0X69,0X4E,0X65,0X5F,0X31};
void DELAY(unsigned int value) //10us
{
while (value!=0) value--;
}
void wr_inst(char c)
{
OUTB=0x40;
OUTA=c;
DELAY(40);
OUTB=0x00;
}
void wr_data(char c)
{
OUTB=0x50;
OUTA=c;
DELAY(40);
OUTB = 0x10;
}
main()
{
unsigned int i;
PORTACFG = 0x00;
OEA = 0xFF;
PORTBCFG = 0x00;
OEB = 0xFF;
wr_inst(0x01);
DELAY(4000);
wr_inst(0x38);
wr_inst(0x0F);
wr_inst(0x06);
wr_inst(0x80);
for(i=0;i<6;i++)
wr_data(T1[i]);
wr_inst(0xC3);
for(i=0;i<6;i++)
wr_data(T2[i]);
while(1) {}
}
2010年3月30日 星期二
巨量輸出控制實驗
我們來談談如何撰寫USB巨量傳輸控制(個人電腦傳送資料給USB設備)
有三個非常重要的暫存器
xdata char OUT2BUF[64] _at_ 0x7DC0;//端點2的輸出共佔記憶體64位元
xdata char OUT2BC _at_ 0x7FC9; //此暫存器是表示共接收到電腦傳來的資料長
//設定為0表示可以再接收
xdata char OUT2CS _at_ 0x7FC8; // EP2OUT 控制/狀態暫存器
以下是完整的程式列表
// CH-10 巨量傳輸至LED程式範例 01/08/02, SYH
// 透過USB 端點2OUT來傳送資料至LED顯示器上
//設定I/O埠A,B,C,D控制的相關暫存器記憶體位址
xdata char PORTACFG _at_ 0x7F93;
xdata char PORTBCFG _at_ 0x7F94;
xdata char PORTCCFG _at_ 0x7F95;
xdata char OUTA _at_ 0x7F96;
xdata char OUTB _at_ 0x7F97;
xdata char OUTC _at_ 0x7F98;
xdata char PINSA _at_ 0x7F99;
xdata char PINSB _at_ 0x7F9A;
xdata char PINSC _at_ 0x7F9B;
xdata char OEA _at_ 0x7F9C;
xdata char OEB _at_ 0x7F9D;
xdata char OEC _at_ 0x7F9E;
xdata char OUTD _at_ 0x7841;
xdata char PINSD _at_ 0x7842;
xdata char OED _at_ 0x7843;
xdata char OUT2BUF[64] _at_ 0x7DC0;
xdata char OUT2BC _at_ 0x7FC9;
xdata char OUT2CS _at_ 0x7FC8; // EP2OUT 控制/狀態暫存器
#define bBSY 0x02 // OUT2CS.1為忙碌位元
#define DISPLAYTIME 400 // approx. milliseconds
char count,j; // 傳送至EP2OUT2緩衝區共'count'數值
void delay (int time);
main()
{
PORTACFG = 0x00; // 規劃PA為輸出
PORTBCFG = 0x00;
OEA = 0xFF;
OEB = 0xFF;
OED = 0xFF;
OUTA = 0x00; // 清除LED列的顯示
OUTB = 0x00;
OUTD = 0x00;
while (1) // 無限迴圈
{
while (OUT2CS & bBSY);// EP2OUT端點忙碌位元為HI持續等待
count = OUT2BC; // 計數EP2OUT端點傳送位元組值
for(j=0; j<count; j+=3)// 將計數值次數用來閃爍PA LED
{
OUTA=OUT2BUF[j]; //資料在PA LED顯示
OUTB=OUT2BUF[j+1]; //資料在PB LED顯示
OUTC=OUT2BUF[j+2]; //資料在PD LED顯示
delay(DISPLAYTIME); // 延遲副程式
OUTA=0x00; // 清除PA LED
OUTB=0x00; // 清除PB LED
OUTD=0x00; // 清除PD LED
delay(DISPLAYTIME);
}
OUT2BC = 0; // 配賦下一個OUT2傳輸(BC為任意值)
}
}
int i,k;
void delay (int time)
{
for (k=0; k<time; k++) // 延遲迴圈
for (i=0; i<400; i++);
}
有三個非常重要的暫存器
xdata char OUT2BUF[64] _at_ 0x7DC0;//端點2的輸出共佔記憶體64位元
xdata char OUT2BC _at_ 0x7FC9; //此暫存器是表示共接收到電腦傳來的資料長
//設定為0表示可以再接收
xdata char OUT2CS _at_ 0x7FC8; // EP2OUT 控制/狀態暫存器
以下是完整的程式列表
// CH-10 巨量傳輸至LED程式範例 01/08/02, SYH
// 透過USB 端點2OUT來傳送資料至LED顯示器上
//設定I/O埠A,B,C,D控制的相關暫存器記憶體位址
xdata char PORTACFG _at_ 0x7F93;
xdata char PORTBCFG _at_ 0x7F94;
xdata char PORTCCFG _at_ 0x7F95;
xdata char OUTA _at_ 0x7F96;
xdata char OUTB _at_ 0x7F97;
xdata char OUTC _at_ 0x7F98;
xdata char PINSA _at_ 0x7F99;
xdata char PINSB _at_ 0x7F9A;
xdata char PINSC _at_ 0x7F9B;
xdata char OEA _at_ 0x7F9C;
xdata char OEB _at_ 0x7F9D;
xdata char OEC _at_ 0x7F9E;
xdata char OUTD _at_ 0x7841;
xdata char PINSD _at_ 0x7842;
xdata char OED _at_ 0x7843;
xdata char OUT2BUF[64] _at_ 0x7DC0;
xdata char OUT2BC _at_ 0x7FC9;
xdata char OUT2CS _at_ 0x7FC8; // EP2OUT 控制/狀態暫存器
#define bBSY 0x02 // OUT2CS.1為忙碌位元
#define DISPLAYTIME 400 // approx. milliseconds
char count,j; // 傳送至EP2OUT2緩衝區共'count'數值
void delay (int time);
main()
{
PORTACFG = 0x00; // 規劃PA為輸出
PORTBCFG = 0x00;
OEA = 0xFF;
OEB = 0xFF;
OED = 0xFF;
OUTA = 0x00; // 清除LED列的顯示
OUTB = 0x00;
OUTD = 0x00;
while (1) // 無限迴圈
{
while (OUT2CS & bBSY);// EP2OUT端點忙碌位元為HI持續等待
count = OUT2BC; // 計數EP2OUT端點傳送位元組值
for(j=0; j<count; j+=3)// 將計數值次數用來閃爍PA LED
{
OUTA=OUT2BUF[j]; //資料在PA LED顯示
OUTB=OUT2BUF[j+1]; //資料在PB LED顯示
OUTC=OUT2BUF[j+2]; //資料在PD LED顯示
delay(DISPLAYTIME); // 延遲副程式
OUTA=0x00; // 清除PA LED
OUTB=0x00; // 清除PB LED
OUTD=0x00; // 清除PD LED
delay(DISPLAYTIME);
}
OUT2BC = 0; // 配賦下一個OUT2傳輸(BC為任意值)
}
}
int i,k;
void delay (int time)
{
for (k=0; k<time; k++) // 延遲迴圈
for (i=0; i<400; i++);
}
2010年3月23日 星期二
3/23 學生使用USB設備實作七段顯示器控制程式
同學實作七段顯示器控制程式,撰寫0000-9999每次遞增1的控制程式。
//8051 7S的程式碼範例
//規劃I/O埠A,B,C,D控制的相關暫存器記憶體位址
xdata char PORTACFG _at_ 0x7F93;
xdata char PORTBCFG _at_ 0x7F94;
xdata char PORTCCFG _at_ 0x7F95;
xdata char OUTA _at_ 0x7F96;
xdata char OUTB _at_ 0x7F97;
xdata char OUTC _at_ 0x7F98;
xdata char PINSA _at_ 0x7F99;
xdata char PINSB _at_ 0x7F9A;
xdata char PINSC _at_ 0x7F9B;
xdata char OEA _at_ 0x7F9C;
xdata char OEB _at_ 0x7F9D;
xdata char OEC _at_ 0x7F9E;
xdata char OUTD _at_ 0x7841;
xdata char PINSD _at_ 0x7842;
xdata char OED _at_ 0x7843;
#define DISPLAYTIME 1 // approx. milliseconds
unsigned char Da[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay (int time)
{
int i,k;
for (k=0; k for (i=0; i<300; i++);
}
// 共陽極7-SEG解碼電路
void main()
{
unsigned char a=0,b,c,d;
int num[4]={0,0,0,0},num2=0;
PORTBCFG = 0x00;
OEB = 0xFF;
OED = 0xFF;
while(1)
{
for(d=0;d<250;d++)
{
b=0x0e;
for(c= 0; c<4;c++)
{
OUTD=Da[num[c]];
OUTB=b;
b=(b<<1)|1;
delay(DISPLAYTIME);
}
}
num2++;
num[0]=num2/1000;
num[1]=num2/100%10;
num[2]=num2/10%10;
num[3]=num2%10;
}
}
USB 七段顯示器實驗
1 //8051 7S的程式碼範例
2
3 //規劃I/O埠A,B,C,D控制的相關暫存器記憶體位址
4 xdata char PORTACFG _at_ 0x7F93;
5 xdata char PORTBCFG _at_ 0x7F94;
6 xdata char PORTCCFG _at_ 0x7F95;
7 xdata char OUTA _at_ 0x7F96;
8 xdata char OUTB _at_ 0x7F97;
9 xdata char OUTC _at_ 0x7F98;
10 xdata char PINSA _at_ 0x7F99;
11 xdata char PINSB _at_ 0x7F9A;
12 xdata char PINSC _at_ 0x7F9B;
13 xdata char OEA _at_ 0x7F9C;
14 xdata char OEB _at_ 0x7F9D;
15 xdata char OEC _at_ 0x7F9E;
16 xdata char OUTD _at_ 0x7841;
17 xdata char PINSD _at_ 0x7842;
18 xdata char OED _at_ 0x7843;
19
20 #define DISPLAYTIME 500 // approx. milliseconds
21 unsigned char Da[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
22 void delay (int time)
23 {
24 1 int i,k;
25 1 for (k=0; k26 1 for (i=0; i<400; i++);
27 1 }
28 // 共陽極7-SEG解碼電路
29
30
31 void main()
32 {
33 1 unsigned char a=0;
34 1 PORTBCFG = 0x00;
35 1 OEB = 0xFF;
36 1 OED = 0xFF;
37 1
38 1 while(1)
39 1 {
40 2 for( a=0 ; a<=9 ; a++)
41 2 {
42 3
43 3 OUTD=Da[a];
44 3 OUTB=0x0e;
45 3 delay(DISPLAYTIME);
46 3
47 3 }
48 2
49 2 }
50 1 }
2010年3月22日 星期一
USB驅動程式實作教學資源分享
USB是目前電腦介面的主流,隨著USB 3.0高達5G bps的通訊速度,USB即將稱霸電腦的介面,在幾年的USB教學經驗把常接觸的三個網站分享給社員們,第一個網站是USB官方網站,該網站提供USB的規格及技術,在選擇Developers選項後,再選擇Document就可以看USB的規格書,在該網頁的最下方有presentation,存放許多有用的投影片,是不錯的教學資源;第二個網站是USB Central其中HID的網頁是我最常下載的教學範例程式;最後一個是SoC聯盟的課程網站,該網站有各校所製作的SoC相關課程的投影片,提到USB在南開科大您必須認識電通系鍾明政老師,您在網頁中所提供的課程搜尋,在分類搜尋選擇課程主持人,在關鍵字搜尋鍵入鍾明政,按下搜尋,就可以找到鍾老師精心設計的實驗教材。
訂閱:
文章 (Atom)