3/23/2015 Richard Kuo Assistant Professor

Slides:



Advertisements
Similar presentations
1 ECE 372 – Microcontroller Design Parallel IO Ports - Outputs Parallel IO Ports E.g. Port T, Port AD Used to interface with many devices Switches LEDs.
Advertisements

Programmable Interval Timer
Programmable Keyboard/ Display Interface: 8279
TK2633 Introduction to Parallel Data Interfacing DR MASRI AYOB.
Graphic Symbol Location 1. DIN Terminal X52 The machine is powered by electricity using copper cable with 5 wires (3 phase wires + neutral wire +
ECE 265 – LECTURE 13 Interface to switches and LEDs 7/3/ ECE265.
Electrical Engineering 1 WISE Investments Electrical Engineering Lab Digital Logic Laboratory Dr. Keith Holbert.
Embedded Programming and Robotics
ASPPRATECH.
Department of Electrical Engineering, National Taiwan Ocean University NuMicro Learning Board Introduction 1/29/2015 Richard Kuo Assistant.
Network and Systems Laboratory nslab.ee.ntu.edu.tw.
Pulse Width Modulation
Project Futura.
2/26/2015 Richard Kuo Assistant Professor
I/O devices Peripheral devices (also called I/O devices) are pieces of equipment that exchange data with a CPU Examples: switches, LED, CRT, printers,
1 ARM University Program Copyright © ARM Ltd 2013 General Purpose I/O.
Department of Electrical Engineering, National Taiwan Ocean University Pulse Width Modulation 4/25/2013 Richard Kuo Assistant Professor.
Department of Electrical Engineering, National Taiwan Ocean University Motor Control 5/2/2013 Richard Kuo Assistant Professor.
Department of Electrical Engineering, National Taiwan Ocean University C Programming 3/14/2013 Richard Kuo Assistant Professor.
NuMicro MCU Learning Board Introduction
1 ARM University Program Copyright © ARM Ltd 2013 General Purpose I/O.
UART: Universal Asynchronous RX/TX
Department of Electrical Engineering, National Taiwan Ocean University Appendix – NUC140 pin assignment 9/29/2012 Richard Kuo Assistant.
Cortex-M0 MCU Interface and Driver Design - Course Overview
Instrumentation & Control Engg. Section Electrical Engineering Department Ahmedabad , Gujarat.
Franz Duran INTRODUCTION TO A RDUINO PROGRAMMING & INTERFACING Engr. Franz Duran, MEP-ECE RapidSignal Electronics.
Department of Electrical Engineering, National Taiwan Ocean University Basic Electronics 2/4/2015 Richard Kuo Assistant Professor.
Department of Electrical Engineering, National Taiwan Ocean University NuMicro MCU Learning Board SDK Installation 1/29/2015 Richard.
8279 KEYBOARD AND DISPLAY INTERFACING
Advanced Digital Circuits ECET 146 Week 9 Professor Iskandar Hack ET 221G,
ECS642U Embedded Systems Cyclic Execution and Polling William Marsh.
Xtreme Robot Olympiad Programming Basics Dr. Peter Laz Associate Professor Department of Engineering University of Denver.
Input Interface – Microprocessor
8279 KEYBOARD AND DISPLAY INTERFACING
1-3 GPIO_Output(LuminaryLibrary) 1.Alter the output current to 4mA 2.Let LED0 turn on but LED 1 turn off. Modify your program in E:\yourname\arm.
General Purpose Input/Output
CSCI1600: Embedded and Real Time Software Lecture 16: Advanced Programming with I/O Steven Reiss, Fall 2015.
UNIT 7 - INTRODUCTION TO I/O INTERFACING. TWO MAJOR TYPES OF I/O INTERFACING ISOLATED I/O - DEDICATED I/O INSTRUCTIONS ARE USED TO ACCESS I/O DEVICES.
Alpha/Numeric Keypad Functions using AVR Preliminary Design Review Luke R. Morgan ECE /17/2008.
PRESENTATION ON THE TOPIC By: Rahul agarwal. INTRODUCTION  Overload protection circuit are required in inverters and uninterrupted power supplies to.
Arduino Mega Arduino Mega 2560 Arduino Mega 2560.
Department of Electronic & Electrical Engineering Combination Lock. Plan. Demo. Brief Report. Code.
AAPT workshop W03 July 26, 2014 Saint Cloud State University, MN, USA
GOVERNMENT POLYTECHNIC RAJKOT 1 NAMEEN.NO. TADVI PRAGNESH A PATEL ANKIT D PATEL VIRAL S PATEL JAYESH M
MICROCONTROLLER INTERFACING WITH STEPPER MOTOR MADE BY: Pruthvirajsinh Jadeja ( ) COLLEGE:DIET BRANCH:EC.
KEYBOARD/DISPLAY CONTROLLER - INTEL Features of 8279 The important features of 8279 are, Simultaneous keyboard and display operations. Scanned keyboard.
FOR MORE CLASSES VISIT   ECET 340 Week 1 HomeWork 1  ECET 340 Week 1 iLab 1  ECET 340 Week 2 HomeWork 2  ECET 340 Week 2 iLab.
WATER LEVEL INDICATOR AND AUTOMATIC MOTOR SWITCHING SYSTEM
Application Case Study Christmas Lights Controller
8255 Programmable Peripheral Interface
Outline Introduction to NuMaker TRIO Programming environment setup
Serial Peripheral Interface
CS4101 嵌入式系統概論 General Purpose IO
Peripherals – Keypad The Keypad provides a simple means of numerical data or control input. The keys can be attributed whatever data or control values.
Home automation using Arduino & ‘PIR sensor’
Pulse Width Modulation
3/25/2017 Richard Kuo Assistant Professor
CS4101 Introduction to Embedded Systems Lab 10: Tasks and Scheduling
Cortex-M0 MCU Clocks & Pins
Analog-to-Digital Converter (ADC)
NuMicro MCU New Project Express Creation
CS4101 嵌入式系統概論 General Purpose IO
ECET 340 Competitive Success/snaptutorial.com
ECET 340 Education for Service-- snaptutorial.com.
EE Embedded Systems Fall 2015
Interfacing a Rotary Encoder with an Arduino
CS4101 Introduction to Embedded Systems Lab 2: Basic IO and Timer
UNIT 9 Relays.
A modular robot for use in the RoboSumo lab
Presentation transcript:

3/23/2015 Richard Kuo Assistant Professor NuMicro GPIO 3/23/2015 Richard Kuo Assistant Professor

Outline 4.NuMicro_GPIO.ppt Homework : LED Cube 3x3x3 GPIO Interface Introduction Lab. LED control (smpl_GPIO_LED1, smpl_GPIO_RGBled) Lab. Buzzer control (smpl_GPIO_Buzzer) Lab. Sensor input (smpl_GPIO_PIR) Lab. 7-segment Display (smpl_7seg) Lab. Keypad scanning (smpl_Keypad) Lab. Step Motor control (smpl_GPIO_StepMotor) Lab. GPIO Interrupt (smpl_GPIO_IRQ) Homework : LED Cube 3x3x3 Homework : Electronic Safe

Peripherals To use GPIO to access the following components/modules LEDs Buzzer IR PIR Relays Step Motor Keypad

GPIO I/O Modes Input only with high impedance Push-Pull Output Set GPIOx_PMD (PMDn[1:0]) to 00b the GPIOx port [n] pin is in Input mode and the I/O pin is in tri-state (high impedance) without output drive capability Push-Pull Output Open-Drain Quasi bi-direction

StdDriver/GPIO_OutputInput Set I/O Mode GPIO_SetMode(PA, BIT12, GPIO_PMD_OUTPUT); GPIO_SetMode(PB, BIT1, GPIO_PMD_INPUT); I/O groups : M051 = P0, P1, P2, P3, P4 Nano102 = PA, PB, PC, PD, PE, PF NUC140 = GPA, GPB, GPC, GPD, GPE port no = BIT0~15 I/O modes GPIO_PMD_INPUT : input only mode GPIO_PMD_OUTPUT : push-pull output mode GPIO_PMD_OPENDRAIN : open-drain output mode GPIO_PMD_QUASI : quai bi-direction mode Output value : PA12 = 0; Read Input : if (PA12 !=0) { }

LED schematic (Nu-LB-NUC140)

LED PC12 GPIO_SetMode(PC, BIT12, GPIO_PMD_OUTPUT);

smpl_GPIO_LED1 Initialize Clocks & Pins Output Mode int main(void) { SYS_Init(); GPIO_SetMode(PC, BIT12, GPIO_PMD_OUTPUT); while(1) { PC12 =0; // turn on LED CLK_SysTickDelay(100000); // Delay PC12 =1; // turn off LED } Initialize Clocks & Pins Output Mode

PIR (Passive InfraRed) sensor

PIR (Passive InfraRed) schemiatc

PIR (Passive InfraRed) application circuit 5~9V Battery

smpl_GPIO_PIR display Detection message Passive Infrared Detector detecting human body

smpl_GPIO_PIR Input Mode int main(void) { SYS_Init(); GPIO_SetMode(PA, BIT0, GPIO_PMD_INPUT); while(1) { if (PA0==1) printf("PIR detected!\n"); else printf("PIR no detection!\n"); } Input Mode

Reflective Optical Sensor : TCRT5000 Application Circuit Picture 220 IR Diode keep emitting Infrared light IR Transistor receive the reflective Infrared light Top View

Buzzer schematic (Nu-LB-NUC140) 0 ohm

smpl_GPIO_Buzzer void Init_Buzzer(void) { GPIO_SetMode(PB, BIT11, GPIO_PMD_OUTPUT); PB11=1; // turn off Buzzer } void Buzz(int number) int i; for (i=0; i<number; i++) { PB11 =0; // turn on Buzzer CLK_SysTickDelay(100000); // Delay PB11 =1; // turn off Buzzer

7-segment display

7seg. LED schematics (Nu-LB-NUC140) Drive Low will turn on 7-seg. LED

Seven_Segment.c #include <stdio.h> #include "NUC100Series.h" #include "GPIO.h" #include "SYS.h" #include "Seven_Segment.h" #define SEG_N0 0x82 #define SEG_N1 0xEE #define SEG_N2 0x07 #define SEG_N3 0x46 #define SEG_N4 0x6A #define SEG_N5 0x52 #define SEG_N6 0x12 #define SEG_N7 0xE6 #define SEG_N8 0x02 #define SEG_N9 0x62 #define SEG_N10 0x22 #define SEG_N11 0x1A #define SEG_N12 0x93 #define SEG_N13 0x0E #define SEG_N14 0x13 #define SEG_N15 0x33 unsigned char SEG_BUF[16]={SEG_N0, SEG_N1, SEG_N2, SEG_N3, SEG_N4, SEG_N5, SEG_N6, SEG_N7, SEG_N8, SEG_N9, SEG_N10, SEG_N11, SEG_N12, SEG_N13, SEG_N14, SEG_N15}; void OpenSevenSegment(void) { GPIO_SetMode(PC, BIT4, GPIO_PMD_OUTPUT); GPIO_SetMode(PC, BIT5, GPIO_PMD_OUTPUT); GPIO_SetMode(PC, BIT6, GPIO_PMD_OUTPUT); GPIO_SetMode(PC, BIT7, GPIO_PMD_OUTPUT); PC4=0; PC5=0; PC6=0; PC7=0; GPIO_SetMode(PE, BIT0, GPIO_PMD_OUTPUT); GPIO_SetMode(PE, BIT1, GPIO_PMD_OUTPUT); GPIO_SetMode(PE, BIT2, GPIO_PMD_OUTPUT); GPIO_SetMode(PE, BIT3, GPIO_PMD_OUTPUT); GPIO_SetMode(PE, BIT4, GPIO_PMD_OUTPUT); GPIO_SetMode(PE, BIT5, GPIO_PMD_OUTPUT); GPIO_SetMode(PE, BIT6, GPIO_PMD_OUTPUT); GPIO_SetMode(PE, BIT7, GPIO_PMD_OUTPUT); PE0=0; PE1=0; PE2=0; PE3=0; PE4=0; PE5=0; PE6=0; PE7=0; }

Seven_Segment.c switch(i) { void ShowSevenSegment(unsigned char no, unsigned char number) { unsigned char temp,i; temp=SEG_BUF[number]; for(i=0;i<8;i++) { if((temp&0x01)==0x01) switch(i) { case 0: PE0=1; break; case 1: PE1=1; break; case 2: PE2=1; break; case 3: PE3=1; break; case 4: PE4=1; break; case 5: PE5=1; break; case 6: PE6=1; break; case 7: PE7=1; break; } else switch(i) { case 0: PE0=0; break; case 1: PE1=0; break; case 2: PE2=0; break; case 3: PE3=0; break; case 4: PE4=0; break; case 5: PE5=0; break; case 6: PE6=0; break; case 7: PE7=0; break; } temp=temp>>1; switch(no) { case 0: PC4=1; break; case 1: PC5=1; break; case 2: PC6=1; break; case 3: PC7=1; break;

Seven_Segment.c void CloseSevenSegment(void) { PC4=0; PC5=0; PC6=0; }

4x4 Keypad

3x3 Keypad schematic (Nu-LB-NUC140)

Keypad GPIO setting GPIO pin mode : Input GPIO_SetMode(PA, BIT0, GPIO_PMD_QUASI); Key press will connect output pin to input pin Quasi output 1 : pin is floating Quasi output 0 : pin drive to Low Keypad scanning Set input pins PA3,4,5 to 1 Set output pins to 0 one at a time PA0,1,2 PA3=1; PA4=1; PA5=1; PA0=1; PA1=1; PA2=0; if (PA3==0) return 1; if (PA4==0) return 4; if (PA5==0) return 7;

Scankey.c void OpenKeyPad(void) { GPIO_SetMode(PA, BIT0, GPIO_PMD_QUASI); GPIO_SetMode(PA, BIT1, GPIO_PMD_QUASI); GPIO_SetMode(PA, BIT2, GPIO_PMD_QUASI); GPIO_SetMode(PA, BIT3, GPIO_PMD_QUASI); GPIO_SetMode(PA, BIT4, GPIO_PMD_QUASI); GPIO_SetMode(PA, BIT5, GPIO_PMD_QUASI); } uint8_t ScanKey(void) { PA0=1; PA1=1; PA2=0; PA3=1; PA4=1; PA5=1; if (PA3==0) return 1; if (PA4==0) return 4; if (PA5==0) return 7; PA0=1; PA1=0; PA2=1; PA3=1; PA4=1; PA5=1; if (PA3==0) return 2; if (PA4==0) return 5; if (PA5==0) return 8; PA0=0; PA1=1; PA2=1; PA3=1; PA4=1; PA5=1; if (PA3==0) return 3; if (PA4==0) return 6; if (PA5==0) return 9; return 0; }

smpl_7seg_Keypad Scankey.c : function calls for scanning keypad 3x3 7-segment display number = 5 Press middle key of 3x3 keypad Scankey.c : function calls for scanning keypad 3x3

smpl_GPIO_Keypad Vcc/Gnd Press key Using GPIO outputs to control relays GPIOs control 4-port Relay

smpl_GPIO_Keypad Press key1 Press key2 Press key3 Press key4 Relay #1 off Relay #2 off Relay #3 off Relay #4 off Vcc = 3.3V, GPIO output hi (base)  Relay Control pin = low (collector)

Smpl_GPIO_Keypad int main(void) { uint32_t i =0; SYS_Init(); OpenKeyPad(); Init_GPIO(); while(1) i=ScanKey(); switch(i) { case 1 : PB0=1; break; case 2 : PB1=1; break; case 3 : PB2=1; break; case 4 : PB3=1; break; default: PB0=0; PB1=0; PB2=0; PB3=0; break; }

8x8 LED Matrix N1588 MAX7219

MAX7219.c // // MAX7219 Driver : drive 8x8 LEDs #include <stdio.h> #include "NUC100Series.h" #include "SYS.h" #include "GPIO.h" // Define GPA2,1,0 as CLK, CS, DIN pins #define CLK_HI PA2=1 #define CLK_LO PA2=0 #define CS_HI PA1=1 #define CS_LO PA1=0 #define DIN_HI PA0=1 #define DIN_LO PA0=0 void Init_GPIO(void) { GPIO_SetMode(PA, BIT0, GPIO_PMD_OUTPUT); GPIO_SetMode(PA, BIT1, GPIO_PMD_OUTPUT); GPIO_SetMode(PA, BIT2, GPIO_PMD_OUTPUT); PA0=0; PA1=0; PA2=0; } void WriteData_MAX7219(uint8_t DATA) uint8_t i; CS_LO; for(i=8;i>=1;i--) { CLK_LO; if (DATA&0x80) DIN_HI; else DIN_LO; DATA=DATA<<1; CLK_HI; CLK_SysTickDelay(10);

MAX7219.c void write_MAX7219(uint8_t address,uint8_t dat) { CS_LO; WriteData_MAX7219(address); WriteData_MAX7219(dat); CS_HI; } void Init_MAX7219(void) write_MAX7219(0x09, 0x00); write_MAX7219(0x0a, 0x03); write_MAX7219(0x0b, 0x07); write_MAX7219(0x0c, 0x01); write_MAX7219(0x0f, 0x00);

smpl_GPIO_LED8x8 int main(void) { uint8_t i,j; SYS_Init(); Init_GPIO(); Init_MAX7219(); while(1) { for(j=0;j<38;j++) { for(i=1;i<9;i++) write_MAX7219(i, Font8x8[j][i-1]); CLK_SysTickDelay(100000); }

GPIO Interrupt pin circuit MCU

GPIO Interrupt pin setting GPIO pin mode : Input GPIO_SetMode(PB, BIT12, GPIO_PMD_INPUT); GPIO pin chip internal Pull-up GPIO_ENABLE_PULL_UP(PB, BIT12); GPIO interrupt trigger type : rising/falling GPIO_EnableInt(PB, 12, GPIO_INT_FALLING); GPIO Interrupts : two groups = ABC or DEF NVIC_EnableIRQ(GPABC_IRQn); // ABC group share 1 interrupt to CPU NVIC_EnableIRQ(GPDEF_IRQn); // DEF group share 1 interrupt to CPU GPIO pin debouncing Debounce Clock Source = IRC10K or HCLK GPIO_SET_DEBOUNCE_TIME(GPIO_DBCLKSRC_IRC10K, GPIO_DBCLKSEL_64); GPIO_ENABLE_DEBOUNCE(PB, BIT12);

Initialize GPIO interrupt pins // KEY1 to PB12, KEY2 to PB13, KEY3 to PB14 void Init_KEY(void) { GPIO_SetMode(PB, (BIT12 | BIT13 | BIT14), GPIO_PMD_INPUT); GPIO_ENABLE_PULL_UP(PB, (BIT12 | BIT13 | BIT14)); GPIO_EnableInt(PB, 12, GPIO_INT_FALLING); GPIO_EnableInt(PB, 13, GPIO_INT_FALLING); GPIO_EnableInt(PB, 14, GPIO_INT_FALLING); NVIC_EnableIRQ(GPABC_IRQn); GPIO_SET_DEBOUNCE_TIME(GPIO_DBCLKSRC_IRC10K, GPIO_DBCLKSEL_64); GPIO_ENABLE_DEBOUNCE(PB, (BIT12 | BIT13 | BIT14)); }

GABC_IRQHandler volatile uint8_t KEY1_Flag = 0; void GPABC_IRQHandler(void) { if (PB->ISRC & BIT12) { // check if PB12 interrupt occurred PB->ISRC |= BIT12; // clear PB12 interrupt status KEY1_Flag=1; // set a flag for PB12(KEY1) } else if (PB->ISRC & BIT13) { // check if PB13 interrupt occurred PB->ISRC |= BIT13; // clear PB13 interrupt status KEY2_Flag=1; // set a flag for PB13(KEY2) } else if (PB->ISRC & BIT14) { // check if PB14 interrupt occurred PB->ISRC |= BIT14; // clear PB14 interrupt status KEY3_Flag=1; // set a flag for PB14(KEY3) } else { // else it is unexpected interrupts PB->ISRC = PB->ISRC; // clear all GPB pins }

smpl_GPIO_IRQ int32_t main() { SYS_Init(); Init_KEY(); printf("Testing KEY1/2/3 IRQ generation:\n"); while(1) { if (KEY1_Flag) { printf("KEY1/PB12 Interrupt!\n"); KEY1_Flag=0; } if (KEY2_Flag) { printf("KEY2/PB13 Interrupt!\n"); KEY2_Flag=0; } if (KEY3_Flag) { printf("KEY3/PB14 Interrupt!\n"); KEY3_Flag=0; } }

Stepping Motor Operation principle of stepper motor http://www.piclist.com/images/www/hobby_elec/e_step1.htm

Step Motor Driving Methods Four phase Step Motor : 4 phases are A, /A, B, /B Diving Method as left Wave Drive: single phase full step Full Step Drive : two phase full step Half Stepping : one/two phase half step Microstepping http://commons.wikimedia.org/wiki/File:Drive.png

5V Step Motor 28YBJ-48 步進電機 28YBJ-48 ULN2003 驅動IC

smpl_GPIO_Stepmotor 5V Step Motor Driver IC : TI ULN2003A Connections Motor A+ connected to INA of ULN2003A, controlled by NUC140 GPA3 Motor A- connected to INB of ULN2003A, controlled by NUC140 GPA2 Motor B+ connected to INC of ULN2003A, controlled by NUC140 GPA1 Motor B- connected to IND of ULN2003A, controlled by NUC140 GPA0 unsigned char CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //counter-clockwise sequence unsigned char CW[8] ={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //clockwise sequence

Stepping Control Port Step InA 1 InB InC InD Port Step InA 1 InB InC Clockwise : 0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08 Counter clockwise : 0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09 Port Step InA 1 InB InC InD Port Step InA 1 InB InC InD

smpl_GPIO_Stepmotor

Project : LED Cube 3x3x3 Ex.Video : http://youtu.be/jxIFTKsBAT0

LED Cube 3x3x3 schematic 1 1 1 2 2 2 3 3 3 PD0 PD1 PD2 PD3 PD4 PD5 PD6 PA0 PA1 PA2

Project : LED Cube 8x8x8 Ex. Video: http://youtu.be/6mXM-oGggrM

Project : Electronic Safe Ex.Video : http://youtu.be/PUKqQM0oIIo Samsung Door Lock

Electronic Safe : Functional Description Project Objectives To use Cortex-M0 learning board to control the electronic safe To study/trace the PCB & circuit of Electronic Safe To draw the flow chart & implement the firmware of MCU Functional Description Input six keycode by pressing 3x3 keypad Buzz when each keycode pressed Compared with passcode when six keycodes are entered If passcode equal to entered keycode, buzz few times and output to (drive electronic magnet) open the door SWInt button to change the passcode

print_LCD to clear code Flow Chart Start Init_RGBLED Init_Buzzer InitLock Init SWInt Setup HCLK i=0 OpenKeyPad Initial LCD Print 2 lines while(1) number=Scankey() number!=0 Y N i==4 print_LCD RGBLED(BLUE) Buzz(1) print_LCD RGBLED(GREEN) Buzz(3) OpenLock Keycode == passcode Y N RGBLED(RED) Buzz(2) CloseLock print_LCD to clear code i=0

Electronic Safe : Interface Circuit Vcc +6V (1.5V AA x4) Gnd Ground GPB15 GPA11 2N2222

Electronic Safe : Interface Circuit GPA12 +6V GPA13 GPA14 GPA15 2N2222 Gnd

Important Notice ! This educational material are neither intended nor warranted for usage in systems or equipment, any malfunction or failure of which may cause loss of human life, bodily injury or severe property damage. Such applications are deemed, “Insecure Usage”. Insecure usage includes, but is not limited to: equipment for surgical implementation, atomic energy control instruments, airplane or spaceship instruments, the control or operation of dynamic, brake or safety systems designed for vehicular use, traffic signal instruments, all types of safety devices, and other applications intended to support or sustain life. All Insecure Usage shall be made at user’s own risk, and in the event that third parties lay claims to the author as a result of customer’s Insecure Usage, the user shall indemnify the damages and liabilities thus incurred by using this material. Please note that all lecture and sample codes are subject to change without notice. All the trademarks of products and companies mentioned in this material belong to their respective owners.