210 likes | 534 Views
Electronics Design Lab TUTORIAL PIC Microcontrollers Francesco Tenore 2/10/2006 The Microchip ® PIC ucontrollers http://www.microchip.com Characteristics types; speeds; I/O pins; Analog to Digital Converters; Capture/Compare modules Programming (MPLab) Instruction set
E N D
Electronics Design LabTUTORIALPIC Microcontrollers Francesco Tenore 2/10/2006
The Microchip ® PIC ucontrollers • http://www.microchip.com • Characteristics • types; speeds; I/O pins; Analog to Digital Converters; Capture/Compare modules • Programming (MPLab) • Instruction set • Implementations and Examples
Characteristics • RISC CPUs • 8-bit • 16-bit • Number of I/O pins: 4-70 • Memory types and sizes: • Flash; OTP; ROM • 0.5k – 256k
Speeds • All PICs require oscillators to execute instructions: • Internal* (low speeds, up to 8 MHz) • External (high speeds, up to 40 MHz) • Instructions are executed at least at ¼ oscillator speed (4 clocks/instruction) (*Note: not all PICs have internal oscillators)
A/D converters and C/C modules • All PICs have between 0 and 16 A/D converters with 8/10-bit resolution • 8-16 bit Timers/Counters • Comparator Modules (0-2)
Example: PIC16F877A 5/6 Programming pins 8 A/D channels 2 Oscillator Inputs 2 RS-232 inputs 33 I/O ports
MPLab • Download @ http://microchip.com • Assembly compiler for programming PICs • Based on specific PIC instruction set • To upload the program: • Compile: ProjectBuild All (Ctrl+F10) • Erase the device: Programmer Erase Flash Device • Program: Programmer Program
Instruction Set • 35 single word instructions • Byte oriented file register operations • Bit oriented file register operations • Literal and control operations
Example 1 Using the PIC12F683 as a 2-state switch
Giving memory to a pushbutton • In this example we: • Store the state of the LED and • Turn off if on and • Turn on if off
Example 2 Using the PICs A/D converters for Pulse Width Modulation
Pulse Width Modulation (PWM) • 1-2 ms pulse used to control servomotors • In this example, we: • ACQUIRE an analog 0-5V signal • CONVERT it into a 1-2 ms pulse that depends on the analog voltage and output the result on an output pin • REPEAT
Steps for Analog-to-Digital Conversion 1. Configure the A/D module: • Configure analog pins/voltage reference and digital I/O (ADCON1) • Select A/D input channel (ADCON0) • Select A/D conversion clock (ADCON0) • Turn on A/D module (ADCON0) 2. Configure A/D interrupt (if desired): • Clear ADIF bit • Set ADIE bit • Set PEIE bit • Set GIE bit 3. Wait the required acquisition time. 4. Start conversion: • Set GO/DONE bit (ADCON0) 5. Wait for A/D conversion to complete, by either: • Polling for the GO/DONE bit to be cleared (with interrupts enabled); OR • Waiting for the A/D interrupt 6. Read A/D result register pair (ADRESH:ADRESL), clear bit ADIF if required. 7. For the next conversion, go to step 1 or step 2, as required. The A/D conversion time per bit is defined as TAD. A minimum wait of 2TAD is required before the next acquisition starts.
ADC on PIC 16F877 • Configuration: • ADCON0, ADCON1 • Result • ADRESH, ADRESL (See handout)
Samples • The microchip website: www.microchip.com offers samples of PICs (maximum 5) that are sent to you for free. Please e-mail me at fra@jhu.edu if you have any questions.
; EDL_test1.asm: blinks an LED when pushbutton is pressed. #INCLUDE "P12F683.INC" ORG 0x000000 bsf STATUS,RP0 ;Bank 1 movlw b'01110010' ; 0x00 movwf OSCCON ; 0x01 goto START ; 0x02 ORG 0x000020 START: COUNTER EQU 0x21 TEMP EQU 0x22 BCF STATUS,RP0 ;Bank 0 CLRF GPIO ;Init GPIO MOVLW 07h ;Set GP<2:0> to MOVWF CMCON0 ;digital I/O BSF STATUS,RP0 ;Bank 1 CLRF ANSEL ;digital I/O MOVLW 28h ;Set GP<5> and GP<3> as inputs MOVWF TRISIO ;and set GP<4,2:0> as outputs BCF STATUS,RP0 ;Bank 0 BSF GPIO,0 LOOP: BTFSS GPIO,5 ; skip if button NOT pressed GOTO CLEAR_ROUTINE ; otherwise GOTO LOOP CLEAR_ROUTINE: INCF COUNTER,1 ; increment the counter MOVLW 0x01 ; w=1 ANDWF COUNTER,0 ; counter AND w => ; w = 0x01 MOVWF TEMP ; TEMP = 0x01 BTFSC TEMP,0 ; skip if TEMP is 0 BCF GPIO,0 ; otherwise, clear GPIO<0> BTFSS TEMP,0 BSF GPIO,0 ; if it's 1, then set it. LOOP2: BTFSC GPIO,5 GOTO LOOP GOTO LOOP2 END