Microcontrollers Instructor:Shuvra Das mechanical engineering department University of Detroit Mercy Flowchart of Mechatronic Systems Microprocessor Structure • CPU (Central Processing Units): to recognize and carry out program instructions • Memory: storage of data • I/O Devices: to handle communications between the computer and outside world • Buses:digital signals move from one part of the computer to another along buses. These could be track on a printed circuit board or wires in a ribbon cable (e.g.data bus, control bus, address bus). CPU • Consists of control unit, arithmetic/logic unit (ALU), and various registers. • The control unit manages the flow and manipulation of data. Determines timing and sequence of operations. • A clock circuit provides synchronization; • The ALU performs all arithmetic and logical computations on the data that have been transferred to appropriate registers. Registers • Accumulator: Temporary data storage. To read data the CPU needs to address the specific memory word. • E.g. when operating with two numbers only one is fetched at one time and stored in the accumulator. When the ALU operation is done the result is sent back to the accumulator. • Accumulator: Is involved in all data transfers. Registers • Status register: contains the status information about the latest operations. Usually a bit is associated with it and it is called a flag. • E.g. binary addition 101+110 = (1) 011 (leads to overflow and carries a 1 to the overflow)… this will raise a flag. • Program counter register, Memory address register, Instruction Register, General-purpose register, Stack pointer register. • The total number and types of registers depends on the microprocessor. Memory • Used for storing program, binary data, intermediate results from computations. • Memory units consist of cells that can store values 0 or 1. Storage cells are grouped together to store one word. • With a 4-bit address we can access 16 different memory units (with each perhaps holding 8 bits) • Size of a memory unit is specified in terms of the number of storage locations available; 1K is 210=1024. RAM • Random access memory (RAM) is an example of volatile memory; information stored in volatile memory is lost when power is disconnected. • In most cases, user programs can read from and write to RAM. • Temporary data is stored in RAM. Memory • ROM (read only memory) cannot be written to by a user program. ROM is often used to store look-up tables, and program code that will no longer be changed (such as operating systems) • PROM, EPROM, EAROM, EEROM are variations on this, which allow ROM to be programmed, and reprogrammed. • Most ROM's are programmed in such a way that the data they store are not lost when power is disconnected, so ROM is an example of non-volatile memory. Memory • EPROM: Erasable, Programmable ROM. The information is permanently stored by applying a voltage to the Integrated circuit. Ultraviolet light shined on the quartz window erases this memory. • EEPROM: Electrically erasable PROM, erasing happens through the application of an electric voltage. I/O Devices • Without input and output devices, the computational power of a digital computer has no meaningful contribution to automation and control. • Disk drives, monitors, and printers are examples of output devices. Keyboards, disk drives, and scanners are examples of input devices. Bus • These are the paths that data follow throughout the computer system. • Data need to be retrieved from memory into registers in the CPU, and the results of computation need to be transferred back to memory. • These data transfers take place along the bidirectional data bus. • The parallel and serial ports on a microcomputer are other examples of buses. Bus • The address bus carries the address of the memory location of data or a program instruction that has been requested by the control unit. • When a particular address is selected in the address bus only that location is open to the CPU. The CPU can only communicate with one location at one time. Bus • Many devices can use a single bus; hence it is important that the control unit keep track of which device is requesting use of the bus, and whether it is to receive or send data. Bus • Data bus is used to transport a word from CPU and memory or I/O. Word lengths used may be 4, 8, 16, 32, or 64. • An 8-bit data bus may consist of 8 separate copper tracks laid out on a printed circuit board, or it may connect to other devices through ribbon cables • Each wire carries a 0 or 1 signal • 8 bit microprocessors are very commonly used as microcontrollers. • For 8 bit processor the maximum number of values that can be transported is 28=256 Bus • Control bus is the means by which signals are sent to synchronize the separate elements. The system clock signals are carried by the control bus. These signals generate time intervals during which system operations can take place. The CPU can send control signals to other elements to indicate the type of operation being performed: • e.g. whether it needs to READ (receive) and WRITE (send) a signal. Vdd Data Bus clock CPU Microcontrollers memory ROM RAM EEPROM Control lines Vss I/OControl & Status Registers I/O data registers Input/Output ports Basic StampII Basic Stamp II processor: A. BS2 Hardware • The brain of the BS2 is a custom PIC16C57 microcontroller, which has been permanently programmed with the PBASIC2 instructions set. • When you run a program on BS2 it retrieves the information from a separate memory chip and interprets them and carries out the instruction. • PIC executes 5 million ins/sec. But PBASIC2 does 3k-4k ins./sec. Basic Stamp II processor: A. BS2 Hardware • 20 I/O pins, 16 are for general use, 2 can be used for serial communication, 2 are dedicated to interfacing with the memory chip. • P0-P15 interface with 5-volt logic (HIGH=5V, LOW=0V). • In input mode, the state (1 or 0) of the pin as determined by external circuitry can be read. In output mode, the pin is internally connected to either ground or 5V, depending on the programmer's preference. A. BS2 Hardware • BS2 has 32 bytes of RAM (random access memory). • Six bytes are reserved for input, output and direction control of the I/O pins, which leaves 26 bytes for storing variables. Memory chip • EEPROM- Used for program storage: non-volatile memory. Not lost due to power loss. • Can be written to and read from by program, but need to keep in mind that there is a limit to the number of times you can write to the EEPROM (about 10 million). • Also it takes a long time (as much as several millisecond) to write data to memory. Reset circuit • When power is interrupted or corrupted, the reset circuit shuts down the BS2 to prevent mistakes or lockup, either of which may be dangerous if using the BS2 to control heavy equipment. • When the voltage supply stabilizes, the program starts again at the beginning. Power supply • Voltage regulator accepts 5-15V and provides a constant 5V. Also allows for low-power modes (Sleep, End, Nap instructions). • Power supply can provide up to 50mA, BS2 needs 8mA when active. This means that some external circuitry can be driven without needing a separate supply. (Vdd = +5V, Vss = ground) B. Input/Output, Variables • RAM has 6 bytes (1 byte = 8 bits), reserved for managing the I/O pins. • The remaining 26 bytes are available for assigning variables. Fixed variables reside in a particular memory location. You are advised to use variables which are automatically allocated by PBASIC2. • Variables can be declared as bit, nib (nibble = 4 bits), byte (8 bits), word (16 bits). B. Input/Output, Variables • Declaring as bit means the variable can take on values of 0 or 1. • If declared as nib, the value can be in the range from 0 to 15. Byte variables can range from 0 to 255 and word variables from 0 to 65535. • In general, use the smallest size that will adequately represent the value you need (due to 26-byte limit on memory.) (Arrays can also be declared, but are not discussed here.) B. Input/Output, Variables • Variable modifiers allow us to look at certain bits of a variable. For example, RESULT.LOWBIT refers to the least significant bit of the variable RESULT. Other modifiers include, lowbyte, highbyte, nib0, nib1, bit0, bit15, etc… • You can declare constants in PBASIC2. For example, if we wish the baud rate of the serial output to always be 9600, we may wish to store 9600 as a constant named BAUD. We need only change it in the declaration line. Serial host interface • This interface used for downloading program from a host PC (BS2 has no keyboard - programming happens on PC, then is downloaded to the EEPROM, via serial cable from the PC's serial port to the 9-pin connector on STAMP2 carrier board. Commonly used commands in BS2 programming Debug • Allows you to display variable, constants, or expression values while program is running in order to follow program flow (debugging). • Example: X = 75 DEBUG X Displays x = 75 on the screen. End • End the program, placing the BASIC Stamp into low power mode indefinitely. GOSUB • Syntax : GOSUB <SubroutineName> • Make the execution of the program jump to the point of the subroutine specified by the subroutine name, after storing the address of the instruction next to GOSUB. The execution comes back to the instruction next to the GOSUB after finishing the subroutine by the RETURN instruction. • Example: GOSUB MyRoutine ……… ………. Myroutine : ------------------RETURN RETURN • Syntax: RETURN • Return the execution from a subroutine to the statement following the call of the subroutine of this RETURN. PULSOUT • Syntax: PULSOUT <Pin>, <Period> • Generate a pulse on Pin with a width of Period. • In BS2 PULSOUT works on units of 2 micro seconds. • Example: PULSOUT 12, 750 Generates a 150 micro second pulse width on pin 12 PAUSE • Syntax: PAUSE <Period> • Pause the program, execution stops for the specified period. Number System • Decimal System: 1,2,3,4,5,…. – 103,102,101,100 – thousands,hundreds,tens,units • Binary system: 0,1 – 23,22,21,20 – bit3,bit2,bit1,bit0 (bits=binary digits) Binary Math • • • • • 0+0=0 0+1=1+0=1 1+1=10, I.e.,0+carry 1 1+1+1 = 11, I.e. 1+carry 1 14+19=33 – 01110+10111=100001 • • • • 0-0=0 1-0=1 1-1=0 0-1=10-1+borrow = 1+borrow • 27-14=13 – 11011-01110=01101 C. BS2 Runtime Math and Logic - pay attention!! Number Representations: BS2 recognizes decimal (no prefix), hex ($ prefix), binary (% prefix), ASCII (string enclosed in quote - example: "A" returns the ASCII code for A: 65.) Order of operations: BS2 performs operations in the order written - big difference from letting multiplication and division take priority over addition and subtraction. C. BS2 Runtime Math and Logic - pay attention!! Example: 12+3*2/4 doesn't result in 13.5, which is what we get if we follow the rules we were taught. Rather, BS2 does 12+3=5, then 15*2=30, then 30/4=7. (Note: BS2 does integer math, so 30/4 is 7 not 7.5.) Parentheses are necessary to force the multiplication and division to take place first. C. BS2 Runtime Math and Logic - pay attention!! Integer math: BS2 uses rules of positive integer math. It handles only whole numbers and drops fractional parts of any computations. Careful with negative numbers - these are stored as 2's complement. Better to avoid negative numbers when possible. Division with negative numbers will not work, but addition, subtraction and multiplication are ok, if you are careful. (Also use MIN and MAX only with unsigned integers.) C. BS2 Runtime Math and Logic - pay attention!! Unary and binary operators: Unary operators take precedence over binary operators: 10 - SQR 16 results in SQR 16 being evaluated first, then subtracts it from 10. 16-bit workspace: Computation is done in 16 bits. If variable is byte, it is padded with 8 leading zeros to make the operand 16 bits. After the operation, the 8 LSB bits are placed into the byte variable in which we want to store the result. Careful when working with negative numbers. C. BS2 Runtime Math and Logic - pay attention!! • Example: x = -99, where x has been declared as a byte. When we ask for the value stored in x to be displayed in signed decimal format (PBASIC2 instruction is "debug sdec ? x"), it shows that x is 157. What happened? Note that 99 is 01100011 as a byte. When BS2 negates 99, it converts the number to 16 bits (0000000001100011), then takes two's complement (1111111110011101). C. BS2 Runtime Math and Logic - pay attention!! • Since we asked for the value to be stored as x (byte), the 8 leftmost bits are truncated, and we have (10011101). The SDEC modifier of the debug instruction expects the operand to be a 16bit, 2-'s complement number, but we are only giving it a byte to work with. So it just pads the number with leading zeros (0000000010011101), which is +157. FOR … NEXT • Syntax: FOR counter = <startvalue> TO <EndValue> STEP <StepValue> …… NEXT • Create a repeating loop that executes the lines between FOR and NEXT, incrementing or decrementing the counter according to the step value. • If start value is larger than end value, PBASIC understands that the step value is negative even if there is no minus sign. FOR…NEXT • Note: For Loops can not overlapped, Example: • FOR I = 1 TO 10 FOR J = 1 TO I ….. NEXT ……… NEXT IF…THEN • Syntax: IF <condition> THEN <true-address> • If the condition is true the execution jumps to the true-address, otherwise it continues down. High • Syntax: High Pin • Makes the specific pin output high. LOW • Syntax: LOW <Pin> • Make the specific pin output low Frequently used PBASIC Instructions Debug End For/Next Gosub Goto High If…Then Input Low • • Output Pause PWM Rctime Return Serin Serout Stop Toggle BRANCH • • • • Syntax: BRANCH offset, (Add0, Add1, …, AddN) Go to the address specified by offset. It works the same way like (switch-case) in C++. We will use it on look up tables when we have more than one table to see which table we are going to read. • If offset = 0 => branch to address add0 • If offset = 1 => branch to address add1 • … etc DATA • Syntax: <symbol> DATA <DataItem, DataItem,…> • Write data to the EEPROM during the program download. • Symbol: is an optional, unique symbol that will be automatically defined as a constant equal to the location number(address) of the first Item. • DataItem: is a constant indicates a value. GOTO Syntax: GOTO label • Makes the execution jump to the point of the program specified by the label. • A common use : on endless loops. • Example: loop: ……. …… GOTO loop INPUT • Syntax: INPUT <Pin> • Make the specific pin an input. LOOKUP • Syntax: index, (value0, value1, … valueN), variable • Find the value at location index and store it in variable: If index = 0 => variable = value0 Else if index = 1 => variable = value1 … etc OUTPUT • Syntax: OUTPUT <Pin> • Make the specified pin an output. PWM • Syntax: PWM <Pin>, <Duty>, <Cycles> • Convert a digital value to analog output via pulse-width modulation. • Units in cycles on BS2 is 1 ms. • Average voltage equation: V(avg) = (Duty/255) * 5 Volts. • Required charge time(cycles) equation: t(chg) = 4 * R * C 1000 ohm • Example: P0 Vo • T(chg) = 4 * 1000 * 10^-6 = 40 ms • So: PWM 0, 100, 40 Will Put a 1.96 V charge on the capacitor 0.1 uF RCTIME • Syntax: RCTIME <Pin>, <State>, <Variable> • Measure time while Pin remains in State and put the result on Variable; usually to measure the charge/ discharge time of resistor/ capacitor (RC) circuit. • We will use that on our following light program, by comparing the RCTIME of the left and the right photo sensors (resistor on our case) and use the comparison result to decide whether we we should turn right or left. READ • Syntax: READ <Location>, <Variable> • Read value at Location and store the result in Variable. • Usually used on lookup tables. SERIN • Receive asynchronous serial data (e.g, RS232 serial protocol data). • We are not going to use serial communication interface on our project(s). • For details: refer to the user manual. SEROUT • Transmit asynchronous serial data (e.g RS232 data). • Again we are not dealing with serial communication interface. STOP • Syntax: STOP • Stop program execution without putting BASIC stamp into low-power mode, also you can use it in the middle of the program (differences from END). • Use this command on error handling (ex: divide by zero), or if your program branches based on the inputs into more than one independent algorithm, so each algorithm considered as separated program has to end when finished. TOGGLE • Syntax: Toggle <Pin> • Invert the state of an output pin, if it is high make it low and vice versa. Sample Programs