Robotics Research Laboratory Louisiana State University
What is the definition of a robot for computer scientist? Explain why a common toaster is not a robot In what way the reasons for this are similar to those for a simple light-switch not being a robot?
uint8_t: 1 Byte 0 ~ 255( = ) uint16_t: 2 Bytes 0 ~ 65535( = 2 16 – 1) uint32_t: 4 Bytes 0 ~ char: 1 Byte int: 2 Byte ~ 32767(-2 15 ~ ) double: 4 Bytes float: 4 Bytes *: pointer-indicator int[], int[][], … : Arrays; similarly for char, double, etc.
if ( … ) { … } if ( … ) { … } else { … } switch ( … ) { case 0: … ; break; case 1: … ; break; … case 7: …; break; } for ( … ; … ; … ) { … } while ( … ) { … } do { … } while ( … )
#include a library provided by avrc-compiler #include “yourLibrary.h” your library void yourFuction(void); Declare prototype functions first int main(){ main of the program InitHardware(); initialize hardware while (1) { One main while loop yourFunction(); call the declared function } void yourFuction(){ … } functions
LED (Light Emitting Diode) 3x3 LED matrix + - COL3 ROW1 ROW2 ROW3 OFFON OFF ON OFF ON COL1COL2 What happen in LED with below connection? + - What combination of outputs on cols/rows can make only led5 ON? What happen in LED with below connection? + - LED ON What happen in LED with below connection? + +
Hexa-decimalBinaryDecimal 0x00b x10b x20b x30b x40b x50b x60b x70b x80b x90b xA0b xB0b xC0b xD0b xE0b xF0b x6C0b
PORT: collection of 8 pins for communication between microprocessor and other devices PORT control register ◦ PINx : to read the values of the pins in PORTx, pins: if (PINx == 0x31)... ◦ PORTx : to assign v alues to the pins in PORTx, PORTx = 0x31 PINx = 0x31 is meaningless ◦ DDRx : Controls the Input/Output specification of pins in PORTx ( 0 intput, 1 output)
DDRA: 0x0F in in in in out out out out PINA : 0x36 (48) LED4 LED3 LED2 LED1 Button4 Button3 Button1 Button2 PIN 0 ~ 3 : Output (LED), PIN 4 ~ 7 : Input (Button) PORTA: 0xF GND
ICR3 = 40000u;// input capture register TCNT3 = 0;// interrupt flag register // Set the WGM mode & prescalar TCCR3A = ( 1 << WGM31 ) | ( 0 << WGM30 ) |// timer control register ( 1 << COM3A1 ) | ( 1 << COM3B1 ) | ( 1 << COM3C1 ); TCCR3B = ( 1 << WGM33 ) | ( 1 << WGM32 ) | // timer control register TIMER3_CLOCK_SEL_DIV_8; DDRE |= (( 1 << 3 ) | ( 1 << 4 ) | ( 1 << 5 ));// I/O control register uint16_t count = 0; while (1){ OCR3A = count++;// 0 ~ (pulse width), PINE3 us_spin(200); }
#define MOTOR_IN1_PIN 0 #define MOTOR_IN1_MASK (1 << MOTOR_IN1_PIN) #define MOTOR_IN1_DDRDDRF #define MOTOR_IN1_PORTPORTF #define MOTOR_IN2_PIN 1 #define MOTOR_IN2_MASK (1 << MOTOR_IN2_PIN) #define MOTOR_IN2_DDRDDRF #define MOTOR_IN2_PORTPORTF #define MOTOR_STANBY_PIN 1 #define MOTOR_STANBY_MASK (1 << MOTOR_STANBY_PIN) #define MOTOR_STANBY_DDRDDRF #define MOTOR_STANBY_PORTPORTF #define MOTOR_PWMOCR3A pwm_init(); PWM initialization DDRF = 0xFF all pins in PORTF are outputs PORTF = 0x00 pull down for all outputs MOTOR_PWM = 10000; pwm signal is MOTOR_STANBY_PORT |= MOTOR_STANBY_MASK; STBY : high MOTOR_STANBY_PORT |= (MOTOR_IN1_MASK | MOTOR_IN1_MASK ); IN1 : high, IN2 : high (Short brake) MOTOR_STANBY_PORT &= ~ (MOTOR_IN1_MASK | MOTOR_IN1_MASK ); IN1 : low, IN2 : low (Short brake) MOTOR_STANBY_PORT |= MOTOR_IN1_MASK; MOTOR_STANBY_PORT &= ~MOTOR_IN1_MASK; IN1 : high, IN2 : low (CCW) MOTOR_STANBY_PORT &= ~MOTOR_IN1_MASK; MOTOR_STANBY_PORT |= MOTOR_IN1_MASK; IN1 : low, IN2 : high (CW)