Download - 專題製作-PIC16系列/PIC18系列應用實務 · 2012. 8. 13. · 7 單晶片概論(5) pic的系列產品 8位元晶片:pic10系列、pic12系列、pic16系 列、pic18系列
-
專題製作專題製作--PIC16PIC16系列系列/PIC18/PIC18系列應用實務系列應用實務報告人:黃嘉輝
-
1
問題
為什麼要選用為什麼要選用PICPIC,而不用,而不用8051 ?8051 ?
為什麼要選用為什麼要選用C ?C ?
為什麼要選用為什麼要選用PIC16?PIC16?
為什麼要選用為什麼要選用MikroCMikroC ??
容易上手嗎容易上手嗎??
發展設備貴嗎發展設備貴嗎 ??
-
2
大綱
單晶片概論1
程式發展步驟2
專題常用技術3
技能競賽相關技術4
-
3
單晶片概論(1)
單晶片全球現況
28.4%Others
3.4%10Samsung
4.4%9ST
4.8%8NXP
5.5%7Fujitsu
5.5%6Texas
6.6%5Infineon
6.7%4Microchip
7.4%3ATMEL
10.1%2Freescale17.3%1Renesas
佔有率2011排名MCU廠商
-
4
單晶片概論(2)
8 bit 單晶片概況(2009)
-
5
單晶片概論(3)
PIC與8051硬體特性有何不同?
便宜貴燒錄器
I:25mA O:5mAI/O:25mA~50mAI/O能力
稍慢(12T)快(4T)執行速度
多少資源
稍低高C/P値
XO內部振盪
少多種類
XO內部RESET
稍差稍好抗干擾
20 PIN6 PIN最小包裝
2.7~5.52~5.5工作電壓
8051PIC
-
6
單晶片概論(4)
PIC與8051寫法有何不同? PIC需有初始化,8051不用 PIC需有輸出入設定,8051不用 PIC暫存器多,必需規劃,8051較少 PIC組態必須設定,8051不用
例:單純I/O PIC16F883 8051
PORTA=0; P1.0=1;ANSEL=0;TRISA=0;PORTA.B0=1;
-
7
單晶片概論(5)
PIC的系列產品 8位元晶片:PIC10系列、PIC12系列、PIC16系
列、PIC18系列 16位元晶片:PIC24系列、dsPIC系列 32位元晶片:PIC32系列
適用場合 8 bit:一般控制用 16 bit:馬達控制、DSP需求 32 bit:SOC、通訊、PDA
常用包裝 6PIN、8 PIN、 14 PIN、16 PIN、28 PIN、40 PIN
-
8
單晶片概論(6)
PIC16F883特性 振盪頻率:1Hz~20MHz
工作電壓:2~5.5V
EEPROM:256 bytes
ROM:4K
RAM: 256 Bytes
I/O:I: 25 PIN O:24 PIN
Watch Dog:防止當機
A/D:11 CH 10 bit
PWM:2個
(1 Enhance , 1 Normal )
USART:1個,可與
RS232,RS485,SPI, I2C通訊
計時器: T0,T1,T2
-
9
單晶片概論(7)
PIC16F883單晶片腳位
-
10
單晶片概論(8)
PIC16F883完整必備電路
使用內部振盪及RESET使用外部振盪電路及RESET
-
11
單晶片概論(9)
PIC實驗板
-
12
單晶片概論(10)
PIC16F883實驗板能做什麼? LED 實驗 七段顯示+解碼實驗 LCD實驗 喇叭實驗 SSR實驗 直流馬達正反轉實驗 步進馬達實驗 PWM實驗 計時實驗 計次實驗
按鈕實驗 DIP SW實驗 4*3鍵盤實驗 麥克風實驗 A/D實驗 EEPROM實驗 溫度感測實驗 串列埠實驗 看門狗實驗 外部中斷實驗
-
13
程式發展步驟(1)
PIC C編譯器比較 MicroChip
• PIC18、PIC24/dsPIC、PIC32• MPLAB XC8、XC16、XC32(ALL US495)
Hi-Tech• PIC10/12/16/18、PIC24、PIC32• Microchip原廠合作,US495/US???/US895
MikroC• PIC12/16/18、dsPIC/PIC24、PIC32• 3rd party,US249/US249/US299
CCS• PIC12/16/18、PIC24、PIC32• 3rd party,US350/US500/US600
KEIL C (不支援) IAR (不支援)
-
14
程式發展步驟(2)
撰寫撰寫CC原始碼原始碼 編譯編譯//除錯除錯 燒錄燒錄//執行執行HEXHEX檔檔
Mikro CIDE
EZ PIC實驗板
Mikro CDebug
-
15
程式發展步驟(3)
8051組合語言delay:
mov r7,#100l1_delay:
mov r6,#217l2_delay:
mov r5,#10djnz r5,$djnz r6,l2_delaydjnz r7,l1_delayret
-
16
程式發展步驟(4)
KEIL C KEIL C(Delay ms) // 函數須自己撰寫void Delay_ms(int temp) //11.0592MHz{ //頻率換了又得重寫
int i,j;for(i=0;i
-
17
程式發展步驟(5)
KEIL C與MikroC的不同例:按鈕處理 KEIL C (按鈕處理)
• 硬體處理 //• 軟體處理 // 程序須自己撰寫
// 彈跳要自己處理 MikroC (按鈕處理)
• 硬體處理• 軟體處理 // 內建函數
Button(&PORTB,0,x,y); //x你要的彈跳延遲//y為作動的準位
例:PWM處理 KEIL C
• 需自己轉寫程式 MikroC
• PWM1_init(5000); // 內建函數
-
18
程式發展步驟(6)
STEP1:撰寫C程式(Mikro C IDE) C 程式的樣子:全域變數宣告;func1(){
區域變數宣告;::
}void main() //一開機後開始執行的地方{
區域變數宣告;初始化部分; // 這是跟8051不同的地方您的程式;
}
-
19
程式發展步驟(7)
STEP 2:編譯與除錯 MikroC IDE 介紹
STEP 3:燒錄與執行MikroC 檔案概述 *.mcppi:MikroC Pro專案檔 *.c:C原始檔 *.hex:十六進制檔(燒錄檔) *.asm:編譯之後的組語檔 *.mcl:編譯之後的二進制函數檔 *.lst:編譯後的記憶體配置情形
-
20
程式發展步驟(8)
PIC組態介紹(Mikro IDE ctrl+shift+E) OSC設定
• HS:石英振盪器 4MHz
-
21
程式發展步驟(9)
撰寫MikroC PIC16程式:初始化輸出篇 PIC數位控制規劃三步驟:
• STEP 1. 給定I/O初始值• STEP 2. 關閉複合功能• STEP 3. 規劃I/O方向
例:PORTA全部數位輸出void main() // 一開機後開始執行的地方{
PORTA=0; //1.讓PORTA輸出低電位ANSEL=0; //2.關閉PORTA的類比功能TRISA=0; //3.PORTA所有I/O為輸出::
}
-
22
程式發展步驟(10)
撰寫MikroC PIC18程式:初始化輸出篇 PIC數位控制規劃三步驟:
• STEP 1.給定I/O初始值• STEP 2. 關閉複合功能• STEP 3. 規劃I/O方向
例:PORTA全部數位輸出void main() // 一開機後開始執行的地方{
PORTA=0; //1.讓PORTA低電位LATA=0; //2.讓LATA低電位ADCON1=0x0F; //3.關閉PORTA類比功能CMCON=7; //4.關閉PORTA比較器功能TRISA=0; //5.PORTA所有I/O為輸出::
}
-
23
程式發展步驟(11)
撰寫MikroC PIC16程式:初始化輸出篇 例: RB0~RB3輸出,RB4~RB7輸入
void main() // 主程式開始{
PORTB=0; //讓PORTB輸出低電位ANSELH=0; //關閉PORTB類比功能TRISB=0b11110000; //0b:二進制
}
-
24
程式發展步驟(12)
撰寫MikroC PIC18程式:初始化輸出篇 例: RB0~RB3輸出,RB4~RB7輸入
void main() // 主程式開始{
PORTB=0; //1. 讓PORTB低電位LATB=0; //2. 讓LATB低電位ADCON1=0x0F; //3. 關閉AN8~AN12功能TRISB=0b11110000; //4. 0b:二進制:
:
}
-
25
程式發展步驟(13)
撰寫MikroC PIC16程式:初始化輸出篇 例: RC0~RC3輸出,RC4~RC7輸入
void main() // 主程式開始{
PORTC=0; //讓PORTC輸出低電位C1ON_bit=0; //關閉PORTC比較器C2ON_bit=0;
TRISC=0xf0; //0x:十六進制:
:
}
-
26
程式發展步驟(14)
撰寫MikroC PIC18程式:初始化輸出篇 例: RC0~RC3輸出,RC4~RC7輸入
void main() // 主程式開始{
PORTC=0; //1. 讓PORTC低電位LATC=0; //2. 讓LATC低電位TRISC=0xf0; //3. 0x:十六進制:
:
}
-
27
程式發展步驟(15)
撰寫MikroC PIC18程式:初始化輸出篇 例: PORTD輸出
void main() // 主程式開始{
PORTD=0; //1. 讓PORTD低電位LATD=0; //2. 讓LATD低電位TRISD=0x00; //3.
:
:
}
-
28
程式發展步驟(16)
撰寫MikroC PIC18程式:初始化輸出篇 例: PORTE輸出
void main() // 主程式開始{
PORTE=0; //1. 讓PORTE低電位LATE=0; //2. 讓LATE低電位ADCON1=0x0A; //3. 關PORTE上AD功能TRISE=0x03; //4. RE0、RE1為輸入:
:
}
-
29
程式發展步驟(17)
操作示範:PIC16 EX:利用RA0閃爍一顆LED
void main() // 程式一開始{
PORTA=0; // 初始化ANSEL=0; // 關閉類比功能TRISA=0; // 規劃I/O方向while(1){
PORTA.B0=1; //也可以改為PORTA=0x01;Delay_ms(500);PORTA.B0=0; //也可以改為PORTA=0x00;Delay_ms(500);
}}
-
30
程式發展步驟(18)
操作示範:PIC18 EX:利用RA0閃爍一顆LED
void main() // 程式一開始{
PORTA=0; // 初始化LATA=0;ADCON1=0xF; // 關閉類比功能CMCON=7; // 關閉比較器功能TRISA=0; // 規劃I/O方向while(1){
LATA=1; //也可以改為LATA.B0=1;Delay_ms(500);LATA=0;Delay_ms(500);
}}
-
31
專題常用技術(1)
101年 臺中高工-自動調節車流號誌系統
• NE555+IR(8051) 臺中高工-智慧型停車場引導系統
• Cds+PLC(8051) 100年 台中高工-智慧型追蹤電風扇
• IR+焦電感測(A/D)+LCD+步進馬達(89S8252) 台中高工-LED環保香
• Cds+驅蚊蟲電路(22KHz)(8051) 99年 台中高工-無線數位語音時鐘
• IR+4*1 SEG(8051) 台中高工-步進馬達轉速控制
• 步進馬達(8051)
-
32
專題常用技術(2)
內部振盪 節省週邊電路
Button 按鈕輸入
ADC cds照度偵測 焦電感測 溫度感測(LM35)
PWM IR
DC Motor速度控制 頻率產生 LED照度控制
KeyPad 輸入
LCD 顯示
EEPROM 參數記錄 資料記錄
馬達控制 步進馬達控制 DC Motor控制
溫度感測 環境控制 參數修正
-
33
專題常用技術(3)
內部震盪器之使用• 優點:無外部振盪電路• 缺點:振盪頻率有1%的誤差。
內部振盪器使用方式(MikroC IDE)• 組態設定:選擇INTOSCIO• 軟體書寫void main(){
區域變數區;OSCCON=0x7F; // 8 MHz, 0x6F=4MHz: // 參考:OSCCON暫存器:
-
34
專題常用技術(4)
按鈕技術 硬體電路
• 同8051
軟體• 使用內建函數
內建函數Button Button(&PORTA,0,20,0) ;//檢查RA0是否為0(按下)
//避開彈跳時間為20ms
• 傳回値:1有 0無
-
35
專題常用技術(5)
使用方式(Active Low) 有無按下(按下瞬間):直接偵測是否為0Vif(button(&PORTB,0,20,0)){
按鈕被按下時,想做的事;}
按下又放開(放開瞬間):先偵測按下,然後再測放開if(button(&PORTB,0,20,0))
KeyPressed=1; // 使用變數記錄起來if(KeyPressed==1 && button(&PORTB,0,20,1)) // &&:AND{
看你要幹嘛!}
-
36
專題常用技術(6)
LCD顯示技術 腳位介紹
D0~D7:資料線 Vo:控制對比 RS:暫存器選擇 E:晶片制能 R/W:讀取/寫入 A、K:背光
EGN
D
Vo RS
VCC
R/W D0
D1
D2
D3
D4
D5
D6
D7 A K
-
37
專題常用技術(7)
LCD顯示器之使用 STEP1:規劃控制腳位(RS,E,R/W)及資料腳
(D7,D6,D5,D4)
STEP 2:利用輸出函數輸出ASCII內建函數 Lcd_Init() //初始化LCD的函數
• 例:Lcd_Init();
Lcd_Cmd(命令) //可以對LCD下命令的函數• 例:Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,“This is a test”) // (1,1)輸出字串 Lcd_Chr(2,1,’0’) // (2,1)輸出字元 Lcd_Chr_Cp(0x30); // 游標位置輸出字元
-
38
專題常用技術(8)
LCD硬體 R/W:必須直接接地
軟體書寫範例(LCD使用範例)sbit LCD_RS at RB4_bit;sbit LCD_EN at RB5_bit;sbit LCD_D7 at RB3_bit;sbit LCD_D6 at RB2_bit;sbit LCD_D5 at RB1_bit;sbit LCD_D4 at RB0_bit;sbit LCD_RS_Direction at TRISB4_bit;sbit LCD_EN_Direction at TRISB5_bit;sbit LCD_D7_Direction at TRISB3_bit;sbit LCD_D6_Direction at TRISB2_bit;sbit LCD_D5_Direction at TRISB1_bit;sbit LCD_D4_Direction at TRISB0_bit;
-
39
專題常用技術(9)
void main(){
PORTB=0;
ANSELH=0;
TRISB=0;
Lcd_Init(); // 初始化LCDLcd_Cmd(_LCD_CLEAR); // 清除LCD螢幕Lcd_Cmd(_LCD_CURSOR_OFF); // 關閉游標Lcd_Out(1,3,”PIC EASY GO!”); // (1,3) 顯示
}
-
40
專題常用技術(10)
ADC技術 硬體
• 請參閱接腳圖
內建函數• Adc_Read(x); // x:channel NO.
信號計算:
軟體• 開啟A/D功能
– ANSEL=0x01; // 打開RA0之AD功能• AD PIN規劃為輸入
– TRISA=0x01; // 規劃RA0為輸入
1023
)(_V
VrefVrefDataADin
-
41
專題常用技術(11)
例:Cds+ADCvoid main()
{
unsigned AD_Data=0;
float Vin=0.0;
PORTA=0;
ANSEL=0x01;
TRISA=0x01;
AD_Data=ADC_Read(0); // AN0:AD輸入Vin=AD_Data*(5-0)/1023;
::
-
42
專題常用技術(12)
PWM技術• 硬體:
• PWM1:RC2• PWM2:RC1
內建函數• PWM1_Init(freq); // 所需頻率• PWM1_Set_Duty(百分比*255/100); // 設定Duty• PWM1_Start(); // PWM啟動• PWM1_Stop(); // 停止PWM
-
43
專題常用技術(13)
使用方式 STEP 1:PWM初始化
• Pwm1_Init(38000); // 38KHz
STEP 2: PWM開始• Pwm1_Start () ; // PWM開始
STEP 3:設定Duty• Pwm1_Set_Duty(50*255)/100); // Duty=50%
-
44
專題常用技術(14)
例:IR+PWMvoid main(){
PORTC=0;CCP1CON=CCP2CON=0;TRISC=0;Pwm1_Init(38000); // 38KHzPwm1_Start () ; // PWM開始Pwm1_Set_Duty(50*255)/100); // Duty=50%while(1){
::
}}
-
45
專題常用技術(15)
例:IR+PWM(硬體)
2N2222
220
IR LED
Vcc
VCC
U9
PIC16F883
RA7/OSC1/CLKIN9
RA6/OSC2/CLKOUT10
RE3/MCLR/VPP1
RA0/AN0/ULPWU/C12IN0-2
RA1/AN1/C12IN1-3
RA2/AN2/VREF-/CVREF/C2IN+4
RA3/AN3/VREF+/C1IN+5
RA4/T0CKI/C1OUT6
RA5/AN4/SS/C2OUT7
RC0/T1OSO/T1CKI11
RC1/T1OSI/CCP212
RC2/P1A/CCP113
RC4/SDI/SDA15RC5/SDO16RC6/TX/CK17RC7/RX/DT18
RB2/AN8/P1B23RB3/AN9/PGM/C12IN2-24RB4/AN11/P1D25RB5/AN13/T1G26
VSS19VDD20RB0/AN12/INT21RB1/AN10/P1C/C12IN3-22
RB6/ICSPCLK27RB7/ICSPDAT28
VSS8
RC3/SCK/SCL14
38KHz
-
46
技能競賽相關技術(1)
ADC之使用(使用內建函數即可) RA0 RA1
PWM之使用(使用內建函數即可) RC1(PWM2)
LCD之使用(使用內建函數即可) D4~D7:RD4~RD7 RS:RE0 R/W:直接接地 E:RE2
74HC595之使用(使用內建函數) CK:RC0 SDO:RC2 LATCH:RC3
-
47
技能競賽相關技術(2)
例:74HC595N之使用(腳位被固定)
-
48
技能競賽相關技術(3)
自寫函數寫法#define clock LATC.B0
#define latch LATC.B1
#define SDI LATC.B2void hc595 (unsigned unsigned char temp){
unsigned int i;i=8;while (i>0){
if (temp.F7==0) SDI = 0;else SDI = 1;temp = temp
-
49
技能競賽相關技術(4)
void latch595(){
latch = 1;Delay_us(1);latch = 0;
}void main(){
char i;PORTC=0; //1. 讓PORTC低電位LATC=0; //2. 讓LATC低電位TRISC=0x0; //3. 讓PORTC都輸出while(1){
for(i=0;i
-
50
技能競賽相關技術(5)
使用內建SPI函數#define latch LATC.B1sbit SoftSpi_SDI at RC7_bit;sbit SoftSpi_SDO at RC2_bit;sbit SoftSpi_CLK at RC0_bit;sbit SoftSpi_SDI_Direction at TRISC7_bit;sbit SoftSpi_SDO_Direction at TRISC2_bit;sbit SoftSpi_CLK_Direction at TRISC0_bit;void latch595(){
latch = 1;Delay_us(1);latch = 0;
}
-
51
技能競賽相關技術(6)
void main(){
char i;PORTC=0; //1. 讓PORTC低電位LATC=0; //2. 讓LATC低電位TRISC=0x0; //3. 讓PORTC都輸出Soft_SPI_Init();while(1){
for(i=0;i