PDA

View Full Version : Help with setting USART using MAX232 and CodeVision AVR



mk
07-05-2008, 02:40 AM
Im using the circuit for setting up usart as shown in the circuit diagram:

http://www.coolcircuit.com/circuit/rs232_driver/max232.gifhttp://www.coolcircuit.com/circuit/rs232_driver/max232.gifhttp://www.coolcircuit.com/circuit/rs232_driver/max232.gif

Im using atmega16 with codevisonavr.
At CodeVision, CodeWizard, ive done following settings:

Reciever Enabled
Transmitter Enabeld
BaudRate=9600
Connection Parametres =8Data, 1 stop, no parity
Mode=Asynchronous

At the terminal window of cvavr ( and in another attempt) at the settings of hyper terminal also, ive done the same settings oof 9600, 8data, 1 stop, no parity, asynchronous mode

But I cant recieve any kind of data.

Except for the automaticly generated code, Ive just written 1 line myself to check USART

putchar('f');

For Your refrence Im posting the complete code.

/************************************************** ***
This program was produced by the
CodeWizardAVR V2.03.3 Evaluation
Automatic Program Generator
Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 7/2/2008
Author : Freeware, for evaluation and non-commercial use only
Company :
Comments:


Chip type : ATmega16
Program type : Application
Clock frequency : 8.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
************************************************** ***/

#include <mega16.h>

// Standard Input/Output functions
#include <stdio.h>

#include <delay.h>

#define ADC_VREF_TYPE 0x20

// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// 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=0x00;

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

// 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;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

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

// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;

while (1)
{
PORTC=read_adc(1);

putchar('f');
};
}




Am I missing something? or is there any fault in my circuit, code, or techinque?

ppppking04
07-05-2008, 12:01 PM
Are you using a 8MHz crystal?
Even if you have connected the crystal, have you set the fuse bits to external crystal mode?

Check your circuit for loose connections. Try this if possible

Disconnect the uC. Short the Rx and Tx pins of the max232 on the TTL side (DONT short one pin from TTL and one from RS-232 side!!!!). Type a character on the terminal, see if its echoed back on the screen. If it does, you can be sure your MAX232 side circuit is working.

mk
08-14-2008, 02:08 PM
ive now tried with various different schemetics given on internet.
ive tried using .1uF electrolyte capacitors, ceramic cepacitors, etc. tried using 10uF capacitors as well (just in case that matters). ive also tried swiping the rx and tx from serial cable to mcu. ive aso tried connecting the silver casing of serial cable extension to ground ( as suggested in some site for programmer)

ive tried removing the MCU, and tried to check just the max232 and this is what ive observed:

1) if i type "A" on keyboard, at the hyper terminal side, i dont get any thing.
2) if i short tx and rx at the serial cable side, then if I type "A" then i get "A" on hyperterminal.

-------> I infer that serial port of my computer is ok.

3) if i now short the rx and tx at the other side (TTL), on typing "A" on keyboard, i get "A" on hyper terminal

-------> if im not wrong then i should be recieving "AA", isn't it?

Please tell me where am I going wrong?
Does different Capacitance value mattters much here?
Does using ceramic type capacitance (tried .1uF (coded 104)) or electrolytic (tried .1uF, 1uF, 10uF) type matters?
Also, please suggest me some tried and working schemetic.