gpio with the arduino

31

Upload: wingston-sharon

Post on 24-Apr-2015

1.197 views

Category:

Documents


5 download

DESCRIPTION

This document focuses on basic General Purpose input output with the arduino.

TRANSCRIPT

Page 1: GPIO With the Arduino
Page 2: GPIO With the Arduino

Signals

0 Information is transferred in the digital/analogue world by signals.

0 Electrical Signals are given a logic equivalency to enable control and sensing from the physical universe.

0 1 == High == True == 3-5V

0 0 == Low == False == 0-2V

0 And thus the binary number system was born.

Page 3: GPIO With the Arduino

Digital and Analogue information

0 Signals can be defined as any time varying quantity that can be said to represent information.

0 Digital signals, at any given point of time take up only one of a few discrete predefined states.

0 Analogue signals are not restricted to any particular state but continuously changes itself w.r.t. time.

Page 4: GPIO With the Arduino

Hardware communication

0 Every electronic system will have two logic levels called VCC and GND.

0 Analogue signals in this can take any value between VCC and GND.

0 Digital Signals can only take the states of VCC and GND states.

0 Digital devices either control or respond to either VCC or GND.

Page 5: GPIO With the Arduino

Ports

0 A microcontroller can digitally communicate with the outside world through Ports.

0 Every microcontroller has its own PORTs controlled by specific port registers.

0 Ports are a collection of PINS on the microcontroller.

0 Each pin can be controlled digitally by the microcontroller.

Page 6: GPIO With the Arduino

PORTS on the arduino

0 The atmega328 has three ports

0 B (digital pin 8 to 13)

0 C (analog input pins)

0 D (digital pins 0 to 7)

0 Each Port has a

0 PORTx register that controls the value of the port.

0 DDRx register that controls the port from output/input mode.

Page 7: GPIO With the Arduino

Digital Pins

0 Numbered 1 – 13 on the ardiono.

0 Can be set to Input/Output by pinMode(pin) function.

0 Can be set to output by digitalwrite(pin, state) function.

0 digitalread(pin) returns the state of the pin.

Page 8: GPIO With the Arduino

Digital PIN as output

0 The pin is in a state of low impedance.

0 This means the pin can supply current to other circuits. (40mA)

0 Shorts or attempting to draw more current can damage the transistors on that pin (or fry the board).

0 Use resistors to limit current from the pins. (1-10kohms)

Page 9: GPIO With the Arduino

LEDs

0 Light Emitting diode.

0 Use R = (VS - VL) / I to calculate the resistor value to put in series. 0 Vs = 5V; VL = 2V (depends on color)

0 I = 40mA (max current required)

0 Do not connect LEDs in parallel!!

0 The longer end is VCC and the shorter end is GND.

Page 10: GPIO With the Arduino

PIN13 on the Arduino

0 The arduino has an LED + resistor mounted on the board.

0 Open the program in folder 1. Blink in the arduino IDE.

0 Upload that program onto the board.

0 Watch blinky!

0 Can you make it blink faster?

0 Then slower?

Page 11: GPIO With the Arduino

Connecting External LED

0 Open folder 2.LED Breadboard

0 Connect LEDs as shown in the circuit diagram.

0 Avoid connecting multiple LEDs to a single PIN.

0 If the PIN is HIGH the LED will light up.

Page 12: GPIO With the Arduino
Page 13: GPIO With the Arduino

Digital Input

0 Digital Input can be sensed by all digital pins of the arduino.

0 Pins when set up as inputs are said to be in a High impedance state.

0 Which means they tend to draw very little current from the circuit they are sensing and that means that small changes in current are enough to change the state of the PIN.

0 If an input pin is left unconnected: 0 State may change randomly 0 Pin may capacitively couple & report the state of a nearby pin.

Page 14: GPIO With the Arduino

Switches

0 Switches are mechanical devices that “switch” between VCC and GND states.

Page 15: GPIO With the Arduino

Switching states

0 We need to switch between VCC and GND to use with digitalread().

0 But, tactile switches can only open and close circuits.

0 In each of the cases, if switch is pressed, the PIN goes into a state, when released the PIN is disconnected or in a random state.

Page 16: GPIO With the Arduino

Enter Pull-down resistors

0 Using these resistors (10kohms) provide both states with a single push button switch.

0 When unpressed, the PIN state will read the GND state through the pull-down resistor. (the Resistor pulls the pin to GND when no i/p is present)

0 When pressed, the switch will read the VCC because it is the path of least resistance.

0 If VCC and GND are swapped in the diagram, the resistor is called a Pull-up resistor with reversal in logic levels.

Page 17: GPIO With the Arduino

Reading a switch

0 Open 3. LED_Switch folder.

0 Connect switch + resistor and LED + resistor circuits from the breadboard as shown.

0 Run Switch 1.pde on the arduino IDE and upload it onto the arduino.

Page 18: GPIO With the Arduino
Page 19: GPIO With the Arduino

Code

0 Switch is read using digital read. This will return either 1 or 0. (HIGH / LOW).

0 This is stored in a variable.

0 LED is set to that variable.

0 So if switch is pressed, 1 is sensed and LED is set to 1. 0 When switch is released, 0 is sensed and LED turns off.

0 Voila!! LED is controlled by a switch.

Page 20: GPIO With the Arduino

Interrupts

0 Interrupts are signals that indicate to the microcontroller that a particular event has occurred.

0 Internal 0 Divide by 0 interrupts

0 Timer interrupts

0 ADC interrupts

0 External 0 Pin 2 & 3

Page 21: GPIO With the Arduino

External Interrupt

0 Pin 2 and 3 are set up for external interrupts.

0 Allow the arduino to continue doing tasks intstead of continuosly checking for external signal changes.

0 INT0 is on pin2 and INT1 is on pin3

0 Use attachinterrupt() to associate interrupts to a function.

Page 22: GPIO With the Arduino

attachInterrupt(interrupt, function, mode)

0 Interrupt: can be either 0 or 1 signifing which interrupt is being set up.

0 Function : is the name of the function to be called when the interrupt fires.

0 Mode: 0 LOW to trigger the interrupt whenever the pin is low, 0 CHANGE to trigger the interrupt whenever the pin changes

value 0 RISING to trigger when the pin goes from low to high, 0 FALLING for when the pin goes from high to low.

Page 23: GPIO With the Arduino

The ISR

0 The interrupt service routine is the function that is called every time the interrupt fires.

0 Delay() and millis() are not supported inside an ISR.

0 Serial data received might be lost when the ISR returns.

0 All variables that get modified within the ISR must be volatile.

Page 24: GPIO With the Arduino

#include <avr/interrupt.h> int ledPin = 12; volatile int state = LOW; void setup() { Serial.begin(9600); pinMode(12, OUTPUT); attachInterrupt(0, blink, FALLING); } void loop() { digitalWrite(ledPin,state); } void blink(){ state = !state; }

Page 25: GPIO With the Arduino

Remember

0 Make sure there are no loose connections on the breadboard.

0 Make sure you’ve gotten the upload successful message on the IDE.

0 Make sure switch GND, LED’s GND and arduino’s GND are one.

0 Don’t dismantle your circuits after completion.

Page 26: GPIO With the Arduino

Communication

0 Information is also transferred from arduino to computer by setting a pin HIGH or LOW in sucession to create a data waveform.

0 Each of this ‘1’s and ‘0’s are called as “bits”.

0 Because the data is transferred one after another on the same line, it is called serial transfer of data.

0 Kinda simillarish to morse code.

Page 27: GPIO With the Arduino

TX and RX pins

0 These pins light up when serial data is transmitted or received.

0 In the Arduino, the serial port goes through the FTDI chip and is converted to USB.

0 Pins 0 & 1 are the serial pins and serial data can be tapped from these pins.

0 Don’t use these pins for GPIO during serial transfers.

Page 28: GPIO With the Arduino

Baud rate

0 Baud rate is the unit of symbol rate.

0 A baud rate of 1 kBd = 1,000 Bd is synonymous to a symbol rate of 1,000 symbols per second.

0 In binary, a symbol is either a ‘1’ or ‘0’.

0 In serial communication systems, both the receiving machine and the transmitting system should be set to the same baud rate. (9600/11500 usually)

Page 29: GPIO With the Arduino

usage

0 In setup(){ } put serial.begin(9600);

0 In loop, use serial.println(data)

0 Open serial monitor to see data.

Page 30: GPIO With the Arduino

Serial Program

0 Open the folder 4. Serial and upload the arduino with the code.

0 The program prints numbers from 1-100 sequentially.

0 Use the serial monitor on the Arduino to see the stream.

0 Any program can open the COMx port associated with your arduino and read data transmitted by the arduino.

Page 31: GPIO With the Arduino

Question Time