Loading ...
Sorry, an error occurred while loading the content.

1815Re: [booksbybibin,www.booksbybibin.tk] Re: HAVING PROBLEM WITH ADC

Expand Messages
  • STEVEN HOLDER
    Aug 4 2:56 AM
    • 0 Attachment
      In your code, you are reading the a2d value from the registers, then you are doing a calculation based on the a2d registers (adcl, adch) once you have done a read the registers are cleared !!
       
      You read the value into k, then try to do a calculation based on the a2d registers you have just cleared, thats why it is always 0 !! i don't know if your calculations are right but use the value (k) you have measured.
       
      ie k = (((ADCL= 0*256 +ADCH)*4.5)/512  makes no sense, you cannot allocate a value to the ADCL register it is read only, !!!
       
      Regards


      --- On Mon, 3/8/09, Mihai Galos <mihaigalos@...> wrote:

      From: Mihai Galos <mihaigalos@...>
      Subject: [booksbybibin,www.booksbybibin.tk] Re: HAVING PROBLEM WITH ADC
      To: booksbybibin@yahoogroups.com
      Date: Monday, 3 August, 2009, 9:07 PM

       
      see my project on adc. Perhaps i will help.

      http://www.mihaigal os.ro/work/ Embedded/ Advanced/ temp2lcd/ readOn.html

      Regards,
      Mihai G.

      --- In booksbybibin@ yahoogroups. com, "danial_1000" <danial_1000@ ...> wrote:
      >
      > hi,
      > i m actually new to avr ,i want to read the analog voltage through avr
      > adc using avcc as a refrence and want to display it on terminal window
      > using UART of avr.i tried to do so but i don,t sucess to display the
      > correct digits on the bray's terminal window ,i connect a multi turn
      > potentometer to vary the analog level from 0 volts to +5 volts.when i
      > turn the pot i gets 00 ascii charcters on the screen .plz any body help
      > me i will be thankfull.
      > regards
      > dany
      >
      >
      >
      >
      > /*---------- --------- --------- --------- --------- --------- ---
      > ------------ -----HEADER FILES------- --------- --------- --------- ---
      > ------------ --------- --------- --------- --------- --------- -*/
      > #include <avr/io.h>
      > /*---------- --------- --------- --------- --------- --------- ---
      > ------------ -----PROTOTYPES- --------- --------- --------- --------
      > ------------ --------- --------- --------- --------- --------- -*/
      > void Init_ADC(void) ;
      > int Read_ADC(void) ;
      > void InitUART( unsigned char baudrate );
      > unsigned char ReceiveByte( void );
      > void TransmitByte( unsigned char data );
      > /*---------- --------- --------- --------- --------- --------- ---
      > ------------ -----MAIN FUNCTION---- --------- --------- --------- -----
      > ------------ --------- --------- --------- --------- --------- -*/
      >
      > int main(void)
      > {
      > int b,i,k;
      > unsigned char str[7]={'V', 'O','L',' T',':',' ',' '};//at starting some
      > backspace occurs
      > unsigned char del[2]={0x08, 0X08}; //for deleting previous reading
      > //serial port initiliasation
      > InitUART( 207 ); //8Mhz 2400 8n1
      > //ADC startups
      > Init_ADC();
      > //Read_ADC(void)
      > //sending the string
      >
      > for(i=0;i<7; i++)
      > {
      > TransmitByte( str[i]);
      > }
      > b=0;
      >
      > do
      > {
      > k=Read_ADC() ;
      > if(k!=b)
      > {
      > //first delete the previous values for uart
      > for(i=0;i<2; i++)
      > {
      > TransmitByte( del[i]);
      > }
      >
      > k=(((ADCL=0* 256+ADCH) *4.5)/512) ;
      > TransmitByte( k+0x30); //0x30 have been added to display ascii
      > TransmitByte( k+0x30);
      > TransmitByte( k+0x30);
      > }
      > }
      > while(1);
      > return o;
      > }
      > /*---------- --------- --------- --------- --------- --------- ---
      > ------------ --FUNCTION TO INIT_ADC---- --------- --------- --------- -----
      > ------------ --------- --------- --------- --------- --------- -*/
      > void Init_ADC(void)
      > {
      >
      > ADMUX=0;//SELECTING CHANNEL0
      > ADCSRA=0;
      > ADMUX|=(1<<ADLAR) | (1<<REFS0)) ;
      > // AREF IS AVCC AND THE CONVERSION IS LEFT ADJUSTED
      > ADCSRA|=(1<< ADEN) | (1<<ADPS2) | (1<<ADPS0) | (1<<ADPS1) ; //ADC
      > PRESCALLER IS 128
      > }
      > /*---------- --------- --------- --------- --------- --------- ---
      > ------------ --FUNCTION TO READ_ADC---- --------- --------- --------- -----
      > ------------ --------- --------- --------- --------- --------- -*/
      > int Read_ADC(void)
      > {
      > ADCSRA|=(1<< ADSC); //start conversion
      > while(!((ADCSRA & (1<<ADIF));
      > return ADCH;
      > }
      > /*---------- --------- --------- --------- --------- --------- ---
      > ------------ FUNCTIONS TO Initialize UART-------- --------- ---------
      > ------------ --------- --------- --------- --------- --------- -*/
      >
      > void InitUART( unsigned char baudrate )
      > {
      > UBRRL = baudrate; /* Set the baud rate */
      > UCSRB = (UCSRB | (1<<RXEN) | (1<<TXEN) ); /* Enable UART receiver
      > and transmitter */
      > }
      > /*---------- --------- --------- --------- --------- --------- ---
      > ------------ FUNCTIONS TO READ UART-------- --------- --------- -----
      > ------------ --------- --------- --------- --------- --------- -*/
      > unsigned char ReceiveByte( void )
      > {
      > while ( !(UCSRA & (1<<RXC))); /* Wait for incomming data */
      > return UDR;/* Return the data */
      > }
      >
      > /*---------- --------- --------- --------- --------- --------- ---
      > ------------ FUNCTIONS TO WRITE UART-------- --------- --------- -----
      > ------------ --------- --------- --------- --------- --------- -*/
      > void TransmitByte( unsigned char data )
      > {
      > while ( !(UCSRA & (1<<UDRE))); /* Wait for empty transmit
      > buffer */
      > UDR = data; /* Start transmittion */
      > }
      >

    • Show all 9 messages in this topic