Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Serial Communication ATmega32 Codevision AVR

Status
Not open for further replies.

Nadeera

Newbie level 3
Joined
Feb 17, 2010
Messages
4
Helped
2
Reputation
5
Reaction score
3
Trophy points
1,283
Location
Sri Lanka
Activity points
1,347
Re: Serial Communication ATmega32 Codevision AVR - My Code

Hi !

I am using Codevision AVR in one of my university projects and need to check the serial communication done through the PC and the ATMega32.

I want to send a specific data to ATMega32 and the ATMega32 should light perticular LEDs identifying the command.

I connected RS232 with the MAX 232 circuit and found out that the connection is ok and the MAX 232 is working properly.

But Im afraid I think that there is something wrong with the program.

Pls help me to solve the problem

I have attached my circuits schematic diagram and the code herewith.

Added after 3 minutes:

/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.3 Standard
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 4/22/2010
Author :
Company :
Comments:


Chip type : ATmega32
Program type : Application
Clock frequency : 16.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 512
*****************************************************/

#include <mega32.h>
#include <delay.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

// I2C Bus functions
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=1
.equ __scl_bit=0
#endasm
#include <i2c.h>
//#define SRF10_BUS_ADDRESS 0xF2
#define LCD03_BUS_ADDRESS 0xC6

#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// USART Receiver buffer
#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE<256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif

// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;

// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
};
};
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif



char indata;



initialize(){
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
//ICR1H=0x00;
//ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

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

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// I2C Bus initialization
i2c_init();

}



void main(void)
{

initialize();



while (1)
{



while(rx_counter>0) // A command has been found
{

indata=getchar();

if (indata==1)
{
PORTB.0=0;
}
else if (indata==2)
{
PORTB.1=0;
}
else if (indata==3)
{
PORTB.2=0;
}
else if (indata==4)
{
PORTB.3=0;
}
else if (indata==5)
{
PORTB.4=0;
}
else if (indata==6)
{
PORTB.5=0;
}
else if (indata==7)
{
PORTB.6=0;
}
else if (indata==8)
{
PORTB.7=0;
}
}


}
}
 

    galib96

    Points: 1
    please give me the Proteus design. that will very help full for me. thank you
Try Implementing it in a program such as Proteus. You can then simulate with a virtual terminal.....
 
Thanks. I have not worked with Proteous. Talking is not allowed. According to my knowledge Proteous only helps in identifying if any configuration fault. Isn't it ?

I will check it on. I guess the problem is with the code and not with the connections.

I face a difficulty in uploading my schematic diagram. Otherwise I could have uploaded the schematic diagram of the circuit.
 
Thanks. I have not worked with Proteous. Talking is not allowed. According to my knowledge Proteous only helps in identifying if any configuration fault. Isn't it ?

What do you mean ''Talking is not allowed.''?
 
  • Like
Reactions: elec_org

    elec_org

    Points: 2
    Helpful Answer Positive Rating

    galib96

    Points: 2
    Helpful Answer Positive Rating
Pls neglect that sentence. I said so because my knowledge about Proteous is very low. Somehow Im installing proteous now. Thanks again.
 
Oh ok. If you need help let me know. It quite easy to use. If you think i have been helpful please click 'helped' below.
 
Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top