Author Topic: Help with setting USART using MAX232 and CodeVision AVR  (Read 13745 times)

0 Members and 1 Guest are viewing this topic.

Offline mohitkhanna3v_infinateTopic starter

  • Beginner
  • *
  • Posts: 6
  • Helpful? 0
Help with setting USART using MAX232 and CodeVision AVR
« on: July 04, 2008, 07:36:36 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 ot 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?

Offline Admin

  • Administrator
  • Supreme Robot
  • *****
  • Posts: 11,703
  • Helpful? 173
    • Society of Robots
Re: Help with setting USART using MAX232 and CodeVision AVR
« Reply #1 on: July 25, 2008, 07:18:15 PM »
Check the lines with an oscope.

Also, remove the microcontroller, and just connect pins 11 and 12. Send a command, and see if you receive the same commands that you send.


Offline Luco

  • Beginner
  • *
  • Posts: 4
  • Helpful? 0
Re: Help with setting USART using MAX232 and CodeVision AVR
« Reply #2 on: July 25, 2008, 08:38:35 PM »
The circuit link wont work 8(
Make sure you set the clock speed right in the code generator, also the internal oscillator is not precise and you will have many errors in your transition.

Here is a tutorial that might help you with the max232 http://www.sparkfun.com/commerce/tutorial_info.php?tutorials_id=57&sipp=1&page=4
« Last Edit: July 25, 2008, 08:40:48 PM by Luco »

Offline mohitkhanna3v_infinateTopic starter

  • Beginner
  • *
  • Posts: 6
  • Helpful? 0
Re: Help with setting USART using MAX232 and CodeVision AVR
« Reply #3 on: July 10, 2009, 01:13:48 PM »
hi guys! After one year, I'm back now with another project but again landed into the same problem with USART. However, its solved now and am sharing my experience of what went wrong and where, so that it may benefit others.

In codevisionAVR, when we set the clock speed in the Chip menu option of the CodeWizard, then its value is only used for the calculation purposes of various variables like the UBRR, etc. It does'nt gets changed in the fuse bits settings, and hence our MCU ALWAYS run at the Default 1 MHz internal clock.

Till now I was thinking that since Ive set the clock speed in the Menu, so my MCU is running at that speed. But I was wrong, and thats why USART did not work. Because all values for USART were calculated from the value of clock I gave in CHIP menu option, and not the acctual clock at which the MCU was acctually running at.

Suggestion:

If using CodevisionAVR, either set the CHIP clock option to 1 MHz, so that values of other variables are calculated correctly. (And now for USART, Transmission is not possible at 9600 bps, but can be done efficiently at 1200bps)

OR

Set the fuse bits using some software like PonyProg. Refer to datasheet for the fuse bits settings.

Hope this helps someone...

 


Get Your Ad Here

data_list