簡介
電子產(chǎn)品是我的愛好。當我在大學的時候,我曾與微控制器的一些經(jīng)驗,我沒有與Atmel的AT89C51的幾個項目。最近,我已經(jīng)長大了PIC單片機的利息,我想我應該開始用8針的微芯片。我挑的PIC12F683微芯片。該微控制器讓我著迷了很多,因為我想看看我們能做些什么與8引腳微控制器(其中2個引腳的電源,所以實際上只是6針左側的I / O)。所以我想這是我自己的學習板。在這個項目中,我首先要說明我的學習板,然后將演示幾個實驗。PIC12F683的一些功能: 工作電壓范圍寬(2.0 - 5.5V)
精確的內(nèi)部振蕩器(軟件可選,8 MHz到125千赫)
6 I / O引腳電平變化中斷功能。
4個10位A / D轉換器
兩個8位和16位定時器
一個捕捉,比較和PWM模塊
在線串行編程
程序存儲器- 2048字,以SRAM為128字節(jié),電可擦除可編程只讀存儲器(EEPROM),256個字節(jié)
電路布局和設計
本學習板具有以下特點:
一個9V直流的開關電源輸入插座
穩(wěn)壓+5 V電源使用7805芯片
3輸出LED和LED電源1
2輸入輕觸開關
2電位器:一個模擬輸入,并提供ADC的參考電壓
基于晶體管的TTL - RS232電平轉換器的串行通信。
一個一個晶體管驅動直流馬達。
壓電蜂鳴器
在黑板上的大多數(shù)這些功能是通過女性的針腳訪問。6 - I / O引腳的PIC12F683的是硬連接到任何東西,他們通過針腳。的數(shù)字 顯示PIC12F683的引腳,女性的頭和跳線用于連接電路板上的類型,學習板的詳細電路圖。只有ISCP引腳是通過男性的針腳訪問 。整個電路是建立在一個8 × 12厘米的一般原型板。
正如你看到的輸出LED470Ω電流串聯(lián)限流電阻,使一個PIC引腳可以安全駕駛。還通過一個串聯(lián)電阻PIC引腳直接驅動壓電式蜂鳴器。但是,直流電動機作為S8050晶體管的集電極負載所需的電流來驅動電機,不能由PIC端口提供連接。因此,PIC端口可以拉動其基高開關晶體管和晶體管集電極電流提供足夠的電流來驅動電機。 TTL RS232電平轉換,反之亦然實現(xiàn)兩個晶體管和其他一些組件。 RS232電平所需的負電壓是從一臺PC本身的RS232端口被盜 。注意有沒有硬件UART內(nèi)部的PIC12F683,因此從微控制器的串行數(shù)據(jù)傳輸?shù)絇C將可能只有通過通過GP0任何軟件UART,GP1,GP2的,GP4,GP5端口(GP3僅輸入) 。微控制器端的發(fā)射機和接收機端口UTX和URX表示,而在PC端Tx和Rx,分別記為。線路圖顯示,輕觸開關與兩個電位器輸出和所有8個PIC12F683的引腳的兩個輸入是通過女性的頭訪問。輕觸開關低電平有效,也就是說,在正常情況下,輕觸開關輸出為高電平,當它被按下時,輸出為低電平。有情侶的頭做實驗時,可能需要額外的VCC和GND端子。電源電路是7805穩(wěn)壓IC的標準電路。一個供電指示燈是與一個470Ω的系列電阻跨接在VCC和GND。在電路串行編程(ICSP)的PIC12F683的,可以用兩個引腳:ICSPDAT(引腳7)和ICSPCLK(引腳6)。編程電壓Vpp的,應提供引腳的PIC12F683編程時,4。所需的所有ISCP引腳通過一個男性頭,所以可以通過任何ICSP PIC的程序員編程的PIC。確保程序員方和我們的學習板ISCP引腳順序相匹配。重要事項:在ICSP引腳4,6,和PIC12F683的7應該不會被連接到任何東西,離開他們所以,不會有任何編程器和外部電路之間的電壓沖突。
[!--empirenews.page--]軟件開發(fā)
在PIC12F683的匯編語言或高級語言,你可以寫你的實驗方案。但是,我要在這里展示的實驗,我是用從MikroElektronica mikroC編譯器的免費版本。它是一個C編譯器的PIC微芯片,并免費版本限制輸出程序的大小為2K。但我們并不需要為PIC12F683的不止于此。
PIC12F683的,我們將使用下面的配置位。mikroC,您可以在“編輯”項目“窗口中選擇。
振蕩器:內(nèi)部RC,沒有時鐘
WDT關閉
主清除殘疾人
對于所有的實驗表明,使用4.0 MHz的內(nèi)部時鐘。
為PIC12F683的完成學習板
測試實驗
再次閱讀,然后再繼續(xù)以上的軟件開發(fā)部分。
************************************************** *******************************
實驗1號:3位二進制計數(shù)器
本次實驗的目的是建立一個3位二進制上升計數(shù)器,每個計數(shù)之間的延遲1秒計數(shù)從000到111。到111后,它重置為000,并再次開始計數(shù)。計數(shù)值將顯示在三個LED。
安裝: 連接GP0,GP1和GP2(PIC的引腳7,6和5)LED 3,2和1。
/ *
PIC12F683的實驗局
Experimen號1:3位計數(shù)器
“指示燈1,2和3是連接到GPIO2,GPIO1和GPIO0,
分別為“
* / 短我; 無效的主要(){ CMCON0 = 7; / /禁用比較 TRISIO = 8 / / GPIO0 - GPIO2輸出和GP3是默認輸入 的ANSEL = 0;/ /沒有ADC GPIO = 0; delay_ms(500) I = 0; { GPIO = I; delay_ms(1000); I = 1; (我== 8)I = 0; }(1);}
在mikroC編譯這個程序,負載??內(nèi)的PIC12F683與任何ICSP編程。輸出:
在LED上顯示的3位計數(shù)器實驗第2號:輕觸開關輸入和電機控制。本次實驗的目的是兩個輕觸開關來控制電機。當按下一個開關,電機就會開啟,其他關閉。安裝: 將SW1和SW2引腳(引腳7)GP0和GP1的PIC12F683(引腳6)。還可以連接電機驅動器的引腳GP2的(引腳5 )。因此,GP0和GP1均為輸入和GP2輸出。請記住,當按下開關時,相應的SW引腳被拉低 。在正常情況下,SW1和SW2拉高。
軟件
/* Motor ON/OFF control with tact switches
Rajendra Bhatt, Sep 3, 2010
PIC12F683, MCLR OFF, Internal Oscillator @ 4.00MHz
*/
sbit Start_Button at GP0_bit;
sbit Stop_Button at GP1_bit;
sbit Motor at GP2_bit;
void main() {
CMCON0 = 7; // Disable Comparators
TRISIO = 0x03; // 0000 0011 GPIO 0, 1, Inputs; Rest are O/Ps
ANSEL = 0x00;
Motor = 0;
do {
if (!Start_Button) { /* When a tact switch is pressed, Logic I/P is 0*/
Delay_ms(100);
Motor = 1; // Turn Motor ON
}
if (!Stop_Button) {
Delay_ms(100);
Motor = 0; // Turn Motor ON
}
} while(1);
}
輸出:當SW1按下時,電機將開啟,并按下SW2時,它會熄滅。
實驗3: 軟件UART測試。
本次實驗的目的是發(fā)送一個字符串到PC使用的軟件UART例程。該字符串將被轉移到PC上的超級終端窗口顯示時,按下SW1開關。字符串將被按下開關
安裝:[!--empirenews.page--]微控制器端:
連接UTX和SW1引腳GP0(引腳7)和GP1端口分別。
PC端:
連接RX(2),TX(3)和GND(5)針板相應的PC機的RS232端口引腳。此外,在PC上定義以下設置一個新的連接的超級終端窗口。
BPS = 9600,數(shù)據(jù)位= 8;校驗=無,停止位= 1; =硬件流量控制
軟件
/*
PIC12F683 Experiment Board
Experimen No. 3 : Read analog voltage from AN0 and diplay
on Hyperterminal window on PC using Software UART.
Date: 06/25/2010
*/
char Message1[] = "Digital Value= ";
unsigned int adc_value, backup=0 ;
char *temp = "0000", error;
int i;
void main() {
CMCON0 = 7;
TRISIO = 11; // GPIO 0, 1, 3 Inputs; Rest are O/Ps
ANSEL = 0;
GPIO = 0;
// Define GPIO.3 as UART Rx, and 5 as Tx
error = Soft_UART_Init(&GPIO,3, 5, 9600, 0 );
Delay_ms(100);
do {
adc_value = ADC_Read(0);
if(adc_value != backup) {
if (adc_value/1000)
temp[0] = adc_value/1000 + 48;
else
temp[0] = '0';
temp[1] = (adc_value/100)%10 + 48;
temp[2] = (adc_value/10)%10 + 48;
temp[3] = adc_value%10 + 48;
for (i=0; i<= 13; i++) {
Soft_UART_Write(Message1[i]);
Delay_ms(50);
}
for (i=0; i<= 3; i++) {
Soft_UART_Write(temp[i]);
Delay_ms(50);
}
Soft_UART_Write(10); // Line Feed
Soft_UART_Write(13); // Carriage Return
backup = adc_value;
}
delay_ms(100);
} while(1);
}
輸出
相應的模擬輸入數(shù)字號碼將顯示在超級終端窗口。您可以改變電位器和數(shù)字同等數(shù)量也將發(fā)生變化。請記住,ADC是10位,讓您在屏幕上看到的數(shù)量將會從0000到1023。