Eine Siebensegmentanzeige ansteuern
Jetzt gehts richtig los. Eine Siebensegmentanzeige sieht folgendermaßen aus:
Jede Anzeige hat einen gemeinsamen Anschluss (das kann je nach Bauart eine “gemeinsame Anode” oder eine “gemeinsame Kathode” sein). Die anderen sieben Anschlüsse steuern je ein Segment. Eine Siebensegmentanzeige ist also nichts weiter als sieben Lampen in einem Gehäuse. Soweit alles klar?
Jeder weiß ja, dass man für eine LED zwei Potentiale braucht. Der Volksmund spricht von + und – Minuspol. Mit dem Prozessor heisst das ganze “Low” und “High”. Also “5V” und “0V”. Wenn wir also ein Segment zum leuchten bringen wollen, müssen wir an den gemeinsamem Anschluss genau das Gegenteil anlegen, wie an den Steuereingang. Wollen wir die Lampe abschalten brauchen wir das gleiche Potential.
Möchten wir beispielsweise ein “P” anzeigen, müssen wir alse folgende Segmente leuchten lassen: a,b,g,f, und c.
An die Arbeit: So sieht das Programm aus:
#include <avr/io.h>
#include <avr/delay.h>
int main ( void ) {
//Port C auf Ausgang schalten (Auswahl)
DDRC = 0xFF;
//Port A auf Ausgang schalten (Daten)
DDRA = 0xFF;
while ( 1 ) {
//Ein “P” auf die Anzeige
PORTC = 0b00001000;
PORTA = 0b00001100;
_delay_ms(1);
}
}
Und nun die Erklärung:
– In den ersten Teilen binden wir wieder die benötigten Header Dateien ein. Zusätzlich zu der io.h brauchen wir noch die “delay.h”. Dies erlaubt uns eine kleine Warteschleife einzubauen
– Die Initialisierung ist sehr wichtig. Der Port “A” und “C” wird auf Ausgang geschaltet. Simples Prinzip: Mit dem “C-Port” geben wir überhaupt Strom auf den gemeinsamen Port. So schalten wir sie ein.
Mit dem “A-Port” sagen wir welche Segmente leuchten sollen.
– In der Hauptschleife kommt nun die eigentlich Ausgabe: Im Klartext heisst das folgendes:
PORTC = Pin 4 auf “High”, alles andere auf “Low”
PORTA = Pin 3 & Pin 4 auf “Hight”, alles andere auf “Low”
Was sagt uns das? Pin 3 & 4 entspechen “c” & “d”, und genau die haben gleiches Potential wie der gemeinsame Pin -> Sie leuchten nicht =) Alles andere hat einen Potentialunterschied und leuchtet.
Viel Spaß beim Ausprobieren!
Ok,
schön gemacht,
ich denke aber dass man keine while benötig um ein p leuchten zu lassen, soweit ich weis reicht der einmalige befehl an den controller die pins mit strom zu versorgen, das tun sie dann bis sie gegenteiliges erhalten oder? wenn ja braucht man keine while da der gleiche befehl jedesmal gesendet werden würde, das wäre etwa so als würde ich dem lichtschalter jede sekunde sagen geh an obwohl er schon beim ersten mal angegangen ist.
wenn nein dann ist mir aber der delay unschlüssig weil warum eine ms warten und dann wieder den befehl ausführen?
mfg
wenn du willst kann ich dir mal nen tutorial für z.b. laufschrift auflegen…