PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 7 Segment Anzeige



Aslan
18.08.2009, 18:17
Hallo,
ich habe ein 7 Segement Anzeige mit Common Anode.
Ich wollte es direkt mit einer A90S2313 antreiben. Die Pins habe ich
mit der Vorwiderständen an den PORTB(als Ausgang programmiert) anschlossen.

Und wollte jetzt wissen wie ich die gemeinsame Anode anschliessen muss.
Wenn ich es an plus oder GND anschliesse bringt es nichts.

Grüsse,
Ali

Hubert.G
18.08.2009, 18:34
Wenn es Common Anode ist, dann muss diese an Plus. Die Anzeige leuchtet wenn der Ausgang auf low ist.

Aslan
18.08.2009, 21:17
Haalo Hurbet,
danke für deine schnelle Antwort.
Jetzt habe ich das Problem, das es immer Leuchtet. Nur wenn ich die Taste drücke wird es nur heller. Es sollte eigentlich nur dann leuchten wenn die Taste bestätigt ist.

Grüsse
Ali

Hubert.G
19.08.2009, 09:09
Da ist dann was falsch. Zeig einmal deine Schaltung und das Programm.

Aslan
19.08.2009, 12:04
Meine Schaltung hatte fehler, hab sie jetzt korrigiert.
Und jetzt funktioniert es auch.

Habe aber jetzt eine andere Problem, unswar wenn ich die Taste
einmal betätige soll die Anzeige eins und wenn ich es
zum zweiten mal bestätige 2 Anzeigen. Aber wenn ich es gedrückt halte zählt es weiter.
Wie kann ich es verhindern das es weiter zählt??






#include "avr/io.h"
#include <util/delay.h>
#ifndef F_CPU
#warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert"
#define F_CPU 4000000UL /* Quarz mit 3.6864 Mhz */
#endif

int main(void)
{


PORTD |= (1<<PD6);
DDRD &= ~(1<<PD6);

PORTB = 0xff;
DDRB = 0xff;

uint8_t i = 0;


while (1)
{

if (!( PIND & (1<<PIND6) )) //Wenn Taste betätigt
{
_delay_ms(50);
i= i + 1;

switch (i)
{

case 1 : PORTB = 0x4F;
break;
case 2 : PORTB = 0x12;
break;
case 3 : PORTB = 0x06;
break;
case 4 : PORTB = 0x4C;
break;
case 5 : PORTB = 0x24;
break;
case 6 : PORTB = 0x20;
break;
case 7 : PORTB = 0x0F;
break;
case 8 : PORTB = 0x00;
break;
case 9 : PORTB = 0x04;
i=0;
break;


}
}





}
}


Grüsse Ali

Hubert.G
19.08.2009, 12:48
Ich kann nicht sagen ob es das gelbe vom Ei ist, aber es ist zumindest eine Möglichkeit.

#include "avr/io.h"
#include <util/delay.h>
#ifndef F_CPU
#warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert"
#define F_CPU 4000000UL /* Quarz mit 3.6864 Mhz */
#endif
unsigned char Tastenflag =1;

int main(void)
{


PORTD |= (1<<PD6);
DDRD &= ~(1<<PD6);

PORTB = 0xff;
DDRB = 0xff;

uint8_t i = 0;


while (1)
{

if((!(Tastenflag))&&( PIND & (1<<PIND6))){ // Wenn Taste nicht gedrückt und Tastenflag=0
Tastenflag =1; // Tastenflag wieder setzen
}
if ((Tastenflag)&&(!( PIND & (1<<PIND6) ))) //Wenn Taste betätigt und Tasteflag gesetzt
{
// _delay_ms(50);
i= i + 1;
Tastenflag = 0; // Tastenflag auf 0 setzten
switch (i)
{

case 1 : PORTB = 0x4F;
break;
case 2 : PORTB = 0x12;
break;
case 3 : PORTB = 0x06;
break;
case 4 : PORTB = 0x4C;
break;
case 5 : PORTB = 0x24;
break;
case 6 : PORTB = 0x20;
break;
case 7 : PORTB = 0x0F;
break;
case 8 : PORTB = 0x00;
break;
case 9 : PORTB = 0x04;
i=0;
break;


}
}

Besserwessi
19.08.2009, 17:30
Die verzögerung hat schon ihren Sinn zum Entprellen. Da sollte auch beim 2 ten fall eine rein.

Man sollte wohl auch noch den Fall I = 10 vorsehen, und erst da I wieder auf 0 setzen.

Aslan
19.08.2009, 20:48
So jetzt ist meine Code fertig \:D/ .
Ich bedanke mich euch beiden für eure Hilfe recht herzlich.

Und so sieht meine fertige Code aus:


#include "avr/io.h"
#include <util/delay.h>



unsigned char Tastenflag =1;

int main(void)
{


PORTD |= (1<<PD6);
DDRD &= ~(1<<PD6);

PORTB = 0x01;
DDRB = 0xff;

uint8_t i = 0;


while (1)
{

if((!(Tastenflag))&&( PIND & (1<<PIND6)))
{ // Wenn Taste nicht gedrückt und Tastenflag=0
Tastenflag =1; // Tastenflag wieder setzen

_delay_ms(100);

}


if ((Tastenflag)&&(!( PIND & (1<<PIND6) ))) //Wenn Taste betätigt und Tasteflag gesetzt
{

_delay_ms(100);

i +=1;

Tastenflag = 0; // Tastenflag auf 0 setzten

switch (i)
{


case 1 : PORTB = 0x4F;
break;
case 2 : PORTB = 0x12;
break;
case 3 : PORTB = 0x06;
break;
case 4 : PORTB = 0x4C;
break;
case 5 : PORTB = 0x24;
break;
case 6 : PORTB = 0x20;
break;
case 7 : PORTB = 0x0F;
break;
case 8 : PORTB = 0x00;
break;
case 9 : PORTB = 0x04;
break;
case 10 : PORTB = 0x08; // 10 = A
i=0;
break;


}

}

}
}



Grüsse Ali