ja dass mit dem anschließen is mir schon klar. worums mir geht wie ich es in bascom hinbekomme dass er einstellbar is und im sekundentakt eückwärts zählt
Druckbare Version
ja dass mit dem anschließen is mir schon klar. worums mir geht wie ich es in bascom hinbekomme dass er einstellbar is und im sekundentakt eückwärts zählt
Reicht dir das nicht was ich da jetzt alles hingeschrieben habe?
Dann bastle besser Papierflieger!
ja aber für was brauch ich denn einen decoder des kann ich doch auch alles mit dem controller machen oder?
Ja schon, aber dann braucht Du ja zwei Ports...
Einen für die 7 Segmente und den anderen für die 4 Dekaden.
Der Treiber decodiert zum einen einen 4-Bit Binär-Wert in die richtige Segmentierung und zum anderen schützt er die Ports des AVR.
Wenn Du ohne Decoder auskommen willst dann muss Du die Segmente selbst decodieren:
Welches Segment soll bei wecler Zahl (wert) leuchten:
Code:Wert a b c d e f g
1 * *
2 * * * * *
usw. Das ganze dann noch vereinfachen (in die Disjunktive Normalform bringen) um's kleiner und schneller zu Machen (fall gewünscht/nötig).
Also der Decoder ist meiner Meinung nach besser... und koste auch nur ein paar cent.
Ich schau mal ob ich auf die schnelle eine Softwarelösung zum decodieren der Segmente auf die Reihe bringe.
So ich hab Dir jetzt noch einen Segmentdecoder geschrieben,
den musst Du nur noch entsprechend in das andere Listing einbauen.
Erwarte blos nicht, das ich Dir das auch noch mache.
Erst mal wird eine Eingabe erwartet (0-9)
dann wird der Wert in der Funktion decodiert, (könnte noch erweitert werden a,b,c,d,e,f)
und schließlich in den Port geschrieben.
Segment a = auf Bit 0
Segment b = auf Bit 1
Segment c = auf Bit 2
Segment d = auf Bit 3
Segment e = auf Bit 4
Segment f = auf Bit 5
Segment g = auf Bit 6
Bit 7 (nicht genutzt) könnte der Dezimalpunkt (dp) werden.
PS: es könnte sein dass ich bei den segmenten einen Wurm Drin hab (keine hardwaremässige kontrolle) dann bruchst Du ja nur das Bitmuster in der Function korrigieren.Code:' ****************************************
' * *
' * 7-Segmentdecoder by darwin.nuernberg *
' * *
' ****************************************
$regfile = "m32def.dat" ' specify the used micro
$crystal = 8000000 ' used crystal frequency
$baud = 9600 ' use baud rate
$hwstack = 64 ' default use 32 for the hardware stack
$swstack = 20 ' default use 10 for the SW stack
$framesize = 80 ' default use 40 for the frame space
Dim Segmente As Byte ' Variable für die Segmente
Dim Zahl As Byte
Dim Pause As Integer
Segmente = 0 ' Muss dann nur noch an den Port gesendet werden
Pause = 100
' Die einzelnen Segmente werden an einem Port angeschlossen:
Config Portc = Output ' Port definieren
Portc = 0
Declare Function Decode_segmente(byval Wert As Byte) As Byte
' ===============================================================
Beginn:
Do
Input "Wert (0-9) eingeben : " , Zahl ' Zahl abfragen
Segmente = Decode_segmente(zahl) ' Segmente decodieren
Portc = Segmente ' die decodierten Segmente ausgeben
Waitms Pause ' Wartezeit
Loop
End 'end program
' ===============================================================
Function Decode_segmente(byval Wert As Byte) As Byte ' Segmente-Decodieren
Select Case Wert
Case 0 : Decode_segmente = &B00111111
Case 1 : Decode_segmente = &B00000110
Case 2 : Decode_segmente = &B01011011
Case 3 : Decode_segmente = &B01001111
Case 4 : Decode_segmente = &B01100110
Case 5 : Decode_segmente = &B01101101
Case 6 : Decode_segmente = &B01111101
Case 7 : Decode_segmente = &B00000111
Case 8 : Decode_segmente = &B01111111
Case 9 : Decode_segmente = &B01101111
Case Else : Decode_segmente = 0
End Select
End Function
' ===============================================================
End
ENDE OVER und OUT
Ich hab nochmal rumgekramt, und einen Schaltplan gefunden,
welcher mit einem anderern 7-Segment-Decoder arbeitet und einzelne 7-Segmentanzeigen benutzt,
so könnte man auch größere Anzeigen (Wand-Uhr) realisieren.
Bild hier
der Schaltplan in voller größe: hier klicken
Ich hoffe man kann alles erkennen.
Ich habs allerdings NIE aufgebaut, obwohl das Layout auch schon fertig ist (Zeit/Prio zu gering).