PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 7-Segment Display ansteuern



ts230
16.06.2008, 18:37
Moin Moin,
Ich habe eine Frage:

Wie kann ich mit einem ATMEGA32 ein 8-Stelliges 7Segment-Display ansteuern?
Geht das auch in C?

Hier ein paar Daten über mein Display:
8 Pins für die Digits
8 Pins(0-9 und ein Punkt) für die Segmente
Es hat die Leuchtfarbe rot.


Ich hoffe, diese Angeben reichen euch.

Danke für alle Antworten im Voraus!!!
<!--
Danke für alle Antworten im Voraus!!!-->

Besserwessi
16.06.2008, 19:38
Wenn keine extra hohe Helligkeit gefragt ist, könnte man die LEDs wohl gerade noch vom Controller aus treiben. Das hängt aber auch vom Display-typ ab. Da hilft eigentlich nur ausprobieren, wie viel Strom man brauch damit das Display hell genug ist. Wenn im mittel etwa 4 mA nicht reichen müßte man da auch noch Treiber zwischenschalten.
Für die Displayauswahl wird man einen treiber brauchen, z.B. ULN 2803 bei gemeinsamer Kathode oder UDN2981 bei gemeinsamer Anode. Den Strom wird man auf das maximum setzten müssen, den der Mega32 verträgt, also rund 25-30 mA, für den Punkt eventuell etwas weniger.

Die Ansteuerung geht natürlich auch in C. Schließlich ist das keine wirklich zeitkritische Sache. Code habe ich allerdings nur für 5 Stellen an einen MEGA48 und etwas durcheinander liegende Portpins (um die UART frei zu lassen).

ts230
17.06.2008, 17:46
Ich denke, Man sollte die Anzeigen über Transistoren ansteuern.Ein Lehrer hat mir grade gesagt, ich soll es mit Transistoren und nem ATMEGA32probieren.Ich brauche jetzt nur einen Code, derein LED-Display ansteuernkann.Der Controller-Typ ist erstmal egalEin Segment zieht 7 mA.Danke für alle Antworten im Voraus!!!---

Andree-HB
17.06.2008, 17:58
...juchuu...da hat Jemand die Tags für Farbe gefunden - herzlichen Glückwunsch ! Aber vielleicht lieber ein bisschen mehr Motivation und Kraft in die Forumssuche setzen....

ts230
04.07.2008, 16:10
Hallo,
Ich habe eine Basic-Programm zur Ansteuerung geschrieben.
Hier ist es:




$regfile = "2313def.dat"
$crystal = 4000000

Dim Temp_ziffer As Byte
Dim Bcd_aus As Byte

Dim Ausgang As Byte
Dim Sek_blink As Bit

Dim A_sekunde As Byte
Dim A_minute As Byte
Dim A_stunde As Byte
Dim B_sekunde As Byte
Dim B_minute As Byte


Config Portb = Output
Config Portd = Output
'Ddrd = &B0111100
'Portd = &B1000011
Data &B0000000
Segment_a Alias Portb.0
Segment_b Alias Portb.1
Segment_c Alias Portb.2
Segment_d Alias Portb.3
Segment_e Alias Portb.4
Segment_f Alias Portb.5
Segment_g Alias Portb.6
Dezimalpunkt Alias Portb.7
Ziffer_1 Alias Portd.0
Ziffer_2 Alias Portd.1
Ziffer_3 Alias Portd.2
Ziffer_4 Alias Portd.3
Ziffer_5 Alias Portd.4
Ziffer_6 Alias Portd.5
Ziffer_7 Alias Portd.6
Ziffer_8 Alias Portd.7




Const Load_timer1 = 62755



On Timer0 7segment
Config Timer0 = Timer , Prescale = 256
Enable Timer0


Sekunde_plus:


Load Timer1 , Load_timer1

Incr _sekunde


Return
'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++

On Timer1 Sekunde_plus
Config Timer1 = Timer , Prescale = 64
Enable Timer1
Enable Interrupts
Load Timer1 , Load_timer1

Do
If A_sekunde = 9 then
A_sekunde = 0
B_sekunde + 1
Incr A_sekunde
Incr B_sekunde
End If
'++++++++++++++++++++++++++++++++++
If B_sekunde = 6 then
A_sekunde = 0
B_sekunde = 0
Incr B_sekunde
Incr A_sekunde
End If'++++++++++++++++++++++++++++++++++
If A_minute = 9 then
A_minute = 0
B_minute + 1
Incr B_minute
Incr A_minute
End If'++++++++++++++++++++++++++++++++++
If B_minute = 6 then
A_minute = 0
B_minute = 0
A_stunde + 1
Incr B_minute
Incr A_stunde
Incr A_minute
End If'++++++++++++++++++++++++++++++++++
If A_stunde = 9then
A_sekunde = 0
B_sekunde = 0
A_minute = 0
B_minute = 0
A_sekunde = 0
B_sekunde = 0
Incr B_minute
Incr A_minute
Incr B_sekunde
Incr A_sekunde
Incr A_stunde
End If

End
'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++

7segment:

If Temp_ziffer = 8 Then Temp_ziffer = 0 '
Incr Temp_ziffer
Portb = &B11111111


Select Case Bcd_aus
Case 1 : Ausgang = Lookup(1 , Segmentfolge)
Case 2 : Ausgang = Lookup(2 , Segmentfolge)
Case 3 : Ausgang = Lookup(3 , Segmentfolge)
Case 4 : Ausgang = Lookup(4 , Segmentfolge)
Case 5 : Ausgang = Lookup(5 , Segmentfolge)
Case 6 : Ausgang = Lookup(6 , Segmentfolge)
Case 7 : Ausgang = Lookup(7 , Segmentfolge)
Case 8 : Ausgang = Lookup(8 , Segmentfolge)
Case 9 : Ausgang = Lookup(9 , Segmentfolge)
Case 0 And Temp_ziffer = 1 : Ausgang = Lookup(10 , Segmentfolge)
Case 0 And Temp_ziffer > 1 : Ausgang = Lookup(0 , Segmentfolge)
End Select


Segment_a = Not Ausgang.0 'Segment A
Segment_b = Not Ausgang.1 'Segment B
Segment_c = Not Ausgang.2 'Segment C
Segment_d = Not Ausgang.3 'Segment D
Segment_e = Not Ausgang.4 'Segment E
Segment_f = Not Ausgang.5 'Segment F
Segment_g = Not Ausgang.6 'Segment G


Return






'+++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++

Segmentfolge:
Data &B0111111
Data &B0000110
Data &B1011011
Data &B1001111
Data &B1100110
Data &B1101101
Data &B1111101
Data &B0000111
Data &B1111111
Data &B1101111
Data &B0000000
Data &B1011100
Data &B1000000
Data &B0001000
Data &B0000001
Data &B1110100
Data &B1111000

Wenn Fehler drinstecken,dann seit so nett und postet sie.