Emtron Technologies Pvt. Ltd.emtrontech.in/kits/avr.pdfEmtron Technologies Pvt. Ltd. Flat No-101,...

Post on 26-May-2018

222 views 0 download

Transcript of Emtron Technologies Pvt. Ltd.emtrontech.in/kits/avr.pdfEmtron Technologies Pvt. Ltd. Flat No-101,...

Emtron Technologies Pvt. Ltd.Emtron Technologies Pvt. Ltd.Emtron Technologies Pvt. Ltd.Emtron Technologies Pvt. Ltd. Flat No-101, B3 Wing, 1st Floor, Divyam Hights,

Gilbert Hill, Shreenath Nagar, Andheri –West,

Mumbai-58

+91-8080181911

E-mail: emtron.tech@gmail.com, www.emtrontech.in

Do it yourself Embedded Systems workshopDo it yourself Embedded Systems workshopDo it yourself Embedded Systems workshopDo it yourself Embedded Systems workshop is a short term program that offers the knowledge and exposure about the

fastest growing field of embedded applications. This program covers concepts that are essential in understanding the

functioning of any embedded environment. Starting from these fundamentals, it goes on to cover more interesting and

practical aspects such as system design and interfacing with various I/O devices. The contents of the program are

discoursed through some theory sessions as well as interesting and interactive hands on sessions as well. Forty hours of

exhaustive hands on training program is designed to build your own embedded controller.

AVR Board Specifications:

1. ATmega 32 Microcontroller Chip

2. Socket for Flashing , ISP, Regulated Power supply

3. LEDs

4. 4 X4 Switch Matrix, 4x1 KBD connectors

5. Serial Communication Port

6. Relay Interface

7. DC & Stepper Motor driver

8. 16x2 LCD interfacing connector

9. 64x128 Graphic LCD interfacing Connector

10. All ports Connections

11. RTC DS1307

12. Connecting wires

13. Bluetooth, Zigbee Interface

14. Servomotor Interface

15. TFT screen interface

16. Touch Screen Interface

17. Interrupts

Circuit Design

Layout Design:

1. Atmega 32

2. MAX232 (UART interface)

3. L293D (DC Motor Driver)

4. DS1307 (Real Time Clock)

5. 16x 2 LCD

6. USB ISP Programmer

7. Keyboard, Sensor, LM 35, Realay, Blue tooth, Zig Bee, Servo, GLCD connectors

USB asp Installation on Windows The method described here will require machine to restart. Make sure you have write

down the steps before proceeding.

Identify The Problem

The main problem is that Microsoft doesn’t allow us to install drivers which are not

‘digitally signed’ directly (or easily) on Windows Vista and later version (7, 8, and also

8.1). To get around this, we must temporarily disable the signature verification process.

Phase 1: Disable Driver Signature Enforcement

1. Enter “start screen” and open “PC Settings”

2. Choose “Update and recovery” option in the left panel.

3. Choose “Recovery” option in the left panel

4. Click on “Restart now” button, below the “Advanced startup” section then click

“reset” button to begin resetting.

5. Once machine is restarted, we will face several options which we can choose by

pressing F1-F9. Choose F7 for “Disable driver signature enforcement”

Now, the machine will boot with no driver signature enforcement. We can then install the

driver to our machine.

Phase 2: USBasp Driver Installation

Download the driver fro Windows from USBasp (http://www.fischl.de/usbasp/). The latest

version is version 2011-05-28.zip which can be downloaded here. Read the readme first.

Because I use WinAVR version 20100110, i will extract the libusb_0.1.12.1 folder as

D:\libusb_0.1.12.1.

Plug the USBasp in to USB port. Windows will try to recognize the device. It should be

recognized but it lacks of driver so the process is not finish.

Open “Device Manager” on “Control Panel”. Look for Other devices. We have USBasp

device there.

Right click on it and click on “Update Driver Software…”

Click on “Browse my computer for driver software”.

Type the location of folder “D:\libusb_0.1.12.1″ and then click “Next”.

Windows will give warning as it can’t verify the publisher of the driver. Just ignore it and

select “Install this driver software anyway”

Let the installation proceed and wait until it finish.

Example Programs:

***************************************************

//Example: 1 LED Blink

***************************************************

#include <mega32.h>

#include <delay.h>

void main(void)

{

PORTB=0x00;

DDRD = 0x80;

while (1)

{

PORTD.7 = 0x1;

delay_ms(500);

PORTD.7 = 0x0;

delay_ms(500);

};

}

**********************************************************

//Example: 2 LED Blink left to right & Right to Left

*********************************************************

#include<mega32.h>

#include<delay.h>

void main (void)

{

while(1)

{

int i;

int j;

DDRD=0Xff;

i=0xff;

PORTD=0xff;

for(j=0;j<=7;j++)

{

PORTD=i;

i<<=1;

delay_ms(500);

}

for(j=0;j<=7;j++)

{

PORTD=i;

i>>=1;

delay_ms(500);

} } }

**********************************************************

//Example: 3 Read Key Press

**********************************************************

#include <mega32.h>

void main(void)

{

DDRD=0x80;

DDRA=0x00;

PORTA=0XF0;

while(1)

if(PINA.0==0)

{

PORTD.7=1;

}

else

if(PINA.1==0)

{

PORTD.7=0;

} }

**********************************************************

//Example: 4 Read Key Press display array

**********************************************************

#include <mega32.h>

void main(void)

{

int a[3]={1,0,1};

int i;

DDRD=0x80;

DDRA=0x00;

PORTA=0XF0;

while(1)

{ if(PINA.0==0)

{

PORTD.7=a[0];

}

else if

(PINA.1==0)

{

PORTD.7=a[1];

}

else if

(PINA.2==0)

{

PORTD.7=a[2];

} }}

**********************************************************

//Example: 5 Stepper motor & DC motor

**********************************************************

#include <mega8535.h>

#include <delay.h>

void main(void)

{

PORTC=0x00;

DDRC=0xf0;

PORTD=0x00;

DDRD=0x80;

PORTD.7=0x1; //Enable

PORTC.4=0x0;

PORTC.5=0x1; //DC Motor

while (1)

{

PORTC=0x10; //Step-1

delay_ms(20);

PORTC=0x20; //Step-2

delay_ms(20);

PORTC=0x40; //Step-3

delay_ms(20);

PORTC=0x80; //Step-4

delay_ms(20);

}}

**********************************************************

//Example: 6 LCD 16x2 Interface

**********************************************************

#asm

.equ __lcd_port=0x18 ;PORTB

#endasm

#include <mega32.h>

#include <lcd.h>

void main(void)

{

lcd_init(16);

lcd_gotoxy(0,0);

lcd_putsf(" Dr. Y. S. Rao");

while (1);

}

**********************************************************

//Example: 7 LCD 16x2 Display right to left

**********************************************************

#asm

.equ __lcd_port=0x18 ;PORTB

#endasm

#include <mega8535.h>

#include <lcd.h>

#include<delay.h>

void main(void)

{

int i=0;

lcd_init(16);

while(1)

{

for(i=16; i>=0; i--)

{

lcd_clear();

lcd_gotoxy(i,0);

lcd_putsf(" Dr. Y. S. Rao");

delay_ms(250);

}

};

}

**********************************************************

//Example: 8 LCD 16x2 Display 00 to 99

**********************************************************

#asm

.equ __lcd_port=0x18 ;PORTB

#endasm

#include <mega32.h>

#include <lcd.h>

#include<delay.h>

void main(void)

{

int a,b;

while(1)

{

lcd_init(16);

for(b=48;b<=57;b++)

{

for(a=48;a<=57;a++)

{

if(b>48)

{

lcd_gotoxy(6,0);

lcd_putchar((char)b);

}

lcd_gotoxy(7,0);

lcd_putchar((char)a);

delay_ms(500);

lcd_clear();

}}}}

***************************************************

//Example: 09 INT-0 interrupt

***************************************************

#include <mega32.h>

interrupt [EXT_INT0] void ext_int0_isr(void)

{

PORTD = PORTD ^ 0x80;

}

void main(void)

{

DDRD=0x80;

// External Interrupt(s) initialization

// INT0: On

// INT0 Mode: Low level

// INT1: Off

// INT2: Off

GICR|=0x40;

MCUCR=0x00;

MCUCSR=0x00;

GIFR=0x40;

#asm("sei")

while(1) ;

}

***************************************************

//Example: 10 INT-0, INT-1 interrupt Priority

***************************************************

#include <mega32.h>

interrupt [EXT_INT1] void ext_int1_isr(void)

{

PORTD.7=0x1;

}

interrupt [EXT_INT0] void ext_int0_isr(void)

{

PORTD.7 = 0x0;

}

void main(void)

{

DDRD=0x80;

// External Interrupt(s) initialization

// INT0: On

// INT0 Mode: Low level

// INT1: On

// INT1 Mode: Low level

// INT2: Off

GICR|=0xC0;

MCUCR=0x00;

MCUCSR=0x00;

GIFR=0xC0;

#asm("sei")

while(1)

;

}

***********************************************************

//Example: 11 INT-0, INT-1, Timer 0 interrupt Priority

***********************************************************

#include <mega32.h>

unsigned int timecount = 0;

interrupt [TIM0_OVF] void timer0_ovf_isr(void)

{

TCNT0=6;

if(++timecount == 1000)

{

PORTD = PORTD ^ 0x80;

timecount = 0;

}

}

interrupt [EXT_INT1] void ext_int1_isr(void)

{

PORTD = 0x1;

}

interrupt [EXT_INT0] void ext_int0_isr(void)

{

PORTD = 0x0;

}

void main(void)

{

DDRD=0x80;

// Timer/Counter 0 initialization

// Clock source: System Clock

// Mode: Normal top=FFh

// OC0 output: Disconnected

TCCR0=0x01; // Clock value: 8000.000 kHz

TCNT0=0x00;

OCR0=0x00;

// External Interrupt(s) initialization

// INT0: On

// INT0 Mode: Low level

// INT1: On

// INT1 Mode: Low level

// INT2: Off

GICR|=0xC0;

MCUCR=0x00;

MCUCSR=0x00;

GIFR=0xC0;

TIMSK=0x01; // Timer(s)/Counter(s) Interrupt(s) initialization

#asm("sei")

while(1) ;

}

***********************************************************

//Example: 12 Timer 1 Input Capture (ICP)

***********************************************************

#include <mega8535.h>

#define pulse_out PORTB

#define icp PIND.6

unsigned char ov_counter; //counter for timer 1 overflow

unsigned int rising_edge,falling_edge; // storage for times

unsigned long pulse_clocks; //storage for actual clock counts in the pulse

interrupt [TIM1_OVF] void timer1_ovf_isr(void) //timer 1

{

ov_counter ++; //increment counter when overflow occurs

}

interrupt[TIM1_CAPT] void tiemr1_capt_isr(void) //timer 1 input

{

if(icp)

{

rising_edge=ICR1L; //save start time for pulse

TCCR1B=TCCR1B & 0xBF; //set to trigger on falling edge next

ov_counter =0; // clear overflow counter for this measurement

}

else{

falling_edge=ICR1L; //save falling edge time

TCCR1B=TCCR1B |0X40; //set rising edge

pulse_clocks=(unsigned long)falling_edge-(unsigned long)rising_edge +(unsigned long)ov_counter*0x10000;

pulse_out=pulse_clocks/500; //output milliseconds to PORTC

}

}

void main(void)

{

DDRB=0XFF; //set port c for output

TCCR1B=0XC2; //timer 1 input to clock/8

TIMSK=0X24; //unmask timer overflow and capture interrupts

#asm("sei") //enable global interrupt bit

while(1)

; //DO NOTHING

}

****************************************************************

//Example: 13 Timer 1 output compare-A interrupt service routine

****************************************************************

#include <mega8535.h>

interrupt [TIM1_COMPA] void timer1_compa_isr(void)

{

OCR1A=OCR1A+25; //set to next match (toggle) point

}

void main(void)

{

DDRD=0x20; // set OC1A bit for output

TCCR1A=0x40; // set prescaler to clock/8 (1 us clocks)

TCCR1B=0x02; //enable output compare mode to toggle OC1A pin on match

TIMSK=0x10; //unmask output compare match interrupt for register A

#asm("sei") //set global interrupt bit

while(1)

;// do nothing

}

****************************************************************

//Example: 14 Timer 1 Output Compare PWM

****************************************************************

#include <mega8535.h>

#define PWM_select (PINC &3)

void main(void)

{

unsigned int olddat;

PORTC=0x03; //enable the internal pull-ups for in the input bits

TCCR1A=0x91; //compare A fdor non-inverted PWM and 8 bit resoultion

TCCR1B=0x02; //clock /8 prescaler

while(1)

{

if (PWM_select !=olddat)

{

olddat=PWM_select; // save toggle switch value

{

switch (PWM_select)

{

case 0:

OCR1A=25; //10 %duty cycle desired

break;

case 1:

OCR1A= 51; // 20% duty cycle desired

break;

case 2:

OCR1A= 76; //30 % duty cycle desired

break;

case 3:

OCR1A=102; // 40% duty cycle desired

break;

}

} }}}

***********************************************************

//Example: 15 Watchdog Timer

***********************************************************

#include <mega8535.h>

void main(void)

{

DDRD=0x00;

DDRB=0x0F;

WDTCR = 0xB; //enable WDT and set to 120 ms timeout

while(1)

{

#asm("wdr") //reset the watchdog timer

if(PIND.2==0) //if true disable the WDT

{

WDTCR = 0x18; //set both WDE and WDTOE

WDTCR = 0x00; // clear WDE

PORTB.1=1;

}

{

PORTB.2=0x1;

} } }

***********************************************************

//Example: 16 UART by Polling display on PC terminal

***********************************************************

#include <mega8535.h>

#include <stdio.h>

int i;

char a;

void main(void)

{

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART Receiver: On

// USART Transmitter: On

// USART Mode: Asynchronous

UCSRA=0x00;

UCSRB=0x18;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x33; // USART Baud Rate: 9600

printf("Embedded Systems by Dr. Y S Rao");

scanf("%d",&i);

if(i==1)

{

printf("one is entered");

}

while(1)

{

scanf("%c",&a);

switch(a)

{

case 'a':

printf("A is entered");

break;

case 'b':

printf("B is entered");

break;

}

}}

***********************************************************

//Example: 17 UART FLASH memory and PC terminal display

***********************************************************

#include <mega8535.h>

unsigned char qcntr,sndcntr,ch;

unsigned char queue[70];

flash char * flash msg[3]={"that was a","that was b","that was c"};

interrupt [USART_TXC] void usart_tx_isr(void)

{

if (qcntr != sndcntr) UDR=queue[sndcntr++];

}

void sendmsg (flash char *s)

{

qcntr=0;

sndcntr=1;

queue[qcntr++]=0x0d;

queue[qcntr++]=0x0a;

while (*s)queue[qcntr++]=*s++;

UDR=queue[0];

}

void main(void)

{

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART Receiver: On

// USART Transmitter: On

// USART Mode: Asynchronous

UCSRA=0x00;

UCSRB=0x18;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x33; // USART Baud Rate: 9600

#asm("sei")

while (1)

{

if (UCSRA & 0x80)

{

ch=UDR;

switch(ch)

{

case 'a':

sendmsg(msg[0]);

break;

case 'b':

sendmsg(msg[1]);

break;

case 'c':

sendmsg(msg[2]);

break;

}}} }

***********************************************************

//Example: 18 UART Flash/RAM and PC terminal display

***********************************************************

#include <mega8535.h>

unsigned char qcntr,sndcntr,ch;

unsigned char queue[70];

flash char * flash msg1[15]={"that was a"};

flash char * flash msg2[15]={"that was b"};

flash char * flash msg3[15]={"that was c"};

//char msg2[]={"that was b"};

//char msg3[]={"that was neither b nor a"};

flash char * flash msg4[30]={"that was neither b nor a nor c"};

interrupt [USART_TXC] void usart_tx_isr(void)

{

if (qcntr != sndcntr) UDR=queue[sndcntr++];

}

void sendmsg (flash char *s)

{

qcntr=0;

sndcntr=1;

queue[qcntr++]=0x0d;

queue[qcntr++]=0x0a;

while (*s)queue[qcntr++]=*s++;

UDR=queue[0];

}

void main(void)

{

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART Receiver: On

// USART Transmitter: On

// USART Mode: Asynchronous

UCSRA=0x00;

UCSRB=0x18;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x33; // USART Baud Rate: 9600

#asm("sei")

while (1)

{

if (UCSRA & 0x80)

{

ch=UDR;

switch(ch)

{

case 'a':

sendmsg(msg1[0]);

break;

case 'b':

sendmsg(msg2[0]);

break;

case 'c':

sendmsg(msg3[0]);

break;

default:

sendmsg(msg4[0]);

}}} }

***********************************************************

//Example: 19 UART polling data display string on LCD

***********************************************************

#asm

.equ __lcd_port=0x15

#endasm

#include <mega8535.h>

#include <lcd.h>

#include <stdio.h>

#include <string.h>

#include <DELAY.h>

char *a;

int y;

void main(void)

{

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART Receiver: On

// USART Transmitter: On

// USART Mode: Asynchronous

UCSRA=0x00;

UCSRB=0x18;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x33; // USART Baud Rate: 9600

lcd_init(16);

lcd_clear();

while (1)

{

lcd_gotoxy(0,1);

gets(a,16);

y=strlen(a);

printf("%d",y);

lcd_puts(a);

}

}

***********************************************************

//Example: 20 UART INTO

***********************************************************

#include <mega8535.h>

flash char s[6]="Dr. Y S Rao";

interrupt [EXT_INT0] void ext_int0_isr(void)

{

PORTB=PORTB^0x1; //toggle the LSB of port B

putsf("s");

//putsf("Dr. Y S Rao");

}

#include <stdio.h>

void main(void)

{

PORTB=0x00;

DDRB=0x01;

// External Interrupt(s) initialization

// INT0: On

// INT0 Mode: Falling Edge

// INT1: Off

// INT2: Off

GICR|=0x40;

MCUCR=0x02;

MCUCSR=0x00;

GIFR=0x40;

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART Receiver: Off

// USART Transmitter: On

// USART Mode: Asynchronous

// USART Baud rate: 9600

UCSRA=0x00;

UCSRB=0x08;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x33;

// Global enable interrupts

#asm("sei")

while (1)

;

}

***********************************************************

//Example: 21 ADC data on PORTB

***********************************************************

#include <mega8535.h>

#include <delay.h>

#define ADC_VREF_TYPE 0x00

interrupt [ADC_INT] void adc_isr(void)

{

PORTB=(unsigned char) ~(ADCW>>2);

delay_ms(20);

ADCSRA|=0x40;

}

void main(void)

{

PORTB=0xFF; // all outputs

DDRB=0x00; // all LEDs are initially off

// ADC Clock frequency: 1000.000 kHz

// ADC Voltage Reference: AREF pin

// ADC High Speed Mode: Off

// ADC Auto Trigger Source: None

ADMUX=ADC_VREF_TYPE & 0xff;

ADCSRA=0x8B;

SFIOR&=0xEF;

ADCSRA|=0x40;

#asm("sei")

while (1);

}

***********************************************************

//Example: 22 ADC peak value on LCD

***********************************************************

#asm

.equ __lcd_port=0x18 ;PORTB

#endasm

#include <lcd.h>

#include <mega32.h>

#include <delay.h>

#include <stdlib.h>

#include <math.h>

#define ADC_VREF_TYPE 0x40

unsigned char s;//to pass analog input value

float peak=0,temp,arr[50];

int i=1;

char lcd_volt[7];

float read_adc(unsigned char adc_input)

{

delay_ms(10);

ADCSRA|=0x40;

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10;

return ADCW;

}

void main(void)

{

ADCSRA=0x85;

#asm("sei")

lcd_init(16);

while(1){

lcd_clear();

ADMUX=0x00;

while(i<50)

{

arr[i++]= read_adc(s);

}

for(i=1;i<50;i++)

{

if(arr[i]>peak)

peak=arr[i];

}

ftoa(peak,2,lcd_volt); // Float to character conversion upto 2 decimal places..

lcd_gotoxy(0,0);

lcd_putsf("peak voltage =>>");

lcd_gotoxy(0,1);

lcd_puts(lcd_volt); //lcd_volt is array

delay_ms(200);

i=0;

peak=0;

}

}

***********************************************************

//Example: 23 ADC data on UART PC Terminal

***********************************************************

#include <mega8535.h>

#include <math.h>

#include <stdio.h>

#include <delay.h>

unsigned int snd;

#define ADC_VREF_TYPE 0x40

int read_adc(unsigned char adc_input)

{

ADMUX=adc_input;

ADCSRA|=0x40;

while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10;

return ADCW;

}

void main(void)

{

char ch;

unsigned char mux;

UCSRA=0x00;

UCSRB=0xD8;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x33;

ADCSRA=0x86;

#asm("sei")

while(1)

{

ch=UDR;

if(ch=='a' || ch=='b')

{

switch(ch)

{

case 'a':

mux=0;

break;

case 'b':

mux=1;

break;

}

snd=read_adc(mux);

printf("-%d",snd);

delay_ms(2000);

}

else

{

ch=' ';

continue;

}}}

***********************************************************

//Example: 24 analog comparator

***********************************************************

#include <mega8535.h>

interrupt [ANA_COMP] void ana_comp_isr(void){

PORTB.1=0; //light the LED

}

void main()

{

DDRB=0x02; //set bit 1 for output

PORTB=0x02; //start with LED off

ACSR=0x0A; //enable analog comp, interrupt ,falling edge

#asm("sei") // set global interrupt enable bit

while(1)

; //do nothing

}

***********************************************************

//Example: 25 SPI data Transmission

***********************************************************

#include <mega8535.h>

#define SPI_output_data PORTC

#define SPI_input_data PIND

interrupt [SPI_STC] void spi_isr()

{

SPI_output_data=SPDR; //read out new data received

SPDR=SPI_input_data; // load new data to start SPI transmission

}

void main()

{

PORTB=0X40; //PULL UP ON MISO

DDRB=0XB0; //SCLK,MOSI , SS=OUTPUT

DDRC=0XFF; //ALL OP

PORTD=0XFF; //PULL UPS FOR DIP SWITCH

SPCR=0XD0; //ENABLE SPI,AND ITS INTERRUPT

#asm

in r30,spsr //SPI Interrupt enable

in r30,spdr

#endasm

#asm("sei") //global enable interrupts

SPDR = 0x00; //start SPI communication

while(1)

;

}

***************************************************

//Project: 1 Bluetooth Initialization

***************************************************

DDRD.5=0x1;

PORTD.5=0x0; // Hardware Initialization

delay_ms(1000);

PORTD.5=0x1;

delay_ms(1000);

printf("AT+UARTCONFIG,9600,N,1,0 \r");

printf("ATS10=0 \r");

printf("AT+BTMODE,3 \r");

printf("AT+BTSCAN \r");

***************************************************

// Project: 2 Bluetooth as a master

***************************************************

DDRC.3=0x1; //Reset to Bluetooth

PORTC.3=0x0;

delay_ms(2000);

PORTC.3=0x1;

delay_ms(2000);

printf("AT+UARTCONFIG,9600,N,1,0 \r");

printf("ATS10=0 \r");

printf("ATD000195091DEE \r"); // Slave ESD Number

delay_ms(2000);

DDRA.0=0x1;

DDRA.2=0X0;

DDRA.6=0X1;

DDRA.7=0X1;

lcd_clear();

lcd_putsf("Started ");

PORTA.6=0X1;

PORTA.7=0X0;

delay_ms(2000);

if (PINA.2==0) //Status Pin

{

PORTA.6=0X0;

PORTA.7=0X1;

lcd_clear();

lcd_putsf("Master sending ");

printf("b");

***************************************************

// Project: 3 Bluetooth as a slave

***************************************************

DDRC.3=0x1; //Reset to Bluetooth

PORTC.3=0x0;

delay_ms(2000);

PORTC.3=0x1;

delay_ms(2000);

printf("AT+UARTCONFIG,9600,N,1,0 \r");

printf("ATS10=0 \r");

printf("AT+BTMODE,3 \r");

printf("AT+BTSCAN \r");

delay_ms(2000);

DDRA.0=0X1;

DDRA.2=0X0;

DDRA.6=0X1;

DDRA.7=0X1;

lcd_clear();

lcd_putsf("Sl start ");

PORTA.6=0X1;

PORTA.7=0x0;

delay_ms(2000);

if(PINA.2==0)

{

PORTA.6=0X0;

PORTA.7=0X1;

lcd_clear();

lcd_putsf("Sl Receving ");

}

while (1)

{

scanf("%c",&a);

switch(a)

{

case 'a':

lcd_putsf("A is entered");

break;

case 'b':

lcd_putsf("B is entered");

break;

}

****************************************************

//Project: 4 Program to send a SMS using GSM Modem

****************************************************

#include <mega8535.h>

#asm

.equ __lcd_port=0x15 ;PORTC

#endasm

#include <lcd.h>

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include <delay.h>

void main(void)

{

unsigned char a[50],b[50];//,c[16],d[16],e[16],temp1[100], strlength[2], temp2[16];

unsigned char str0[]="AT";

unsigned char str1[]="OK";

unsigned char str2[]={'A','T','+','C','M','G','S','=','"','9','8','2','0','9','6','2','8','7','0','"',';'};

unsigned char str3[]={'Y','S','R','A','O',0x1A};

PORTA=0x00;

DDRA=0x0F;

UCSRA=0x00;

UCSRB=0x18;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x33;

lcd_init(16);

puts(str0); //Cheecking if AT commands are working

putchar(0x0D); //Enter

putchar(0x0A); //Line feed

gets(a,16); //Input from UDR (carriage return)

gets(b,16); //Input from UDR (OK)

delay_ms(1000);

lcd_gotoxy(0,0);

lcd_puts(str0);

lcd_gotoxy(0,1);

lcd_puts(a); //Display the response on LCD

delay_ms(5000);

lcd_gotoxy(0,1);

lcd_puts(b); //Display the response on LCD

delay_ms(5000);

lcd_clear();

if(strncmp(b,str1,2)==0)

{

puts(str2);

putchar(0x0D); //Enter

putchar(0x0A); //Line feed

delay_ms(1000);

puts(str3);

lcd_puts(str3);

};

}

******************************************************

// Project: 5 Program to call a person using GSM

******************************************************

#include <mega8535.h>

#asm

.equ __lcd_port=0x15 ;PORTC

#endasm

#include <lcd.h>

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include <delay.h>

// Declare your global variables here

void main(void)

{

unsigned char a[50];

unsigned char str0[]="AT";

unsigned char str1[]={'a','t','d',' ','9','8','2','0','9','6','2','8','7','0',';','\0'};

PORTA=0x00;

DDRA=0x0F;

UCSRA=0x00;

UCSRB=0x18;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x33;

lcd_init(16);

puts(str0); //Cheecking if AT commands are working

putchar(0x0D); //Enter

putchar(0x0A); //Line feed

gets(a,16); //Input from UDR (carriage return)

gets(a,16); //Input from UDR (OK)

lcd_gotoxy(0,0);

lcd_puts(str0);

lcd_gotoxy(0,1);

lcd_puts(a); //Display the response on LCD

delay_ms(5000);

lcd_clear();

puts(str1);

putchar(0x0D); //Enter

putchar(0x0A); //Line feed

gets(a,50);

gets(a,50);

lcd_gotoxy(0,0);

lcd_puts(str1);

lcd_gotoxy(0,1);

lcd_puts(a); //Display the response on LCD

delay_ms(5000);

}

**************************************************************************

// Project: 6 Program to receive SMS through GSM and compare with string

**************************************************************************

#asm

.equ __lcd_port=0x15

#endasm

#include <mega8535.h>

#include <lcd.h>

#include <stdio.h>

#include <string.h>

#include <delay.h>

#include <stdlib.h>

void main(void)

{

unsigned char a[16],b[16],c[16],d[16],e[16],temp1[100], strlength[2], temp2[16];

int i,length;

unsigned char str0[] = "AT";

unsigned char str1[]="ATE0"; //Echo off

unsigned char str2[]="OK";

unsigned char str3[]="+CMTI:"; //Indication of new mesg

unsigned char Msg[]="ysrao"; //String

unsigned char str5[]="AT+CMGR=1"; //To read the sms

unsigned char str6[]="AT+CMGF=1"; //To set text mode

unsigned char str7[]="AT+CMGD=1";

for(i=0;i<=100;i++)

{

a[i]=b[i]=c[i]=d[i]=temp1[i]=temp2[i]=0;

}

PORTA=0x00;

DDRA=0x01;

PORTB=0x00;

DDRB=0x00;

PORTC=0x00;

DDRC=0x00;

PORTD=0x00;

DDRD=0x00;

UCSRA=0x00;

UCSRB=0x18;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x33;

lcd_init(16);

while(1)

{

PORTA=0x00;

puts(str0); //Cheecking if AT commands are working

putchar(0x0D); //Enter

putchar(0x0A); //Line feed

gets(a,16); //Input from UDR (carriage return)

gets(a,16); //Input from UDR (OK)

lcd_gotoxy(0,0);

lcd_puts(str0);

lcd_gotoxy(0,1);

lcd_puts(a); //Display the response on LCD

delay_ms(10000);

lcd_clear();

if(strncmp(a,str2,2)==0)

{

lcd_clear();

puts(str1); //Echo off

putchar(0x0D); //Enter

putchar(0x0A); //Line feed

gets(b,16); //Input from UDR (carriage return)

gets(b,16); //Input from UDR (OK)

lcd_gotoxy(0,0);

lcd_puts(str1);

lcd_gotoxy(0,1);

lcd_puts(b); //Display the response on LCD

delay_ms(10000);

lcd_clear();

puts(str6);

putchar(0x0D); //Enter

putchar(0x0A); //Line feed

gets(d,16);

gets(d,16);

lcd_puts(str6);

lcd_gotoxy(0,1) ;

lcd_puts(d);

delay_ms(10000);

lcd_clear();

while(1)

{

PORTA=0x00;

lcd_clear();

lcd_gotoxy(0,0);

lcd_putsf("Waiting... ");

gets(c,16); //Input from UDR (carriage return)

gets(c,16); //Waiting for the sms

lcd_clear();

lcd_gotoxy(0,1);

delay_ms(1000);

lcd_puts(c);

delay_ms(1000);

lcd_clear();

lcd_gotoxy(0,0);

if(strncmp(c,str3,6)==0)

{

lcd_clear();

puts(str5);

putchar(0x0D); //Enter

gets(e,16);

gets(temp1,100); //Input from UDR (carriage return)

gets(temp2,16); //The Message

lcd_puts(str5);

delay_ms(10000);

lcd_clear();

lcd_putsf("Reading Message...");

delay_ms(10000);

lcd_clear();

length=strlen(temp2);

itoa(length,strlength);

lcd_puts(strlength);

delay_ms(10000);

lcd_clear();

for(i=0;i<strlen(temp2);i++)

{

lcd_putchar(temp2[i]);

}

delay_ms(5000);

lcd_clear();

if(strncmp(temp2,Msg,strlen(Msg))==0 && strlen(temp2)==(strlen(Msg)+1))

{

PORTA=0x01;

lcd_putsf("Correct message");

delay_ms(1000);

}

else

{

lcd_putsf("wrong message");

delay_ms(1000);

}

puts(str7); //Delete the sms

putchar(0x0D); //Enter

putchar(0x0A); //Line feed

gets(a,16);

gets(a,16);

lcd_clear();

delay_ms(500);

lcd_gotoxy(0,0);

lcd_puts(a);

delay_ms(1000);

}

}

}

};

}

**********************************************************

// Project: 7 Program to send and receive SMS

**********************************************************

#asm

.equ __lcd_port=0x15

#endasm

#include <mega8535.h>

#include <lcd.h>

#include <stdio.h>

#include <string.h>

#include <delay.h>

#include <stdlib.h>

void main(void)

{

unsigned char a[16],temp1[100], strlength[2], temp2[16];

int i,length;

unsigned char str0[] = "AT";

unsigned char str1[]="ATE0"; //Echo off

unsigned char str2[]="OK";

unsigned char str3[]="+CMTI:"; //Indication of new mesg

unsigned char Msg[]="ysrao"; //String

unsigned char str5[]="AT+CMGR=1"; //To read the sms

unsigned char str6[]="AT+CMGF=1"; //To set text mode

unsigned char str7[]="AT+CMGD=1";

unsigned char str8[]={'A','T','+','C','M','G','S','=','"','9','8','2','0','9','6','2','8','7','0','"',';'};

unsigned char str9[]="LED is on\0";

unsigned char str10[]="LED is off\0";

for(i=0;i<=100;i++)

{

a[i]=temp1[i]=temp2[i]=0;

}

PORTA=0x00;

DDRA=0x01;

PORTB=0x00;

DDRB=0x00;

PORTC=0x00;

DDRC=0x00;

PORTD=0x00;

DDRD=0x00;

UCSRA=0x00;

UCSRB=0x18;

UCSRC=0x86;

UBRRH=0x00;

UBRRL=0x33;

lcd_init(16);

PORTA=0x00;

puts(str0); //Cheecking if AT commands are working

putchar(0x0D); //Enter

putchar(0x0A); //Line feed

gets(a,16); //Input from UDR (carriage return)

gets(a,16); //Input from UDR (OK)

lcd_gotoxy(0,0);

lcd_puts(str0);

lcd_gotoxy(0,1);

lcd_puts(a); //Display the response on LCD

delay_ms(10000);

lcd_clear();

if(strncmp(a,str2,2)==0)

{

lcd_clear();

puts(str1); //Echo off

putchar(0x0D); //Enter

putchar(0x0A); //Line feed

gets(a,16); //Input from UDR (carriage return)

gets(a,16); //Input from UDR (OK)

lcd_gotoxy(0,0);

lcd_puts(str1);

lcd_gotoxy(0,1);

lcd_puts(a); //Display the response on LCD

delay_ms(10000);

lcd_clear();

puts(str6);

putchar(0x0D); //Enter

putchar(0x0A); //Line feed

gets(a,16);

gets(a,16);

lcd_puts(str6);

lcd_gotoxy(0,1) ;

lcd_puts(a);

delay_ms(10000);

lcd_clear();

while(1)

{

lcd_clear();

lcd_gotoxy(0,0);

lcd_putsf("Waiting... ");

gets(a,16); //Input from UDR (carriage return)

gets(a,16); //Waiting for the sms

lcd_clear();

lcd_gotoxy(0,1);

delay_ms(1000);

lcd_puts(a);

delay_ms(1000);

lcd_clear();

lcd_gotoxy(0,0);

if(strncmp(a,str3,6)==0)

{

lcd_clear();

puts(str5);

putchar(0x0D); //Enter

gets(a,16);

gets(temp1,100); //Input from UDR (carriage return)

gets(temp2,16); //The Message

lcd_puts(str5);

delay_ms(10000);

lcd_clear();

lcd_putsf("Reading Message...");

delay_ms(10000);

lcd_clear();

length=strlen(temp2);

itoa(length,strlength);

lcd_puts(strlength);

delay_ms(10000);

lcd_clear();

for(i=0;i<strlen(temp2);i++)

{

lcd_putchar(temp2[i]);

}

delay_ms(5000);

lcd_clear();

if(strncmp(temp2,Msg,strlen(Msg))==0 && strlen(temp2)==(strlen(Msg)+1))

{

PORTA=0x01;

lcd_putsf("Correct message");

delay_ms(1000);

puts(str8);

putchar(0x0D); //Enter

putchar(0x0A); //Line feed

delay_ms(1000);

puts(str9);

putchar(0x1A);

lcd_clear();

lcd_gotoxy(0,0);

lcd_puts(str8);

lcd_gotoxy(0,1);

lcd_puts(str9);

lcd_clear();

}

else

{

PORTA=0x00;

lcd_putsf("wrong message");

delay_ms(1000);

puts(str8);

putchar(0x0D); //Enter

putchar(0x0A); //Line feed

delay_ms(1000);

puts(str10);

putchar(0x1A);

lcd_clear();

lcd_gotoxy(0,0);

lcd_puts(str8);

lcd_gotoxy(0,1);

lcd_puts(str10);

lcd_clear();

}

puts(str7); //Delete the sms

putchar(0x0D); //Enter

putchar(0x0A); //Line feed

gets(a,16);

gets(a,16);

lcd_clear();

lcd_gotoxy(0,0);

lcd_puts(a);

delay_ms(1000);

lcd_clear();

} } } }

**********************************************************

// Project: 8 DC Servo Motor Control

**********************************************************

#include <mega88.h>

#include <delay.h>

interrupt [TIM1_COMPA] void timer1_compa_isr(void)

{

PORTD=0xFF;

}

interrupt [TIM1_COMPB] void timer1_compb_isr(void)

{

PORTD=0x00;

}

void main(void)

{

#pragma optsize-

CLKPR=0x80;

CLKPR=0x00;

#ifdef _OPTIMIZE_SIZE_

#pragma optsize+

#endif

DDRD=0xFF; // Port B data direction configuration as output port.

TCCR1A=0x03; //fast PWM mode prescaller 8

TCCR1B=0x1A;

TCNT1H=0x00; //start count from 00

TCNT1L=0x00;

OCR1AH=0x9c;

OCR1AL=0x40;

OCR1BH=0x07; //0 degrees Initial Position

OCR1BL=0xd0;

TIMSK1=0x06; //Timer(s)/Counter(s) Interrupt(s) initialization

DDRD=0xFF;

#asm("sei")

while (1)

{

delay_ms(3000);

OCR1BH=0x06; // 45 degree -1

OCR1BL=0x65;

delay_ms(3000);

OCR1BH=0x03; // 90 degree -2

OCR1BL=0xE8;

delay_ms(3000);

OCR1BH=0x07; // 0 degree Initial Position -3

OCR1BL=0xd0;

delay_ms(3000);

};

}

**********************************************************

// Project: 9 DC Servo Motor Control with delay program

**********************************************************

#include <mega88.h>

#include <delay.h>

void main(void)

{

#pragma optsize-

CLKPR=0x80;

CLKPR=0x00;

#ifdef _OPTIMIZE_SIZE_

#pragma optsize+

#endif

PORTD=0x00;

DDRD.3=0x1;

PORTD.3=0x1;

delay_us(388); //0 degrees

PORTD.3=0x0;

delay_ms(1000);

PORTD.3=0x1;

delay_us(1264); //90 degrees

PORTD.3=0x0;

delay_ms(1000);

PORTD.3=0x1;

delay_us(2140); //180 degrees

PORTD.3=0x0;

delay_ms(1000);

PORTD.3=0x1;

delay_us(1264); //90 degrees

PORTD.3=0x0;

delay_ms(1000);

while (1)

{

};

}