Split from: ADC value to delay

Go To Last Post
14 posts / 0 new
Author
Message
#1
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Hello friends, I am new to avr microcontroller, I am measuring AC voltage using atmega8 and displayed it on a 3digit seven segment display. Due to delay() in ADC value reading. My 3 digit seven segment display is flickering. Please help me to sort the problem.

Last Edited: Thu. Nov 19, 2020 - 01:07 PM
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 1

Why did you tack onto an unrelated thread from 4 years ago???

Start a new thread (or maybe a moderator will come along and fix it for you)

 

As for your problem, you're going to have to tell us a bit more about you code and your hardware. With the information you've currently given, we have no idea of where to start.

 

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Nittan wrote:
I am measuring AC voltage using atmega8 and displayed it on a 3digit seven segment display. Due to delay() in ADC value reading. My 3 digit seven segment display is flickering.

It sounds like you have taken a simplistic method, nothing wrong with that, of read adc and then display it.

Instead, use a periodic timer (CTC mode) interrupt, in the ISR() do your display multiplexing there, and in main() do your ADC measurements, so now the timing of the ADC readings do not upset your display timing. 

 

Jim

 

 

(Possum Lodge oath) Quando omni flunkus, moritati.

"I thought growing old would take longer"

 

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Nittan wrote:
My 3 digit seven segment display is flickering.

You, really have not described what you are doing, but here's a guess.

You are updating the display for every reading so that minor variations in the readings are causing LSBs to "flicker."

In addition to the previous suggestions, try averaging several ADC readings and update the display only a few times a second (1 to 5 is usually fine for the hairy ape looking at the display).

David

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

 I am measuring AC voltage

How?  The ADC can't handle negative voltages directly---what kind of circuit are you using?  A bridge rectifier?

 

 Due to delay() in ADC value reading.

WHAT are you talking about...the delay would make it better, you want a slow update rate.    Why do you ask a question and leave out the  

When in the dark remember-the future looks brighter than ever.   I look forward to being able to predict the future!

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

avrcandies wrote:
Why do you ask a question and leave out the  
  and leave out the end of the sentence perhaps? wink

 

(Possum Lodge oath) Quando omni flunkus, moritati.

"I thought growing old would take longer"

 

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

here is code     

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include<math.h>
void vin();
void digita();
void digitb();
void digitc();
void delays();
int s1;
int s2;
int s3;
int A1=0;
unsigned int v1;
int main(void)
{
    DDRD = 0b11111111;
    DDRC = 0b00000000;
    DDRB = 0b11111111;           
    while (1) 
    {    
            for(int i=0; i<5; i++)
            {
                vin();
                for(int m=0; m<30; m++)
                {
                    digita();
                    digitb();
                    digitc();
                }
            
            }

   }                                              
}

   void delays()
     {
         PORTD |=  (1<<PD7);
         PORTB |=  (1<<PB0);
         PORTB |=  (1<<PB1);
     }
   void digita()
   {
       switch(s1)
       {
           case 0:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);    //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~ (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD |=  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 1:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD |= (1<<PD6);     //A
           PORTD &=~ (1<<PD1);    //B
           PORTD &=~ (1<<PD4);    //C
           PORTD |= (1<<PD2);     //D
           PORTB |= (1<<PB7);     //E
           PORTD |= (1<<PD5);     //F
           PORTD |=  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 2:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);    //B
           PORTD |= (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~(1<<PB7);     //E
           PORTD |= (1<<PD5);     //F
           PORTD &=~(1<<PD3);   //G
           _delay_ms(5);
           break;
           case 3:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD |= (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 4:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD |= (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD |= (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 5:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD |= (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 6:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD |= (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~ (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 7:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD |= (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD |= (1<<PD5);    //F
           PORTD |= (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 8:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~ (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 9:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
       }
   }
   void digitb()
   {
       switch(s2)
       {
           
           case 0:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);    //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~ (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD |=  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 1:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD |= (1<<PD6);     //A
           PORTD &=~ (1<<PD1);    //B
           PORTD &=~ (1<<PD4);    //C
           PORTD |= (1<<PD2);     //D
           PORTB |= (1<<PB7);     //E
           PORTD |= (1<<PD5);     //F
           PORTD |=  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 2:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);    //B
           PORTD |= (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~(1<<PB7);     //E
           PORTD |= (1<<PD5);     //F
           PORTD &=~(1<<PD3);   //G
           _delay_ms(5);
           break;
           case 3:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD |= (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 4:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD |= (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD |= (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 5:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD |= (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 6:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD |= (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~ (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 7:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD |= (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD |= (1<<PD5);    //F
           PORTD |= (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 8:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~ (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 9:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
       }
   }
   void digitc()
   {
       switch(s3)
       {
           case 0:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);    //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~ (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD |=  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 1:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD |= (1<<PD6);     //A
           PORTD &=~ (1<<PD1);    //B
           PORTD &=~ (1<<PD4);    //C
           PORTD |= (1<<PD2);     //D
           PORTB |= (1<<PB7);     //E
           PORTD |= (1<<PD5);     //F
           PORTD |=  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 2:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);    //B
           PORTD |= (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~(1<<PB7);     //E
           PORTD |= (1<<PD5);     //F
           PORTD &=~(1<<PD3);   //G
           _delay_ms(5);
           break;
           case 3:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD |= (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 4:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD |= (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD |= (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 5:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD |= (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 6:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD |= (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~ (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);           
           break;
           case 7:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD |= (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD |= (1<<PD5);    //F
           PORTD |= (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 8:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~ (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 9:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
     

      PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);         
           break;
       }
   }
   void vin()
   {
       int x;
       int y;
       int a[40];
       int A = 0;
       ADCSRA=(1<<ADEN) |(1<<ADPS2) |(1<<ADPS1) |(1<<ADPS0);  //Enable ADC & division factor 128
       ADMUX=(1<<REFS0);       
       for(int i=0; i<41; i++)
       {
           ADMUX|= 1;
           ADCSRA |= (1<<ADSC); //Start conversion
           while(ADCSRA & (1<<ADSC));
           a[i] = ADC;
           _delay_ms(0.5);       // For 20ms  one cycle voltage measurement
           if(A<a[i])
           {
               A=a[i];
           }
       }    
       A1=A;   
       v1=A1*0.293255132;
       s3=v1-(v1/10)*10;
       x=v1/10;
       s1=x-(x/10)*10;
       y=x/10;
       s2=y-(y/10)*10;
   }

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I am getting in trouble due to flickering in the three digit seven segment display. Here is code

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include<math.h>
void vin();
void digita();
void digitb();
void digitc();
void delays();
int s1;
int s2;
int s3;
int A1=0;
unsigned int v1;
int main(void)
{
    DDRD = 0b11111111;
    DDRC = 0b00000000;
    DDRB = 0b11111111;           
    while (1) 
    {    
            for(int i=0; i<5; i++)
            {
                vin();
                for(int m=0; m<30; m++)
                {
                    digita();
                    digitb();
                    digitc();
                }
            
            }

   }                                              
}

   void delays()
     {
         PORTD |=  (1<<PD7);
         PORTB |=  (1<<PB0);
         PORTB |=  (1<<PB1);
     }
   void digita()
   {
       switch(s1)
       {
           case 0:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);    //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~ (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD |=  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 1:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD |= (1<<PD6);     //A
           PORTD &=~ (1<<PD1);    //B
           PORTD &=~ (1<<PD4);    //C
           PORTD |= (1<<PD2);     //D
           PORTB |= (1<<PB7);     //E
           PORTD |= (1<<PD5);     //F
           PORTD |=  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 2:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);    //B
           PORTD |= (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~(1<<PB7);     //E
           PORTD |= (1<<PD5);     //F
           PORTD &=~(1<<PD3);   //G
           _delay_ms(5);
           break;
           case 3:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD |= (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 4:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD |= (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD |= (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 5:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD |= (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 6:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD |= (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~ (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 7:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD |= (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD |= (1<<PD5);    //F
           PORTD |= (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 8:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~ (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 9:
           PORTD &=~(1<<PD7);
           PORTB |= (1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
       }
   }
   void digitb()
   {
       switch(s2)
       {
           
           case 0:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);    //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~ (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD |=  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 1:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD |= (1<<PD6);     //A
           PORTD &=~ (1<<PD1);    //B
           PORTD &=~ (1<<PD4);    //C
           PORTD |= (1<<PD2);     //D
           PORTB |= (1<<PB7);     //E
           PORTD |= (1<<PD5);     //F
           PORTD |=  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 2:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);    //B
           PORTD |= (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~(1<<PB7);     //E
           PORTD |= (1<<PD5);     //F
           PORTD &=~(1<<PD3);   //G
           _delay_ms(5);
           break;
           case 3:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD |= (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 4:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD |= (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD |= (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 5:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD |= (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 6:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD |= (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~ (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 7:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD |= (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD |= (1<<PD5);    //F
           PORTD |= (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 8:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~ (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 9:
           PORTD |= (1<<PD7);
           PORTB &=~(1<<PB0);
           PORTB |= (1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
       }
   }
   void digitc()
   {
       switch(s3)
       {
           case 0:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);    //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~ (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD |=  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 1:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD |= (1<<PD6);     //A
           PORTD &=~ (1<<PD1);    //B
           PORTD &=~ (1<<PD4);    //C
           PORTD |= (1<<PD2);     //D
           PORTB |= (1<<PB7);     //E
           PORTD |= (1<<PD5);     //F
           PORTD |=  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 2:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);    //B
           PORTD |= (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~(1<<PB7);     //E
           PORTD |= (1<<PD5);     //F
           PORTD &=~(1<<PD3);   //G
           _delay_ms(5);
           break;
           case 3:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD |= (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 4:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD |= (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD |= (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 5:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD |= (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 6:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD |= (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~ (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);           
           break;
           case 7:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD |= (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD |= (1<<PD5);    //F
           PORTD |= (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 8:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~ (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);
           break;
           case 9:
           PORTD |= (1<<PD7);
           PORTB |= (1<<PB0);
           PORTB &=~(1<<PB1);
           PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB |= (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G
           _delay_ms(5);         
           break;
       }
   }
   void vin()
   {
       int x;
       int y;
       int a[40];
       int A = 0;
       ADCSRA=(1<<ADEN) |(1<<ADPS2) |(1<<ADPS1) |(1<<ADPS0);  //Enable ADC & division factor 128
       ADMUX=(1<<REFS0);       
       for(int i=0; i<41; i++)
       {
           ADMUX|= 1;
           ADCSRA |= (1<<ADSC); //Start conversion
           while(ADCSRA & (1<<ADSC));
           a[i] = ADC;
           _delay_ms(0.5);       // For 20ms  one cycle voltage measurement
           if(A<a[i])
           {
               A=a[i];
           }
       }    
       A1=A;   
       v1=A1*0.293255132;
       s3=v1-(v1/10)*10;
       x=v1/10;
       s1=x-(x/10)*10;
       y=x/10;
       s2=y-(y/10)*10;
   }

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I am using half rectified AC to measure voltage

 

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 1

  and leave out the end of the sentence perhaps? wink

That was done on  so that it is apparent what happens when 

 

Too many times important details seem  

When in the dark remember-the future looks brighter than ever.   I look forward to being able to predict the future!

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

This is completely ridiculous...probably will do you good to start over & build some decent experience 

 

 PORTD &=~ (1<<PD6);    //A
           PORTD &=~ (1<<PD1);   //B
           PORTD &=~ (1<<PD4);    //C
           PORTD &=~ (1<<PD2);    //D
           PORTB &=~ (1<<PB7);    //E
           PORTD &=~ (1<<PD5);    //F
           PORTD &=~  (1<<PD3);    //G

 

should be:   myvalue   |= (1 << sega)  |  (1 << segb)  |  (0 << segc)  |  (0 << segd) |  (0 << sege)  |  (1 << segf) |  (1 << segg)  

                  myvalue &= ~( (0 << sega)  |  (1 << segb)  |  (0 << segc)  |  (0 << segd) |  (1 << sege)  |  (1 << segf) |  (1 << segg))   ...whatever

  

not sure why you need  anything than SETTING the bits you want to turn on....if not set, they will be off:

          you dont't need 10 different satatmetns...one per port.

 

set the needed values first (like myvalue)...then set the port to it

 

PORTD=myvalue

 

you don't want to flicker as the bits get changed one by one...set them all at once to be more correct.

 

                   

When in the dark remember-the future looks brighter than ever.   I look forward to being able to predict the future!

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Also build a lookup bit table for the segment patterns so you just read one byte out of an array and write it to the port.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

clawson wrote:
Also build a lookup bit table for the segment patterns so you just read one byte out of an array and write it to the port.

+99

 

eg, http://www.8052mcu.com/forum/rea...

Top Tips:

  1. How to properly post source code - see: https://www.avrfreaks.net/comment... - also how to properly include images/pictures
  2. "Garbage" characters on a serial terminal are (almost?) invariably due to wrong baud rate - see: https://learn.sparkfun.com/tutorials/serial-communication
  3. Wrong baud rate is usually due to not running at the speed you thought; check by blinking a LED to see if you get the speed you expected
  4. Difference between a crystal, and a crystal oscillatorhttps://www.avrfreaks.net/comment...
  5. When your question is resolved, mark the solution: https://www.avrfreaks.net/comment...
  6. Beginner's "Getting Started" tips: https://www.avrfreaks.net/comment...
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

All of the above are great suggestions; however, it looks like the OP has placed the segments across multiple Ports.

This serves to complicate the process, but the concepts above still apply...

 

 

David