Home

MicroHOPE

image

Contents

1. Clock select bits uint8 t ocrval 255 4 Output Compare register vaule int main Set TCCRO in the Fast PWM mode TCCR2 1 lt lt WGM21 1 lt lt WGM20 1 lt lt COM21 csb OCR2 ocrval CHAPTER 2 GETTING STARTED 19 TCNTO 0 DDRD 1 lt lt PD7 Set PD7 0C2 as output 2 5 4 More applications of Timer Counter Timer Counter can be used for timing applications like measuring the time elapsed be tween two events or counting the number of pulse inputs during a specified time interval measure frequency This function counts the number of pulses received on the external input of Timer Counter1 PB1 during 500 milliseconds to calculates the frequency of the input pulse Example freq counter c include mh utils c include mh timer c include mh lcd c int main uint32_t f set_sqr_tc2 1500 Set a square wave on TC2 output PD7 lcd_init while 1 f measure_freq lcd clear lcd put long f delay ms 200 return 0 h Connect PD7 to PB1 and upload the program freq counter c to read the frequency on the LCD display You can also connect PB1 to an external pulse source to measure its frequency The maximum frequency that can be measured is limited by the size of the counter that is 63535 means we it can handle upto around 126 kHz Time Interval Measurement The T C units can be programmed to keep track of time interval between two event
2. PORTB amp 1 lt lt PBO set PBO LOW delay_100us 5 Wait for a while to avoid false triggering start timer while PINB amp 2 0 Wait for LOW on PB1 x read timer 400 lcd clear lcd put long x vsby2 1000 distance in cm http www robot electronics co uk htm srf05tech htm CHAPTER 2 GETTING STARTED 21 delay_ms 500 2 6 Talking to the PC via USB On the microHOPE board the Rx Tx pins of ATmega32 are connected to the USB to Serial Converter IC User programs also can use this path to communicate to the PC via the USB port The following functions are available for handling the UART 1 uart init baud 38400 is the maximum baudrate supported You can use any submultiple of that We use 1 5top Bit and the parity is Even 2 uart recv byte Waits on the UART receiver for a character and returns it 3 uart send byte c Sends one character over the UART transmitter On the PC side we use a simple Python program to communicate to the micro controller The USB to Serial interface will appear as a virtual COM port on the PC on GNU Linux systems it can be accessed as dev ttyUSBO You need to install Python interpreter and the python serial module on the PC for this to work These Python programs should be terminated before using microHOPE again to upload programs 2 6 1 Send receive Characters The program echo c waits for data from the PC vis the USB to serial converter i
3. GUI provided At the same time executing the compile and upload programs from a text l We are very much aware of the drawback of this method When you include a file all the functions in that will get added to your executable increasing its size Once the code is working copy the necessary functions to your source file instead of including the whole file to get rid of this difficulty CHAPTER 1 INTRODUCTION 3 PORTD PORTB Tep PROG ATMega32 USB USB to PC serial AVR ucl emory sn Peripherals Crystal FEF RST Button PORTC PORTA Converter DTR A portion of the Flash memory is occupied by the Boot Loader Code Figure 1 1 a MicroHOPE Block diagram terminal are also explained For compiling the C program we use the avr gcc compiler and avrdude for uploading it to the target 1 1 The Hardware A block diagram of microHOPE hardware is shown in figure 1 1 Programs can be up loaded from the PC through the USB port using the pre loaded boot loader code on the uC To load a new program the PC asserts the DTR signal of FT232 that resets ATmega32 On reset the boot loader code will start to receive the new code from PC After loading the new code control is transferred to it Atmega32 has 32 Input Output pins organized as 4 ports each 8 bit wide The IC is available in DIP package that can be socket mounted The ATmega32 has 32 kB of Flash memory 512 bytes EEPROM and 2 kB Static RAM Three Timer
4. in the Abit mode using pins 11 to 14 connected to PC4 PC5 PC6 and PC7 The file mh lcd c contains functions to access the display Most of the examples given below make use of the LCD display The example program hello c listed below demonstrates the usage of the LCD display include mh lcd c int main lcd init For details refer to http en wikipedia org wiki Hitachi HD44780 LCD controller CHAPTER 2 GETTING STARTED 12 lcd put string Hello World t The file pmdk_lIcd c provides the following functions e lcd init Initializes the LCD display must be called once in the beginning e lcd clear Clears the display e lcd put char char ch Outputs a single character to the LCD display lcd put string char s Displays a string to the LCD lcd put byte uint8 ti Diplays an 8 bit unsigned integer lcd put int uint16 ti Displays a 16 bit unsigned integer lcd put long uint32 ti Displays a 32 bit unsigned integer 2 4 Analog to Digital Converter Most of the I O PORT pins of Atmega32 has alternate functions PAO to PAT can be used as ADC inputs by enabling the built in ADC All the pins configured as inputs in the DDRA will become ADC inputs but the ones configured as outputs will remain as digital output pins The ADC converts the analog input voltage in to a 10 bit digital value The minimum value represents GND and the maximum value represents the ADC reference voltage The reference inpu
5. microHOPE through Rx Tx pins of the UART only because of the pre loaded boot loader program How to program a micro controller using the In System Programming ISP feature is explained below This is implemented using the Serial Peripheral Interface SPI interface of the micro controller The SPI consists of three wires Serial Clock SCK Master In Slave Out MISO and Master Out Slave In MOSI All types of memory on the micro controller can be accessed using the SCK MISO and MOSI pins while holding the RESET pin LOW These pins along with ground are available on the 5 pin header J7 on the microHOPE board For details refer to the circuit schematic shown in figure 3 3 The SPI pins can be accessed by connecting to the Parallel port of the PC using a cable as shown is figure 3 1 We can also use In System Programmers that can be connected to the USB port of the PC We are using an ISP called the USBASP that is open hardware The microHOPE IDE can upload programs using the USBASP programmer 3 0 6 Software The program avrdude can be used for programming the micro controller by using Parallal port or the USBASP programmer The commands to use as root user are avrdude c dapa patmega32 U flash w blink hex avrdude c usbasp patmega32 U flash w blink hex PC Parallel Port Figure 3 1 PC Parallel port cable for Serial loading of program memory 29 CHAPTER 3 SERIAL LOADING OF PROGRAM MEMORY 26 SES REE RB ESR EEE ES
6. provided for this The file mh utils c contains the following functions delay 100us int n This function will make the CPU idle for n x100 microseconds For example to insert a 200 microsecond delay call delay 100us 2 CHAPTER 2 GETTING STARTED 11 FORTC connector of MicroHOPE GND 5V PCO PCT PC2PCS PO4 PCS PCE Per 12 3 4 5 6 7 8 eho 1 20a apspo 16 pin connector of LCD display Figure 2 2 LCD display a connections to microHOPE b Photograph of 2x16 character display delay ms int n This function will make the CPU idle for n milliseconds For example to insert a 500 millisecond delay call delay ms 500 The program blink c lis listed below include mh utils c int main void i DDRB 1 configure PBO as output forti PORTB 1 delay ms 500 PORTB 0 delay ms 500 If everything goes fine you should see the LED blinking You can remove the delay statements and watch the high frequency pulses on PBO using an oscilloscope 2 3 The LCD Display For many applications it is necessary to have a local display The HD44780 controller or compatible IC based displays are widely available They come with a 16 pin connector and the transfer protocol is well documented The connections between microHOPE and the LCD display are shown in figure 2 2 a Pins 4 5 and 7 of the LCD display are control lines connected to PC1 PC2 and PC4 The ASCII codes are transferred
7. that run on a PC find it difficult to get started on coding for a microcontroller mainly due to two reasons 1 Programming a uC require some knowledge about the target hardware 2 Transferring the program to the target device generally require some special hardware and software There are plenty of micro controller development kits in the market but most of them focus on the usage of their kit rather than the details of the the micro controller Programming the I O pins of a development board using the library functions provided may be acceptable to get something done quickly but our method is to directly deal with the the micro controller without hiding the uC details from the user A simple Graphical User Interface is provided to Edit Compile and upload the pro gram We start by programming the Input Output ports of Atmega32 which require some basic knowledge of binary number system C language with its bit manipulation operators After that we will proceed to the programming of the peripherals like ADC Timer Counter etc Since they are more complex we will start with a software library in the form of C source files that can be included in your program Once you learn how to write code peripherals using their control data registers there is no need to use these functions Since microHOPE comes with a bootloader pre installed inside the program memory of Atmega32 you can upload code using the USB interface with a single click from the
8. Counters a serial programmable USART a byte oriented Two wire Serial Interface an 8 channel 10 bit ADC and an SPI serial port are some of the peripheral devices on the chip The processor on the microHOPE board runs at 8MHz using the external crystal All the I O pins except the UART Rx Tx pins are available to the user on the four I O connectors An LED is connected to Bit 0 of Port B for quick testing of the board A reset button is also provided The 5V USB power is connected to both VCC and AVCC inputs A jumper is provided to disable the reset option from the PC This is required when the final product is used for communicating to a PC An alphanumeric LCD display is available as an accessory to microHOPE to help the program development It can be connected to the PORTC socket and C functions are provided to access the display 1 2 The MicroHOPE Software An Integrated Development Environment IDE is available for writing compiling and uploading programs It is available in deb format microhope 2 0 0 deb To install it under Debian Ubuntu open a Terminal and follow the steps given below sudo s CHAPTER 1 INTRODUCTION 4 MicroHOPE IDE home ajith microhope adc c File Compile Upload Reads ADC channel and diplays the result on the LCD include mh lcd c include mh adc c main CE CENE uintl6 t data z E Directory home ajith microhope 3 led init C HEX E copy3 c E ir
9. E wait on Data Reg Empty flag UDR data 2 6 2 Sending ADC data The program remote adc c listed below on receiving a channel number in 0 to 7 range reads the corresponding channel and send the data to the PC using the UART via the USB to Serial converter Use the Python program remote adc py on the PC side include mh lcd c include mh uart c include mh adc c int main void uint8 t chan low hi uint i6 t adcval lcd init uart init 38400 adc enable for CHAPTER 2 GETTING STARTED 23 data uart_recv_byte if chan lt 7 adcval read_adc chan lcd clear lcd put int low low adcval amp 255 hi adcval gt gt 8 uart_send_byte low send LOW byte uart send byte hi send HI byte 2 6 3 A simple Oscilloscope The program cro c can digitize the input at PAO in a block mode and send the data to the PC The number of samples and the time interval between consecutive digitizations are send from the PC The program cro py can communicate to cro c and graphically display the received data While running cro py the PCRST jumper should be open 2 6 4 Infrared Receiver The program ir recv c can receive data using the TSOP1738 IR receiver The output of the chip is connected to bit 2 of PORTD The received byte is displayed on the LCD display The receiver is for the non standard data senb by expEYES junior using an infra red LED To test
10. FSO and REFSI bits 7 6 5 4 3 2 1 0 LADEN T ADSC ADATE ADF ADIE_ ADPS2 ADPSI_ ADPSO_ RAW RAV R W R W R W R W R W R W 0 0 0 0 0 0 0 0 7 6 5 4 3 2 1 0 CREFST REFSG ADLAR muxa MUXS muxe MUXi MUXO R W R W R W R W R W R W R W R W 0 0 0 0 0 0 0 0 The program adc v2 c demonstrates the usage of these registers include lt avr io h gt include mh lcd c convert channel 0 set pre scaler to 7 main i uinti6 t data lcd init ADCSRA 1 lt lt ADEN 7 Enable ADC set clock pre scaler ADMUX 1 lt lt REFSO AVCC reference channel 0 ADCSRA 1 lt lt ADSC Start ADC while ADCSRA amp 1 lt lt ADIF wait for ADC conversion data ADCH lt lt 8 ADCL make 10 bit data from ADCL and ADCH lcd_put_int data 2 4 3 Reading in a Loop The example program adc loop c reads an ADC input in a loop and display the result on the LCD If the input is left unconnected the displayed value could be anywhere between 0 an 1023 Connecting PAO to 5V will display 1023 the maximum output include mh lcd c include mh adc c include mh utils c main CHAPTER 2 GETTING STARTED 14 uinti6 t data lcd init adc enable for 52 data read adc 0 lcd_clear lcd put int data delay ms 100 Modify the code for reading other ADC channels 2 4 4 Temperature Controller The program adc loop c can be easily modified to ma
11. MicroHOPE RAUS gh Eas AMA 5 te a W b me a r gt we Y r B c x A x ge 2 3 S E ce T hum aem E ze p gt n gt des zu wv E P T L Ct in Cin a d t E E ix z R if ES gt tt eo ee uas p q E d st P2 4 2 9e LCD Display Adapter 4 for MicroHOP 1 ET OTETA 3 39 LA GL A f amp User s Manual Micro controllers Hobby Pro jects and Education Ajith Kumar B P amp V V V Satyanarayana Inter University Accelerator Centre A Research Centre of UGC New Delhi 110 067 http expeyes in ajith iuac res in Chapter 1 Introduction Most of computer systems in use today are embedded in other machinery such as au tomobiles telephones appliances and peripherals for computer systems Most of them need minimal processing and memory requirements and can be implemented using micro controllers uC A micro controller is a small computer on a single integrated circuit consisting of a CPU combined with program and data memory peripherals like analog to digital converters timer counters serial communication ports and general purpose Input Output ports Intel 8051 Atmel AVR PIC etc are popular micro controllers available in the market To design the MicroHOPE hardware we have chosen ATmega32 micro controller from Atmel after considering the hardware resources available on it and the software support of GNU C compiler Why microHOPE Many people who write programs
12. RTA 1 will make PAO high that can be measured on the pin number 40 of the IC e PINX For the pins configured as inputs PINX will read the status of the external voltage level connected to the pins For pins that are configured as outputs PINX will return the data written to PORTX If the pins configured as inputs are left unconnected there could be unwanted level changes due to electrical noise this can be prevented by enabling the internal pull up resistor For pins that are configured as inputs setting clearing the bits in PORTX will enable disable the corresponding internal pullup resistor The operations described above can be understood easily with some examples For a quick test MicroHOPE hardware has an LED connected to PBO with a series resistor for current limiting 2 2 1 Reading and Writing Ports The program copy c reads the voltage level at PAO Pin 0 of Port A and sets the same on PBO where we have the LED We will enable the internal pullup resistor on PAO so that and it will go LOW only when it is connected to ground using a piece of wire include lt avr io h gt Include file for I O operations int main void CHAPTER 2 GETTING STARTED 9 DDRA 0 Port A as Input PORTA 1 Enable pullup on PAO Sd Configure PBO as output toris PORTB PINA Read Port A and write it to Port B J To test this example open copy c from the File menu of microHOPE IDE Click on Compile and then Upload fr
13. Y SCK p MISO Target MOSI AVRIC anD Figure 3 3 Circuit schematic of microHOPE The c option is used for specifying the programmer to be used The commands should be given from a terminal after changing to the directory microhope where all the data files are kept Setting up the Boot Loader We can use one of these methods for uploading the bootloader program of microHOPE The commands for uploading the hex file and setting the fuses using the parallel port cable are avrdude c dapa patmega32 U flash w ATmegaBOOT 168 atmega32 hex avrdude c dapa patmega32 U lfuse w 0xef m U hfuse w 0xda m If you are using USBASP use avrdude c usbasp patmega32 U flash w ATmegaBOOT 168 atmega32 hex avrdude c usbasp patmega32 U lfuse w 0xef m U hfuse w 0xda m For more details refer to the microhope section of the website expeyes in The circuit schematic of microHOPE is shown in figure 3 3
14. compile errors before doing Upload Select the hardware device by Right clicking inside the Editor window 1 2 1 Compilation and Upload without the IDE Even though the IDE does the job it is a good idea to learn about the programs used behind the seen to compile and upload the code Those who like to use only the IDE may skip this section The software packages used are e avr gcc To compile the C program also require the C library avr libc e avr objcopy To generate the HEX file e avrdude To upload the Hex file CHAPTER 1 INTRODUCTION 5 These packages are available under GNU Linux For Debian Ubuntu distributions they can be installed from the repository using the commands apt get install avr libc apt get install avrdude chmod uts avrdude Insatlling avr libc automatically installs gcc avr and other required packages The last command will enable non root users to use avrdude The installed programs can be invoked from the command line Use a text editor to create your source program for example blink c and compile it using avr gcc Wall 02 mmcu atmega32 o blink blink c We have asked the compiler to print all the warnings optimize to level 2 generate code for atmega32 The executable output stored in blink and input taken from blink c The executable file is converted into Intel Hex format using the following command avr objcopy j text j data O ihex blink blink hex The Hex file is now rea
15. dy for upload This can be done using the command avrdude b 19200 P dev ttyUSBO pm32 c stk500vi U flash w blink We have specified a baudrate of 19200 the output device is dev tty USB0 m32 processor and the transfer protocol stk500v1 1 2 1 1 Some batch files oince a lot of command line arguments are required to specify the compiler linker and loader options it is convenient to put them in small batch files or shell scripts These files can be found inside the microhope directory once the package is installed The compilation of C code and generation of Intel Hex format file for uploading is done by compile mega32 sh listed below avr gcc Wall O2 mmcu atmega32 Wl Map 1 map o 1 1 c avr objcopy j text j data O ihex 1 1 hex avr objdump S 1 gt 1 Ist For example to compile a program named hello c it should be invoked from the com mand line as compile mega32 sh hello The c extension should not be specified The script also generates the linker MAP file and a listing file that may be used for examining the generated output Under GNU Linux microhope on the USB port will appear as file dev ttyUSBO and program uploading is done by mh upload sh listed below avrdude b 19200 P dev ttyUSBO pm32 c stk500v1 U flash w 1 hex To upload hello hex use the command mh upload hello hex CHAPTER 1 INTRODUCTION 6 1 2 2 Using under Raspberry Pi The required packag
16. e 31 25kHz by setting csb 1 The DC level is decided by the value of OCRO ranging from 0 to 255 Once you learn howto manipulate the control registers the same thing can be done without calling the library function as shown below example pwm tcO v2 c include lt avr io h gt uint8_t csb 1 Clock select bits uint8_t ocrval 254 4 Output Compare register vaule int main sf Set TCCRO in the Fast PWM mode TCCRO 1 lt lt WGMO1 1 lt lt WGMOO 1 lt lt COMO1 csb OCRO ocrval TCNTO 0 CHAPTER 2 GETTING STARTED 17 Count TOVn Clear Int Req Control Logic clkr Edge BOTTOM ZN From Prescaler Timer Counter C Waveform OCnA l Generation Fixed OCnB TOP Int Req Values Waveform Generation From Analog Comparator Ouput OCnA Int Req DATABUS ICFn Int Req o KR RA ign Detector Canceler ICPn Figure 2 4 16 bit Timer Counterl schematic DDRB 1 lt lt PB3 Set PB3 0CO as output Connect a 1k resistor and 100uF capacitor in series from PB3 to ground as shown below and measure the voltage across the capacitor using a voltmeter pes pw HHI 2 5 2 16 bit Timer Counter1 The Timer Counterl has more features like two Output Compare Registers Input Cap ture unit etc as shown in figure2 4 The frequency and duty cycle of the waveforms can be controlled better due to the 16 bit size of the counte
17. es are available on Raspberry Pi Install and use as explained in section 1 2 1 1 2 3 Using under MS Windows Download winavr package from sourceforge net and install it For F T232 version install the VCP drivers from http www ftdichip com Drivers VCP htm For MCP2200 version install the ACM drivers from http www expeyes in sites default files debs M CP2200 driver zip Download and install the MicroHOPE IDE from expeyes website Running from command prompt Use a text editor like notepad to edit the source program and save it with a c extension The commands for compilation and uploading are C gt avr32 gcc Wall 02 mmcu atmega32 o blink blink c C gt avr32 objcopy j text j data O ihex blink blink hex C gt avrdude b 19200 P COMxx pm32 c stk500v1 U flash w blink hex Where COMxx is the virtual com port number assigned by Windows We have found it very difficult due to the arbitrary naming of COM ports and reliability issues in the hardware communication Chapter 2 Getting Started After installing the Debian package you must have copied the directory etc skel microhope to you home directory Start the microHOPE IDE from the menu Applications Science Choosing File Open from the menubar will display all the C files inside the microhope directory You can open any of the examples except the filenames starting with mh compile and upload it by clicking on the menubar We will start by programmi
18. f not press the reset button on the board 2 2 Input Output ports of Atmega32 The pinout diagram of Atmega32 is shown in figure 2 1 There are 32 pins organized as four ports named A B C and D each 8 bit wide Each pin can be configured as an input For complete details of Atmega32 refer to http www atmel in Images doc2503 pdf CHAPTER 2 GETTING STARTED 8 XCK TO PBO T1 PB1 ANT2 AINO PB2 PAO ADCO PA1 ADC1 PA2 ADC2 4 2 3 OCO AIN1 PB3 Cl 4 PA3 ADC3 SS PB4 5 PA4 ADC4 MOSI PB5 6 PA5 ADC5 MISO PB6 7 PA6 ADC6 SCK PB7 a PA7 ADC7 RESET 9 AREF VCC GND GND AVCC XTAL2 PC7 TOSC2 XTAL 1 PC6 TOSC1 RXD PDO PC5 TDI TXD PD1 PC4 TDO INTO PD2 PC3 TMS INT1 PD3 OC1B PDA OC1A PD5 ICP1 PD6 PC2 TCK PC1 SDA PCO SCL PD7 OC2 Figure 2 1 Atmega32 Pinout or output The data direction and transfer are done by writing to the registers DDRX PORTX and PINX where X stands for A B C or D e DDRX Every pin of an I O port can be configured as Input or Output using the Data Direction registers DDRX To configure a pin as output set the corresponding bit in DDR X and clear it to make the corresponding pin as input For example DDRA 1 will configure BIT 0 of Port A PAO as output and all other pins as input e PORTX For pins that are configured as ouput assigning a value to PORTX will set that data on them For example PO
19. ion This macro returns the value the specified bit if the specified bit of the variable is 1 else it returns zero For example if x 3 GETBIT x 1 will return 2 and GETBIT x 3 will return zero Let us rewrite the previous program as copy2 c using these macros as include lt avr io h gt int main void uint8_t val CHAPTER 2 GETTING STARTED 10 DDRA 0 Port A as Input PORTA 1 Enable pullup on PORTA bit 0 DDRB 1 Pin O of Port B as output for i val GETBIT PORTA 0 if val 0 SETBIT PORTB 0 else CLRBIT PORTB 0 The same can be done without using the bit manipulation macros as shown in copy3 c include lt avr io h gt Include file for I O operations int main void uint8_t val 8 bit unsigned word DDRA 0 Port A as Input PORTA 1 Enable pullup on PAO DDRB 1 Configure PBO as output for if PINA amp 1 If PAO is set PORTB 1 Set PBO by ORing with 00000001b else otherwise clear PBO PORTB amp 1 by ANDing with 11111110b 00000001b The code fragment shown above uses the Bitwise AND OR and NOT operators 2 2 3 Blinking LED Making pin PBO HIGH and LOW in a closed loop result in the blinking of the LED conencted to it We need to slow down the rate of blinking so that it can be perceived by our eyes This can be done by making the processor wait for a while between writing to PORTB There are some delay functions
20. ir recv c make the connections as shown below a Y Q L 5v N 7 L J GND Inside the command window of expEYES junior GUI type irsend1 nn where nn could be any number from 0 to 255 and press Enter The received number will be displayed on the LCD display of microHOPE 2 6 5 Controlling the uC from Python This section demonstrates a simple method to read write the Input Output ports and other registers of the micro controller from Python A program called pymicro c is running on the micro controller It listens over the serial port for two commands READB or WRITEB The first one should be followed by the address of the register to be read The WRITE command is followed by the register address and the data to be written On the PC side pymicro py handles the communication to the micro controller It defines a class named atm32 that contains the communication routines The example program listed below demonstrates a blinking LED code in Python import time from pymicro import u atm32 while 1 CHAPTER 2 GETTING STARTED 24 u outb PORTB 1 time sleep 0 5 u outb PORTB 0 time sleep 0 5 To run this program compile and upload pymicro c remove the PCRST jumper and then run blink py It is very easy to implement many programs for example a stepper motor controller in Python using this method Chapter 3 serial Loading of Program memory We are able to load programs to
21. ke a temperature monitor controller using the LM35 temperature sensor Connect LM35 output to PAO At 100 C the output of LM35 will be 1 volt With the internal 2 56 volts as reference the ADC output will be around 400 1 0 2 56 1023 Drive the relay contact controlling the heater from PBO via a transistor Insert the following line in the beginning DDRB 1 and within the loop if data gt 400 switch off heater PORTB 0 else if data lt 395 switch on heater PORTB 1 The heater will be switched OFF when the ADC output is greater than 400 It will be switched ON only when the output goes below 395 The window of 6 is given to avoid the relay chattering 2 5 Timer Counters ATmegal6 has three counter timer units Two of them are of 8 bit size and one is 16 bit The counter input could be from derived from the internal clock or from an external source The output of the counter is compared with setpoint registers and different types of actions are taken on compare match The mode of operation of Counter Timer is programmed by setting the bits in the control registers These circuits are useful for time interval measurements and generating different kinds of waveforms CHAPTER 2 GETTING STARTED 15 TOVn Int Req oun clear Con irection c trol Logic TOP DATABUS Figure 2 3 8 bit Timer Counter0 Schematic 2 5 1 8 bit Timer CounterO A block diagram of Timer C
22. ncrement it by one and sends it back The received data is also displayed on the local LCD display include mh lcd c include mh uart c int main void uint8_t data lcd_init uart_init 38400 for data uart_recv_byte lcd_put_char data uart send byte data After uploading this program open a terminal window change to the directory named microhope and run the python program echo py listed below using the commands cd microhope python echo py Tf you are using microHOPE with MCP2200 IC edit echo py to replace ttyUSBO with ttyACMO The same thing applies to programs like cro py pymicro py etc CHAPTER 2 GETTING STARTED 22 import serial fd serial Serial dev ttyUSBO 38400 stopbits 1 timeout 1 0 while 1 c raw input Enter the character to send fd write c print Receiced fd read We can rewrite echo c without using the library functions The program echo v2 c listed below id functionally identical to echo c include mh lcd c int main void uint8_t data lcd init O set UART to 38400 baudrate 8 databit 1 stopbit No parity UCSRB 1 lt lt RXEN 1 lt lt TXEN UBRRH 0 UBRRL 12 At 8MHz 12 gt 38400 UCSRC 1 lt lt URSEL 1 UCSZ1 1 lt lt UCSZO for while UCSRA amp 1 RXC wait on the receiver data UDR read a byte lcd_put_char data while UCSRA amp 1 lt lt UDR
23. ng the Digital Input Output ports of Atmega32 and them proceed to the peripheral devices The avr gcc compiler allows us to program the control data registers and their individ ual bits using the same names given in the Atmega32 manual The registers are accessed just like normal variables the statement PORTB 15 writes the number 15 to Port B The individual pins are referred using names like PAO means BIT 0 of PORTA 2 1 Testing the Hardware Connect MicroHOPE hardware to a USB port and start the microHOPE IDE from the menu Applications gt Science The program will show the Device as Not Selected Right click inside the Editor window to get a popup menu of the available USB to Serial devices It will contain entries like dev ttyUSBO dev tty ACMO etc If the board has FT232 IC 28 pin SMD chip choose the ttyUSB type If the board has MCP2200 20 pin SMD chip choose tty ACM type If you are running expEYES do not choose the device used by expEYES Using File gt Open from the menubar load blink c from the microhope directory Compile and Upload the program by clicking on the menu labels It should give a message Upload Completed If not check the USB connections first If problem persists try pressing and releasing the microHOPE resent button at the same time when you click on Upload Make sure that the PCRST jumper is closed Once the program is uploaded the LED connected to PBO should blink at 1 Hz rate I
24. om the menubar The LED on PBO should start glowing after uploading the program LED will be off when you connect PAO to ground You may rewrite the program so that the LED may be controlled by some other bit configured as input The simple program given above has certain drawbacks It changes PORTB as a whole instead of acting on PBO alone Suppose we have something else connected to the other pins of Port B they also will be affected by the action PORT b PIN A To avoid such problems we should manipulate individual bits The include file mh digital c contains macros for setting and clearing bits by specifying their position 2 2 2 Bit manipulation macros These macros can be used on variables defined in the program and also on registers like DDRX PORTX etc BITVAL bit position The value of bit position could be 0 to 7 in the case of 8 bit integers and 0 to 15 for 16 bit integers This macro returns 1 lt lt bit position For example BITVAL 3 will give 8 that is binary 1000 obtained by left shifting of 1 thrice SETBIT variable bit position This macro SETS the specified bit in the given variable without affecting the other bits For example SETBIT DDRB 7 will make the last bit of DDRB high CLRBIT variable bit position This macro clears the specified bit of the given variable For example CLRBIT val 0 clears the least significant bit of val that is an integer type variable GETBIT variable bit posit
25. ounter0 is shown in figure2 3 The counter TCNTO gets its input and control signals from the control logic circuit The counter output is compared with a Output Compare Register OCRO and a compare match can trigger different types of actions like generating a waveform on OCO pin 4 of Atmega32 same as PB3 The mode of operation is decided by the register TCCRO shown below 7 3 1 0 6 5 4 2 RCM RAN R W R W R W W W R W R W R Let us start using Timer Counter0 with the help of the following functions sqwave tcO csb ocrval This function generates a square wave on OCO whose frequency is decided by the clock select bits csb and ocrval Example sqwave tcO0 c listed below demonstrates the usage of this function example sqwave tcO c include mh timer c csb 2 Clock select bits ocrval 99 Output Compare register vaule int main sqwave_tc0 csb ocrval The 8MHz system clock is divided by 8 csb 2 refer to table below to get a IMHz input to the counter The OCRO register is set to 99 The mode bits are set such that the when the counter value reaches the OCRO the output is toggled and counter is cleared This will result in the waveform generator output toggles after every 100 clock cycles giving a 5kHz sqaurewave on pin OCO PB3 You may view this on an oscilloscope If you do not CHAPTER 2 GETTING STARTED 16 have one connect a loudspeaker with a 100 series resistor from PB3 to g
26. receiver32 c adc enable E adc loop c E dio c irbot jit c data read adc 0 E adc c E echo v2 c E isr test c lcd put int data E blink c E echo c E Icd16 c E copy c E freq counter c mh adc c E copy2 c E hello c mh digital c 4 bj File name Open Files of type C files c i Cancel Compilation Done c 6 1 warning return type defaults to int home ajith microhope adc c In function main home ajith microhope adc c 14 1 warning control reaches end of non void function Figure 1 2 MicroHOPE User Interface apt get install gdebi gdebi microhope 2 0 0 deb After installing the package drag the directory etc skel microhope to your home directory The program can be started by choosing Science gt microHOPE from the Ap plications menu screen shot of the microhope IDE is shown in figure 1 2 By default it looks for files inside the microhope subdirectory inside your home directory The IDE provides a menu to load save files compile and upload the program All the examples given in this document will appear inside the directory named mi crohope All files starting with mh are the files containing library functions to access the various peripherals of Atmega32 To make the source code visible to the user they are not compiled as a library file Do not modify the files starting with mh You can select any of the example programs compile and upload them using the menu Correct all the
27. round We have used expE YES for viewing and characterizing the waveforms generated by microHOPE Changing ocrval to 199 will give output 2 5kHz on the output The output frequency is given by the relation f on Telok 2 N 1 OCRO where fetock is the system clock and N is the clock division factor as shown below 0 0 0 No clock source Timer Counter stopped 0 0 1 ClKyo No prescaling 0 1 0 clk o 8 From prescaler 0 1 1 Clk 9 64 From prescaler 1 0 0 Clk 9 256 From prescaler 1 0 1 Clk 9 1024 From prescaler 1 1 0 External clock source on TO pin Clock on falling edge 1 1 1 External clock source on TO pin Clock on rising edge pwm ktcO csb ocrval This function generates a Pulse Width Modulated waveform on OCO whose frequency is decided by the clock select bits csb and the duty cycle by the ocrval The output OCO is cleared when the counter reaches the OCRO value the counter proceeds upto 255 and then sets OCO The program pwm tcO0 c generates a 3 9 kHz PWM with 25 dutycycle example pwm tcO c include mh timer c uint8 t csb 2 Clock select bits uint8 t ocrval 63 Output Compare register vaule int main i pwm tcO csb ocrval PWM waveforms are often used for generating analog DC voltages in 0 to 5 volts range by filtering it using an RC circuit It is better to set a higher frequency so that the filter RC value could be small The frequency can be mad
28. rs Some C functions to use the T C1 are given below sqwave tcl csb OCRA example sqwave tcl c include uint8 t uint 6 t mh timer c csb 2 2 is divide by 8 option 1MHz clock in ocra 50000 Output Compare register A int main sqwave_tc1 csb ocra CHAPTER 2 GETTING STARTED 18 pwm10 tcl csb OCRA This function generates a PWM waveform with 10bit resolution The value of ocra should be from 0 to 1023 to set the duty cycle example pwm tcl c include mh timer c uint8 t csb 1 1 gt 8MHz clock in uinti6 t ocra 1024 3 Duty cycle arounf 33 int main pwmi10 tc csb ocra 2 5 3 8 bit Timer Counter2 This one is similar to Timer Counter0 sqwave tc2 uint32 t freq This function generates a square wave on OC2 The clock selction bits and the OCR2 value are calculated It is not possible to set all frequency values using this method The actual frequency set is returned and displayed on the LCD Example sqwave tc2 c include mh timer c include mh lcd c int main i uint32 t f lcd init f set sqr tc2 1500 lcd put long f PWM by programming the registers The example given below demonstrates the usage of T C2 as a PWM waveform generator by setting the control register bits The duty cycle is set to 25 by setting the OCR2 to one fourth of the maximum example pwm tc2 c include lt avr io h gt uint8_t csb 2
29. s The program r2ftime c measures the rising edge to falling edge time on PBI Example r2ftime c include mh utils c include mh timer c include mh lcd c int main lcd_init CHAPTER 2 GETTING STARTED 20 set sqr tc2 500 Test signal on PD7 while 1 i lcd clear lcd put long r2ftime PB1 delay ms 100 The function r2ftime uses two other functions called start_timer and read timer that are explained below e void start timer Start the counter with a 1 MHz clock input An interrupt service routine is activated when the count reached 50000 that increments another interger e uint32 t read timer Stops the counter and returns the microseconds elapsed after calling start timer There will be an error of 2 to 3 microseconds that is due to the overhead of the function calls 2 5 4 1 Distance Measurement This technique is used for measuring distance using an ultrasound echo module HY SRF05 using ultra sound echo c The trigger is connected to PBO and the echo is connected to PB1 The distance is measured by Example ultra sound echo c include mh utils c include mh timer c include mh lcd c int vsby2 17 velocity of sound in air 34 mS cm int main uint32_t x DDRB 1 lt lt PBO set PBO as output DDRB amp 1 lt lt PB1 and PB1 as inpt lcd_init while 1 PORTB 1 lt lt PBO set PBO HIGH delay_100us 1
30. ts could be AVCC an internal 2 56V or a voltage connected to the AREF pin The selection is done in software The ADC operation is controlled via the registers ADMUX and ADCSRA The data is read from ADCH and ADCL The include file mh adc c provides the following functions 1 adc enable Enables the ADC 2 adc disable Disables the ADC 3 adc set ref ref Select the reference where ref is REF EXT is an external volt age is applied to the AVREF pin REF INT to use the internal 2 56 V reference and REF AVCC to connect the AVCC supply internally to AVREF 4 read adc ch Converts the voltage on channel ch and returns it in a 16 bit number 2 4 1 Reading an Analog Voltage The example program adc c reads an ADC input and display the result on the LCD include mh lcd c include mh adc c main i uinti6 t data lcd init CHAPTER 2 GETTING STARTED 13 adc enable data read adc 0 lcd put int data 2 4 2 Programmig ADC registers The operation of the ADC is controlled mainly by the registers ADCSRA and ADMUX Setting ADEN will enable the ADC and setting ADSC will start a conversion The bit ADIF is set after a conversion and this bit can be cleared by writing a l to it The ADSP bits decide the speed of operation of the ADC by pre scaling the clock input The channel number is selected by the MUXO to MUXA bits in the ADMUX rregister The reference input is selected by the RE

Download Pdf Manuals

image

Related Search

MicroHOPE microscope micro hope study micro homes microhome microhome competition microhomeinfo microoperations microhome sas microhome winners micro opener microhome kingspan microhome nit microhome competition 2024 microhome architecture competition

Related Contents

snom 4S SIP Registrar/Proxy 2.14  AC Current Probe Model MN185  JVC KD-DV4202 User's Manual  Políticas públicas de financiamento da educação básica - PUC-SP  

Copyright © All rights reserved.
Failed to retrieve file