Microprocessor Systems Design I

Slides:



Advertisements
Similar presentations
Microprocessor and Microcontroller Based Systems Instructor: Eng.Moayed N. EL Mobaied The Islamic University of Gaza Faculty of Engineering Electrical.
Advertisements

Prof. Jorge A. Ramón Introducción a Microcontroladores.
Microprocessor Systems Design I Instructor: Dr. Michael Geiger Fall 2013 Lecture 26: PIC microcontroller intro.
16.317: Microprocessor System Design I Instructor: Dr. Michael Geiger Spring 2012 Lecture 30: PIC data memory.
16.317: Microprocessor System Design I Instructor: Dr. Michael Geiger Spring 2012 Lecture 29: Microcontroller intro.
Microprocessor Systems Design I Instructor: Dr. Michael Geiger Fall 2013 Lecture 27: PIC instruction set.
Microprocessor Systems Design I
Railway Foundation Electronic, Electrical and Processor Engineering.
Microprocessor and Microcontroller Based Systems Instructor: Eng.Moayed N. EL Mobaied The Islamic University of Gaza Faculty of Engineering Electrical.
Microcontroller Programming How to make something almost do something else Raffi Krikorian MAS November 2003.
Building Assembler Programs Chapter Five Dr. Gheith Abandah1.
Lecture – 4 PIC18 Family Instruction Set 1. Outline Literal instructions. Bit-oriented instructions. Byte-oriented instructions. Program control instructions.
EEE237 Introduction to Microprocessors Week x. SFRs.
Architecture and instruction set. Microcontroller Core Features:  Operating speed: DC - 20 MHz clock input DC ns instruction cycle Up to 8K x.
INTRODUCTION TO PIC MICROCONTROLLER. Overview and Features The term PIC stands for Peripheral Interface Controller. Microchip Technology, USA. Basically.
Department of Electronic & Electrical Engineering Template program. Input / Output (IO) ● Template program. ● Introduction to IO ● Setting up for IO ●
Department of Electronic & Electrical Engineering Lecture 2 ● Introduction to IO ● Using a subroutine ● Driving a 7seg display.
PIC12F629/675. “Wide variety” 8-84 pin RISC core, 12/14/16bit program word USART/AUSART, I 2 C, ADC, ICSP, ICD OTP/UV EPROM/FLASH/ROM Families: PIC12,
Department of Electronic & Electrical Engineering Lecture 3. ● Template program. ● Introduction to IO ● PORTA PORTB TRISA TRISB ● Using a subroutine ●
Programming PIC 16F84A in Assembly. PIC16F84 pin-out and required external components.
I/O PORTS. General purpose I/O pins can be considered the simplest of peripherals. They allow the PICmicro™ to monitor and control other devices. To add.
Microprocessor Systems Design I
Microprocessor Systems Design I
Microprocessor Systems Design I
Prof. Ahmad Abu-El-Haija
Microprocessor Systems Design I
ECE Application Programming
Microprocessor Systems Design I
Microprocessor Systems Design I
Microprocessor Systems Design I
Microprocessor Systems Design I
Microprocessor Systems Design I
Microprocessor Systems Design I
C. K. PITHAWALA COLLEGE OF ENGINEERING AND TECHNOLOGY
INT. TO EMBEDDED SYSTEMS DEVELOPMENT
Microprocessor Systems Design I
Microprocessor Systems Design I
Microprocessor Systems Design I
Microprocessor Systems Design I
PIC – ch. 2b Md. Atiqur Rahman Ahad.
PIC 16F877.
16.317: Microprocessor System Design I
Microprocessor Systems Design I
Microcomputer Programming
EECE.3170 Microprocessor Systems Design I
EECE.3170 Microprocessor Systems Design I
An Introduction to Microprocessor Architecture using intel 8085 as a classic processor
Projekt Anglicky v odborných předmětech, CZ.1.07/1.3.09/
EECE.3170 Microprocessor Systems Design I
EECE.3170 Microprocessor Systems Design I
EECE.3170 Microprocessor Systems Design I
Chapter 4 Instruction Set.
EECE.3170 Microprocessor Systems Design I
EECE.3170 Microprocessor Systems Design I
EECE.3170 Microprocessor Systems Design I
INSTRUCTION SET.
EECE.3170 Microprocessor Systems Design I
EECE.3170 Microprocessor Systems Design I
EECE.3170 Microprocessor Systems Design I
EECE.3170 Microprocessor Systems Design I
EECE.3170 Microprocessor Systems Design I
EECE.3170 Microprocessor Systems Design I
EECE.3170 Microprocessor Systems Design I
EECE.3170 Microprocessor Systems Design I
EECE.3170 Microprocessor Systems Design I
EECE.3170 Microprocessor Systems Design I
EECE.3170 Microprocessor Systems Design I
EECE.3170 Microprocessor Systems Design I
EECE.2160 ECE Application Programming
Computer Operation 6/22/2019.
Presentation transcript:

16.317 Microprocessor Systems Design I Instructor: Dr. Michael Geiger Summer 2012 Lecture 10 PIC16F684 programming examples Exam 3 Preview

Microprocessors I: Lecture 10 Lecture outline Announcements/reminders Lab 4 due today HW 3 due Friday, 8/10 Do not do problem 2j (JL instruction) Turn in to my office by 1:45, or e-mail Exam 3: Monday, 8/13 Exam 2 regrade requests also due that day Lab 5 due Tuesday, 8/14 Same turn-in procedure as HW 3 Today’s lecture PIC programming examples Exam 3 Preview 10/27/2017 Microprocessors I: Lecture 10

Review: PIC instructions Logical operations andlw/andwf iorlw/iorwf xorlw/xorwf Rotates rrf rlf Jumps/calls/return goto call return/retlw/retfie Miscellaneous nop sleep/clrwdt Conditional execution Test bit and skip next instruction if clear/set: btfsc/btfss Increment/decrement register and skip next instruction if zero: incfsz/decfsz Example use: combined with goto to create conditional jump 10/27/2017 Microprocessors I: Lecture 10

Microprocessors I: Lecture 10 10/27/2017 Working with 16-bit data Assume a 16-bit counter, the upper byte of the counter is called COUNTH and the lower byte is called COUNTL. Decrement a 16-bit counter movf COUNTL, F ; Set Z if lower byte == 0 btfsc STATUS, Z decf COUNTH, F ; if so, decrement COUNTH decf COUNTL, F ; in either case decrement COUNTL Test a 16-bit variable for zero btfsc STATUS, Z ; If not, then done testing movf COUNTH, F ; Set Z if upper byte == 0 btfsc STATUS, Z ; if not, then done goto BothZero ; branch if 16-bit variable == 0 CarryOn 10/27/2017 Microprocessors I: Lecture 10 Chapter 9

Microprocessors I: Lecture 10 10/27/2017 A Delay Subroutine ; *********************************************************************************** ; TenMs subroutine and its call inserts a delay of exactly ten milliseconds ; into the execution of code. ; It assumes a 4 MHz crystal clock. One instruction cycle = 4 * Tosc. ; TenMsH equ 13 ; Initial value of TenMs Subroutine's counter ; TenMsL equ 250 ; COUNTH and COUNTL are two variables TenMs nop ; one cycle movlw TenMsH ; Initialize COUNT movwf COUNTH movlw TenMsL movwf COUNTL Ten_1 decfsz COUNTL,F ; Inner loop goto Ten_1 decfsz COUNTH,F ; Outer loop goto Ten_1 return 10/27/2017 Microprocessors I: Lecture 10 Chapter 9

Microprocessors I: Lecture 10 Blinking LED example Assume three LEDs (Green, Yellow, Red) are attached to Port D bit 0, 1 and 2. Write a program for the PIC16F874 that toggles the three LEDs every half second in sequence: green, yellow, red, green, …. For this example, assume that the system clock is 4MHz. 10/27/2017 Microprocessors I: Lecture 10

Microprocessors I: Lecture 10 Top Level Flowchart Initialize: Initialize port D, initialize the counter for 500ms. Blink: Toggle the LED in sequence, green, yellow, red, green, …. Which LED to be toggled is determined by the previous state. Wait for 500ms: Keep the LED on for 500ms and then toggle the next one. 10/27/2017 Microprocessors I: Lecture 10

Microprocessors I: Lecture 10 Strategy to “Blink” The LEDs are toggled in sequence - green, yellow, red, green, yellow, red… Let’s look at the lower three bits of PORTD 001=green, 010=yellow, 100=red The next LED to be toggled is determined by the current LED. 001->010->100->001->… 10/27/2017 Microprocessors I: Lecture 10

Microprocessors I: Lecture 10 “Blink” Subroutine Blink btfsc PORTD, 0 ; is it Green? goto toggle1 ; yes, goto toggle1 btfsc PORTD, 1 ; else is it Yellow? goto toggle2 ; yes, goto toggle2 ;toggle0 bcf PORTD, 2 ; otherwise, must be red, change to green bsf PORTD, 0 ; 100->001 return toggle1 bcf PORTD, 0 ; change from green to yellow bsf PORTD, 1 ; 001->010 toggle2 bcf PORTD, 1 ; change from yellow to red bsf PORTD, 2 ; 010->100 10/27/2017 Microprocessors I: Lecture 10

Another way to code “Blink” ---- Table Use movf PORTD, W ; Copy present state of LEDs into W andlw B'00000111' ; and keep only LED bits addwf PCL,F ; Change PC with PCLATH and offset in W retlw B'00000001' ; (000 -> 001) reinitialize to green retlw B'00000011' ; (001 -> 010) green to yellow retlw B'00000110' ; (010 -> 100) yellow to red retlw B'00000010' ; (011 -> 001) reinitialize to green retlw B'00000101' ; (100 -> 001) red to green retlw B'00000100' ; (101 -> 001) reinitialize to green retlw B'00000111' ; (110 -> 001) reinitialize to green retlw B'00000110' ; (111 -> 001) reinitialize to green In calling program call BlinkTable ; get bits to change into W xorwf PORTD, F ; toggle them into PORTD 10/27/2017 Microprocessors I: Lecture 10

Lab 5 Intro: Stepper motors Magnet attached to shaft Current through coil  magnetic field Reverse current  reverse field Pair of coils used to attract magnet to one of 4 different directions Unipolar stepper motor: center taps on coil make current reversal easy Microcontroller can activate drive transistors Major differences between uni-polar and bi-polar. Uni-polar has logically two windings per phase, so a magnetic pole can be reversed without switching the direction of current, A microcontroller or stepper motor controller can be used to activate the drive transistors in the right order, Less torque bi-polar has logically a single winding per phase, so current in a winding needs to be reversed in order to reverse a magnetic pole, driving circuit must be more complicated, typically with an H-bridge arrangement More torque Magnet rotor coil 10/27/2017 Microprocessors I: Lecture 10

How Bi-polar Stepper Motor Works More torque than unipolar motor Similar principle, but no center taps Need glue circuitry (use H-bridge) 10/27/2017 Microprocessors I: Lecture 10

Sequences (1 = phase activated) Table of Stepping Sequences Sequences (1 = phase activated) Sequence Polarity Name Description 0001 0010 0100 1000 ---+ --+- -+-- +--- Wave Drive, One-Phase Consumes the least power. Only one phase is energized at a time. Assures positional accuracy regardless of any winding imbalance in the motor. 0011 0110 1100 1001 --++ -++- ++-- +--+ Hi-Torque, Two-Phase Hi Torque - This sequence energizes two adjacent phases, which offers an improved torque-speed product and greater holding torque. 0001 0011 0010 0110 0100 1100 1000 1001 ---+ --++ --+- -++- -+-- ++-- +--- +--+ Half-Step Half Step - Effectively doubles the stepping resolution of the motor, but the torque is not uniform for each step.  (Since we are effectively switching between Wave Drive and Hi-Torque with each step, torque alternates each step.)  Note that this sequence is 8 steps. 10/27/2017 Microprocessors I: Lecture 10

Microprocessors I: Lecture 10 The Schematic Because of power requirements, induction of the windings, and temperature management, motors cannot be directly powered by most digital controllers. Some "glue circuitry," such as a motor controller (H-bridge) is necessary between digital controller and motor. The above image shows the basic circuit of a motor controller which can also sense motor current. (One wire of the motor is shown; a stepper motor would require such a circuit for four wires, and a normal DC motor for two. This circuitry is typically all included in an integrated H-bridge chip. 10/27/2017 Microprocessors I: Lecture 10

Our energization pattern Step Up-down Coil East-West Coil 1 South Off 2 3 4 North 5 6 7 8 10/27/2017 Microprocessors I: Lecture 10

Microprocessors I: Lecture 10 Our control sequence RC5 RC4 RC3 RC2 1 10/27/2017 Microprocessors I: Lecture 10

Microprocessors I: Lecture 10 Sequence 0111 OFF 1 1 1 10/27/2017 Microprocessors I: Lecture 10

Microprocessors I: Lecture 10 Sequence 0101 1 1 10/27/2017 Microprocessors I: Lecture 10

The code (comments, directives) title "asmStepper - PIC16F684 Bipolar Stepper Motor Control" ; ; This Program Outputs a new Bipolar Stepper Motor Sequence ; once every 250 ms. ; Hardware Notes: ; PIC16F684 running at 4 MHz Using the Internal Clock ; Internal Reset is Used ; RC5:RC2 - L293D Stepper Motor Control ;; ; Myke Predko ; 05.01.14 LIST R=DEC ;yluo note: list directive to specify assembler options INCLUDE "p16f684.inc" List directive is used to specify different assembly and listing commands to the assembler program. R=DEC means the default number base in 10. _CONFIG directive is used to specify the configuration word bits. Each parameter is ANDed together to specify which bits are reset and set. 10/27/2017 Microprocessors I: Lecture 10

The Code (configuration code and data variables) __CONFIG _FCMEN_OFF & _IESO_OFF & _BOD_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTOSCIO ; Variables CBLOCK 0x20 Dlay, i ENDC PAGE ; Mainline org 0 nop ; For ICD Debug 10/27/2017 Microprocessors I: Lecture 10

The code (initialization) movlw 1 << 2 ; Start with Bit 2 Active movwf PORTC movlw 7 ; Turn off Comparators movwf CMCON0 bsf STATUS, RP0 ; Execute out of Bank 1 clrf ANSEL ^ 0x080 ; All Bits are Digital movlw b'000011' ; RC5:RC2 are Outputs movwf TRISC ^ 0x080 bcf STATUS, RP0 ; Return Execution to Bank 0 clrf i 10/27/2017 Microprocessors I: Lecture 10

Microprocessors I: Lecture 10 The code (main loop) Loop: ; Return Here for Next Value movlw HIGH ((250000 / 5) + 256) movwf Dlay movlw LOW ((250000 / 5) + 256) addlw -1 ; 250 ms Delay btfsc STATUS, Z decfsz Dlay, f goto $ - 3 movf i, w call SwitchRead movwf PORTC incf i, f ; i = (i + 1) % 8; bcf i, 3 goto Loop SwitchRead: addwf PCL, f ; Staying in First 256 Instructions dt b'011100', b'010100', b'000100', b'100100' dt b'100000', b'101000', b'111000', b'011000' end 10/27/2017 Microprocessors I: Lecture 10

Microprocessors I: Lecture 10 Exam 3 notes Allowed One 8.5” x 11” double-sided sheet of notes Calculator No other notes or electronic devices (phone, laptop, etc.) Exam will last three hours Will be written for ~50 minutes, but you’ll have whole exam period Covers all lectures after Exam 2 Format similar to previous exams 1 multiple choice question 2 short problems to solve/code sequences to evaluate 10/27/2017 Microprocessors I: Lecture 10

Review: Microcontroller/PIC basics Microcontrollers: CPU integrated with storage, I/O devices Examples Timers/event counters Parallel & serial ports Clock generator Analog to digital converter Benefits: low cost/low power, easy to program Limitations: storage, computational power Introduced PIC 16F684 microcontroller 14 pins—12 multiplexed I/O + power/ground All computations using 2 values use accumulator Harvard memory architecture Memory divided into SFR / GPR Dedicated 8-entry system stack for return addresses (subroutines/interrupts) 10/27/2017 Microprocessors I: Lecture 10

Review: PIC Data Memory Organization Made up of SFRs and GFRs Banking: 128 byte chunks Max offset within bank 0x7f Controller may have 2 or 4 banks Addressing Modes Direct addressing: 7 bit address (within bank) RP1:RP0 selects bank Indirect addressing: Access to INDF causes indirect addressing Actual memory address in IRP+FSR I/O ports Control register (e.g. TRISA) controls direction of each pin Bit = 1  input, Bit = 0  output Data register (e.g. PORTA) contains actual port state 10/27/2017 Microprocessors I: Lecture 10

Review: PIC instructions Four instruction formats Upper bits of all hold opcode Byte-oriented includes 1 bit destination, 7 bit direct address Bit-oriented includes 3 bit position (0-7), 7 bit direct address Literal/control includes 8 bit literal CALL/GOTO includes 11 bit literal Variable declarations cblock <start_address>: start of variable declarations All names between cblock/endc directives assigned to consecutive bytes starting at <start_address> 10/27/2017 Microprocessors I: Lecture 10

Microprocessors I: Lecture 10 10/27/2017 Microprocessors I: Lecture 10

Review: PIC instructions (cont.) Clearing register: clrw/clrf Moving values: movlw/movwf/movf Swap nibbles: swapf Single bit manipulation: bsf/bcf Unary operations: incf/decf/comf Arithmetic: addlw/addwf/sublw/subwf 10/27/2017 Microprocessors I: Lecture 10

Review: PIC instructions (cont.) Logical operations andlw/andwf iorlw/iorwf xorlw/xorwf Rotates rrf rlf Jumps/calls/return goto call return/retlw/retfie Miscellaneous nop sleep/clrwdt Conditional execution Test bit and skip next instruction if clear/set: btfsc/btfss Increment/decrement register and skip next instruction if zero: incfsz/decfsz Example use: combined with goto to create conditional jump 10/27/2017 Microprocessors I: Lecture 10

Review: A Delay Subroutine 10/27/2017 Review: A Delay Subroutine ; *********************************************************************************** ; TenMs subroutine and its call inserts a delay of exactly ten milliseconds ; into the execution of code. ; It assumes a 4 MHz crystal clock. One instruction cycle = 4 * Tosc. ; TenMsH equ 13 ; Initial value of TenMs Subroutine's counter ; TenMsL equ 250 ; COUNTH and COUNTL are two variables TenMs nop ; one cycle movlw TenMsH ; Initialize COUNT movwf COUNTH movlw TenMsL movwf COUNTL Ten_1 decfsz COUNTL,F ; Inner loop goto Ten_1 decfsz COUNTH,F ; Outer loop goto Ten_1 return 10/27/2017 Microprocessors I: Lecture 10 Chapter 9

Review: Strategy to “Blink” The LEDs are toggled in sequence - green, yellow, red, green, yellow, red… Let’s look at the lower three bits of PORTD 001=green, 010=yellow, 100=red The next LED to be toggled is determined by the current LED. 001->010->100->001->… 10/27/2017 Microprocessors I: Lecture 10

Microprocessors I: Lecture 10 “Blink” Subroutine Blink btfsc PORTD, 0 ; is it Green? goto toggle1 ; yes, goto toggle1 btfsc PORTD, 1 ; else is it Yellow? goto toggle2 ; yes, goto toggle2 ;toggle0 bcf PORTD, 2 ; otherwise, must be red, change to green bsf PORTD, 0 ; 100->001 return toggle1 bcf PORTD, 0 ; change from green to yellow bsf PORTD, 1 ; 001->010 toggle2 bcf PORTD, 1 ; change from yellow to red bsf PORTD, 2 ; 010->100 10/27/2017 Microprocessors I: Lecture 10

Another way to code “Blink” ---- Table Use movf PORTD, W ; Copy present state of LEDs into W andlw B'00000111' ; and keep only LED bits addwf PCL,F ; Change PC with PCLATH and offset in W retlw B'00000001' ; (000 -> 001) reinitialize to green retlw B'00000011' ; (001 -> 010) green to yellow retlw B'00000110' ; (010 -> 100) yellow to red retlw B'00000010' ; (011 -> 001) reinitialize to green retlw B'00000101' ; (100 -> 001) red to green retlw B'00000100' ; (101 -> 001) reinitialize to green retlw B'00000111' ; (110 -> 001) reinitialize to green retlw B'00000110' ; (111 -> 001) reinitialize to green In calling program call BlinkTable ; get bits to change into W xorwf PORTD, F ; toggle them into PORTD 10/27/2017 Microprocessors I: Lecture 10

Microprocessors I: Lecture 10 Final notes Next time Exam 3, Monday, 8/13 Reminders Lab 4 due today HW 3 due Friday, 8/10 Do not do problem 2j (JL instruction) Turn in to my office by 1:45, or e-mail Exam 2 regrade requests due Monday, 8/13 Lab 5 due Tuesday, 8/14 Same turn-in procedure as HW 3 10/27/2017 Microprocessors I: Lecture 10

Microprocessors I: Lecture 10 References Myke Predko, "Programming and Customizing PICmicro Microcontrollers" 2nd Ed, McGrawHill, 2002, ISBN 0-07-136172-1 R. Laidman, Stepper Motors and Control, Part II - Bipolar Stepper Motor and Control, http://www.stepperworld.com/Tutorials/pgBipolarTutorial.htm D. Jones, Stepping Motor Types, http://www.cs.uiowa.edu/~jones/step/types.html 10/27/2017 Microprocessors I: Lecture 10