1 / 27

AVR Coding on OPTIMUS

AVR Coding on OPTIMUS. - A Development board deveoped by Electronics Club, IIT Bombay Contact : Rahul Prajapat (9892945399) r ahul.prajapat9@gmail.com. Content :. OPTIMUS overview Software and Driver installation Atmega32u4 pin diagram Pin mapping on Optimus

zita
Télécharger la présentation

AVR Coding on OPTIMUS

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. AVR Codingon OPTIMUS - A Development board deveoped by Electronics Club, IIT Bombay Contact : Rahul Prajapat (9892945399) rahul.prajapat9@gmail.com

  2. Content : • OPTIMUS overview • Software and Driver installation • Atmega32u4 pin diagram • Pin mapping on Optimus • Compiling and Programming • Codes : • Blinking an led : blink.c • Analog to Digital converter : adc.c • PWM : pwm.c • UART : uart.c References

  3. OPTIMUS overview • Brain– Atmel’s Atmega32u4 microcontroller • Peripherals on it : • USB programmable • Motor Driver • Slot for servo motors • Xbee Shield • I/O Expander • LCD Shield • Serial Communication  • Xbee shield

  4. Contd.. IC's used : ATMEGA32U4 - Atmel based • TB6612FNG - Toshiba's motor driver IC • PCF8575 - TI based 16 bit I2C I/O expander • Ft232 - FTDI chip • LD29150DT50R - 5V voltage regulator • TLV2217-33 - 3.3V voltage regulator (This also can be used - LD29150DT33R) Optimusdocumetation : Stab-iitb.org/wiki/optimus • User manual of the "Optimus" :  http://stab-iitb.org/electronics/optimus.pdf • How to code :  http://stab-iitb.org/electronics/how_to_code_optimus.pdf • Datasheet of Atmega32u4 :  http://stab-iitb.org/electronics/atmega32u4.pdf

  5. Software and Driver installation : • WinAVR : http://sourceforge.net/projects/winavr/files/ • Atmel FLIP: http://www.atmel.com/tools/flip.aspx • Libusb driver: http://sourceforge.net/projects/libusb-win32/

  6. What is a microcontroller? • It is essentially a small computer • Compare a typical microcontroller (uC) with a typical desktop

  7. Microcontroller Families • 8051 (Intel) • PIC (Microchip) • AVR (Atmel) • MSP430 (TI) • ARM (ARM)

  8. Why use a micro-controller? • It is programmable. It is fun. • A code (typically written in C) decides what it does • Easier to write a code than design and make a custom circuit for complex jobs • e.g. In a micromouse, a single uC controls the motors, finds distance from the walls, explores and solves the maze • The same muC can be used in hundreds of applications

  9. Atmega32u4 pin diagram :

  10. Pin mapping on Optimus :

  11. Hello world • Turning on a led : #include<avr/io.h> void main() { DDRB = 0xff; PORTB = 0x00; }

  12. Compiling and Programming • Save the code as gpio.cin a separate folder (not strictly necessary, just a good practice) • Create a makefile using Mfile and save in the same folder • Open it in Winavr Programmer’s Notepad and change: ◦ Line 44: MCU = atmega16 ◦ Line 65: F_CPU = 1000000 ◦ Line 73: TARGET = blink, Line 83: SRC = $(TARGET).c ◦ Alternatively, TARGET = anything_you_want and SRC = blink.c ◦ Line 281: AVRDUDE_PORT = usb • In Programmer’s Notepad, Tools > Make All to compile • Connect USB to computer and Optimus • Go to Flip • File -> Load hex file • Device -> select -> atmega32u4 • Settings -> communication -> usb -> open

  13. Blinking an led : • Choose a port and a pin • In the code Loop { 1. Set pin direction to output 2. Set pin output to high 3. Wait for 250ms 4. Set pin output to low 5. Wait for 250ms }

  14. blink.c #include<avr/io.h> #include<util/delay.h> void main() { DDRC=0xff; while(1) { PORTC=0xff; _delay_ms(200); PORTC=0b00000000; _delay_ms(200); } }

  15. Analog to Digital converter • Applications – Music recording, Radar etc • Most of the sensors are analog -temperature, pressure, pH, light intensityetc Sampling : Resolution, Saturation

  16. Analog to Digital converter • Converts an analog voltage VIN to a digital number • ADC_Data • 10-bit conversion result • Conversion time = 13.5 * ADC clock period • Up to 15k conversions per sec • 12 channels

  17. Analog to Digital converter • Data registers : • ADC Control and Status Register : • ADEN: This bit turns on the ADC when set. • ADPS2/1/0: prescalar; In our case, this division factor is 128. This implies that the frequency for our ADC is 16MHz/128 = 125kHz • ADSC: This bit, when set starts the conversion. Once the conversion is done, it becomes low automatically. • ADIE: When this bit is set (and the I-bit in SREG* is set), the ADC Conversion Complete Interrupt is activated

  18. Adc.c #include <avr/io.h> #include <avr/interrupt.h> #include <stdlib.h> #include <util/delay.h> volatile float sl=0; void adc_init(void){ ADCSRA |=((_BV(ADPS2))|_BV((ADPS1))|_BV((ADPS0))); ADMUX |= _BV(REFS0); ADCSRA|=_BV(ADIE); ADCSRA |= _BV(ADEN); } void port_init(void) { DDRF=0x00; PORTF=0x00; DDRC = 0xff; PORTC = 0x00; }

  19. Contd… void main() { port_init(); adc_init(); sei(); ADCSRA |= _BV(ADSC); while (1) { ADCSRA |=_BV(ADSC); _delay_ms(10); } } ISR(ADC_vect) { sl = ADCL + ADCH*256; if(sl>512){ PORTC=0xff;} else{PORTC = 0x00;} }

  20. PWM

  21. PWM • Fast PWM mode :

  22. PWM.c #include<avr/io.h> #include <avr/interrupt.h> volatile float sl=0; void adc_init(void){ ADCSRA |= _BV(ADPS0)|_BV(ADPS1)|_BV(ADPS2); ADMUX |= _BV(REFS0); ADCSRA |= _BV(ADEN); } void port_init(void) { DDRF=0x00; PORTF=0x00; DDRB=0xff; PORTB = 0X00; }

  23. Contd… int main(void) { port_init(); //* no of timers TCCR0A |= _BV(WGM00) | _BV(WGM01) | _BV(COM0A1); //* diff fast pwm, n other modes TIMSK1 |= _BV(TOIE0); //*where r we starting the counting ? adc_init(); sei(); TCCR0B |= _BV(CS01) | _BV(CS00) ; //* timer clock source/64 --> datasheet ? ADCSRA |= _BV(ADSC); while(1){ ADCSRA |=_BV(ADSC); sl = ADCL+ADCH*256; OCR0A = (sl/1023)*256; sl=0; } return(0); }

  24. UART

  25. Uart.c void USART_Init( void ) { UCSR1A = 0; UCSR1B = (1<<RXEN1) | (1<<TXEN1); UCSR1C = (1<<UCSZ10) | (1<<UCSZ11); UBRR1L = BAUD_PRESCALE; // Load lower 8-bits of the baud //rate value into the low byte of the UBRR register UBRR1H = (BAUD_PRESCALE >> 8); // Load upper 8-bits of the baud //rate value into the high byte of the UBRR register /* Enable receiver and transmitter */ UCSR1A &= ~(1 << U2X1); }

  26. Contd… void USART_Transmit( unsigned char data ) { /* Wait for empty transmit buffer */ while ( !( UCSR1A & (1<<UDRE1)) ); /* Put data into buffer, sends the data */ UDR1 = data; } unsigned char USART_Receive( void ) { /* Wait for data to be received */ while ( !(UCSR1A & (1<<RXC1)) ); /* Get and return received data from buffer */ return UDR1; }

  27. Resources and Links • Tutorials and sample codes: 1. http://www.avrtutor.com 2. http://winavr.scienceprog.com 3. http://kartikmohta.com/tech/avr/tutorial • ChiraagJuvekar • Atmel application notes: projects, tutorials, code examples, miscellaneous information • http://www.atmel.com/dyn/products/app_notes.asp?family_id=607 • Forums: http://www.avrfreaks.net • Advanced projects: 1. http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects 2. http://www.obdev.at/products/vusb/projects.html

More Related