Bascom 7-Seg. Anzeige Dezimalpunkt in Multiplex einbinden

gerd51

Mitglied
18. Jan. 2013
43
0
6
Sprachen
  1. BascomAVR
Hallo Freunde der Nacht,

möchte gerne an bestimmten Positionen der 7-seg-Anzeige einen Dezimalpunkt setzen. Bsp: Datum oder Temperatur etc

Habe bei dem entsprechenden Display die Zeile: "Ausgabeziffer=Berechnete_Ziffer AND &HFE" eingetragen. Geht nicht. Kann mir jemand mal auf die Sprünge helfen, wo da der Gedankenfehler ist, und vielleicht einen Tipp geben, wie es geht?

Gruß
Gerd
 
Hi Gerd,

möchte gerne an bestimmten Positionen der 7-seg-Anzeige einen Dezimalpunkt setzen. Bsp: Datum oder Temperatur etc

Habe bei dem entsprechenden Display die Zeile: "Ausgabeziffer=Berechnete_Ziffer AND &HFE" eingetragen. Geht nicht. Kann mir jemand mal auf die Sprünge helfen, wo da der Gedankenfehler ist, und vielleicht einen Tipp geben, wie es geht?
äähhhh .... :confused: .... bischen wenig Infos :rolleyes:

Stell doch mal bitte dein gesamtes Programm hier rein damit man sich ein Bild machen kann.

Gruß
Dino
 
Hallo Gerd,
möchte gerne an bestimmten Positionen der 7-seg-Anzeige einen Dezimalpunkt setzen. Bsp: Datum oder Temperatur etc

Habe bei dem entsprechenden Display die Zeile: "Ausgabeziffer=Berechnete_Ziffer AND &HFE" eingetragen. Geht nicht. Kann mir jemand mal auf die Sprünge helfen, wo da der Gedankenfehler ist, und vielleicht einen Tipp geben, wie es geht?

wenn "Berechnete_Ziffe" eine 8Bit Variable ist, dann löschst du Bit 0. Wenn Bit 0 DP ansteuert und dieses invertiert ist, dann sollte es funktionieren. Aber ...

Leider kennen wir weder Schaltplan, Display, noch bestehende Software (Bascom?!). Es läßt sich so leider schwer (bzw. nicht) weiterhelfen.

Dirk :ciao:
 
Es handelt sich um ein ganz simples Zimmertermometer mit ds1621 und dem üblichen i2c code. Der zurückgegeben Temperaturwert wird in Ziffern zelegt (ohene Vorzeichen, da Zimmertermometer. Diese sollen zur Anzeige gebracht werden Bsp: 24.5 und der Punkt ist das Problem. Hier der entsprechende Code-Ausschnitt:
(Temperatur ist der vom ds1621 zurückgegeben Wert)


Code:
' Verwandlung (Temperatur)-Zahl in Ziffernfolge


'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ziffern:


T1 = Temperatur * 10
T_rest = T1 Mod 100
T_zehner = T1 - T_rest
T_zehner = T_zehner / 100

T_nachkomma = T_rest Mod 10

T_einer = T_rest - T_nachkomma
T_einer = T_einer / 10
Return



'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
' 7-Segmentanzeige ansteuern
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

7segment:


If Anzeige_ziffer = 4 Then Anzeige_ziffer = 0
 Incr Anzeige_ziffer


 Portb.1 = 1                                                'Alle Ziffern aus
 Portb.2 = 1
 Portb.3 = 1

                                                              'Alle Segmente aus
 Portd = &B00000000

 Select Case Anzeige_ziffer

   Case 1 : Ziffer_1 = 0                                    '1. Ziffer
            Ziffer_2 = 1
            Ziffer_3 = 1

            Wert = T_zehner

   Case 2 : Ziffer_1 = 1                                    '2. Ziffer mit Dezimalpunkt
            Ziffer_2 = 0
            Ziffer_3 = 1

            Wert = T_einer                                  'und ???????????????????


   Case 3 : Ziffer_1 = 1                                    '3. Ziffer
            Ziffer_2 = 1
            Ziffer_3 = 0

            Wert = T_nachkomma



  End Select

' *********** 7 Segmentcode - Tabelle *****************
' --A--
' |   |
' F   B
' |   |
' --G--
' |   |
' E   C
' |   |
' --D--

 Select Case Wert
                      'GFEDCBA
    Case 0 : Portd = &B00111111                             '0
    Case 1 : Portd = &B00000110                             '1
    Case 2 : Portd = &B01011011                             '2
    Case 3 : Portd = &B01001111                             '3
    Case 4 : Portd = &B01100110                             '4
    Case 5 : Portd = &B01101101                             '5
    Case 6 : Portd = &B01111101                             '6
    Case 7 : Portd = &B00000111                             '7
    Case 8 : Portd = &B01111111                             '8
    Case 9 : Portd = &B01101111                             '9
  End Select
Return
 
Hi Gerd,

Hier der entsprechende Code-Ausschnitt:
...
Code:
                                                              'Alle Segmente aus
 Portd = &B00000000

...

' *********** 7 Segmentcode - Tabelle *****************
' --A--
' |   |
' F   B
' |   |
' --G--
' |   |
' E   C
' |   |
' --D--

 Select Case Wert
                      ' GFEDCBA
    Case 0 : Portd = &B00111111                             '0
    Case 1 : Portd = &B00000110                             '1
    Case 2 : Portd = &B01011011                             '2
    Case 3 : Portd = &B01001111                             '3
    Case 4 : Portd = &B01100110                             '4
    Case 5 : Portd = &B01101101                             '5
    Case 6 : Portd = &B01111101                             '6
    Case 7 : Portd = &B00000111                             '7
    Case 8 : Portd = &B01111111                             '8
    Case 9 : Portd = &B01101111                             '9
  End Select

Du hast also ...
A = PD.0
B = PD.1
...
F = PD.5
G = PD.6
dann ist also PD.7 dein Dezimalpunkt (auf allen Displays).
Du brauchst eigentlich nur bei der entsprechenden Stelle ein ...
SET PORTD.7
... nach der Ausgabe des Segment-Codes machen um den DP der Stelle einzuschalten. Bei den anderen Stellen wird der DP ja durch die Null im Segmentcode gelöscht. Alternativ nimmt man ein RESET PORTD.7 .

Code:
 Select Case Wert
                      ' GFEDCBA
    Case 0 : Portd = &B00111111                             '0
    Case 1 : Portd = &B00000110                             '1
    Case 2 : Portd = &B01011011                             '2
    Case 3 : Portd = &B01001111                             '3
    Case 4 : Portd = &B01100110                             '4
    Case 5 : Portd = &B01101101                             '5
    Case 6 : Portd = &B01111101                             '6
    Case 7 : Portd = &B00000111                             '7
    Case 8 : Portd = &B01111111                             '8
    Case 9 : Portd = &B01101111                             '9
  End Select
  IF Dpunkt = 1 THEN    ' Wenn der Dezimalpunkt gesetzt werden soll dann einfach das Bit im Ausgangsregister setzen.
    SET PORTD.7
  ENDIF

Gruß
Dino
 
@Dino
Danke
Klappt, wie bei Tipps von dir nicht anders zu erwarten. Das Problem hatte ich auch schon bei der Datumsanzeige, das somit auch gelöst ist. Manchmal kann man einfach nicht glauben, dass es eine einfache Lösung gibt und versucht auf einem viel zu komplizierten Weg zum Erfolg zu kommen.
Nochmals Danke

Gerd
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)