CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

A/D Conversion Causing Noise in RS232 Data

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
weg22



Joined: 08 Jul 2005
Posts: 91

View user's profile Send private message

A/D Conversion Causing Noise in RS232 Data
PostPosted: Thu Feb 01, 2007 10:50 am     Reply with quote

Hi all,

I'm reading in data from 2 sensors:

1. IR sensor using A/D conversion
2. SONAR sensor using software RS232

If I disconnect the IR sensor, the SONAR sensor is read flawlessly. However, if I connect the IR sensor then every 10th reading or so the SONAR data will jump 5-10 inches when holding the sensor perfectly still.

I'm powering everything off the same battery which I cannot change. I also have a 0.1 uF cap between the signal pin and ground of the IR sensor. Any suggestions on how I could get rid of the little bit of noise would be appreciated.

Thanks,
-weg
newguy



Joined: 24 Jun 2004
Posts: 1911

View user's profile Send private message

PostPosted: Thu Feb 01, 2007 11:09 am     Reply with quote

I've used a couple of ultrasonic distance measurement sensors and they're pretty sensitive to power line variations. They tend to consume a lot of current when they're transmitting. Do you have a relatively large cap on the sonar sensor's power line? If not, try a 10 uF+, and place it close to the sensor.

What is your timing like? What I mean is how do you do your measurements, how often, and in what order? ie. read IR sensor, delay xxxx us/ms, read distance sensor, delay yyyy, repeat. Do you allow some settling time after you change a/d channel before reading the channel? Do you delay long enough to allow for the (relatively) long round trip delay of the sound wave?
weg22



Joined: 08 Jul 2005
Posts: 91

View user's profile Send private message

PostPosted: Thu Feb 01, 2007 11:24 am     Reply with quote

My code is below:

Code:

#include <16F877>
#device adc=8
#include <stdlib.h>
#include <math.h>

#define LED PIN_C0

#fuses HS,NOWDT,NOPROTECT,PUT,NOLVP
#use delay(clock=10000000)
#use rs232(baud=9600, xmit=PIN_B1, rcv=PIN_B0, stream=sonar1, INVERT) // SONAR #1
#use rs232(baud=9600, xmit=PIN_E1, rcv=PIN_E2, stream=PC) // TO PC


main()
{
   // IR
   unsigned int ir_raw1=0;
   
   // SONAR
   int i=0;
    char c;
   char sonarData[4];
   unsigned int sonar_raw1=0, sonar_raw2=0, sonar_raw3=0;


   // setup to do A/D conversion
    setup_adc_ports(RA0_RA1_RA3_ANALOG);
   setup_adc(ADC_CLOCK_DIV_8);


   output_high(LED);
   delay_ms(1500);
    output_low(LED);

   while(1)
   {
      // read in value on AN0
      set_adc_channel(0);
      delay_us(50);
      ir_raw1 = read_adc();

      // SENSOR #1
      c = 'a';
        while(c != 'R') {c = fgetc(sonar1);} // sonar outputs data as "Rxyz"
        i=0;
        for(i=0; i<=2; i++) // get next 3 bytes
      {
            sonarData[i] = fgetc(sonar1);
      }
        if(isdigit(sonarData[0]) && isdigit(sonarData[1]) && isdigit(sonarData[2]))
      {
         sonarData[3] = '\0';
            sonar_raw1 = atoi(sonarData);
      }

      fprintf(PC, "%u, ", ir_raw1);
      fprintf(PC, "%u\r\n", sonar_raw1);
      
   }

} // end of main
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group