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.
Split from: ADC value to delay
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.
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
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).
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
Why do you ask a question and leave out the

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;
}
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;
}
I am using half rectified AC to measure voltage
and leave out the end of the sentence perhaps?
That was done on so that it is apparent what happens when
Too many times important details seem
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.
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.
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
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...