Hilfe Stufentimer

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • @Fanpost2010

      Einen Code, wie man 7-Segment-Anzeigen multiplext, Tasten abfrägt und Ausgaben auf die Anzeige bringt,
      habe ich hier in der Demo siehe Post #12 veröffentlicht (Demo_Mux_Edit_1.1.bas) .

      Vielleicht hilft dir das mal ein Stück weiter bei deinem Projekt.
      Demo ist gut dokumentiert.

      Musst allerdings noch Anpassungen machen (Pins, Anzeige mit gem. Anode, etc.)!
    • Hallo Fanpost2010,

      bei der Ansteuerung von LED-Anzeigen kann ich Dir behilflich sein. Da habe ich mehrere Varianten
      für Uhren und Tastaturanzeigen gebaut. Wahlweise mit einem E348 (Konstantstromtreiber mit einstellbaren Strom)
      oder V40511 (mit Speicher und einer schöneren "6" und "9" aber gemeinsame Annode). Bei den E348 multiplexe ich
      max. 2 Stellen wegen der Helligkeit. Die Leiterplatten sind mit Eagle entworfen. Anbei ein Beispiel mit 2 x VQE24!
      Darauf sind noch 4 Transistoren und die 4 Widerstände für die Dezimalpunkte.

      Und mit den 2 Baustellen hat Pluto25 schon recht!

      Viel Spass
      Jürgen
      Dateien
      • LED_Anzeige.pdf

        (32,54 kB, 17 mal heruntergeladen, zuletzt: )
    • Fanpost2010 schrieb:

      Hat keiner einen Code für mich ?
      Erwartest Du ein fertiges Programm mitsamt der Platine? Für was soll Dir denn jemand einen Code liefern? Es gibt keinen gar keinen Schaltplan, keine Hardware für den man etwas schreiben kann. Bis auf ein paar Wünsche ist gar nichts da an was man sich orientieren könnte. Wie sind die Anzeigen angeschlossen, wie die Taster?

      Auch wenn hier alle sehr hilfsbereit und bemüht sind (und das schreibe ich aus Erfahrung) kann niemand aus einer Idee etwas aus dem Hut zaubern. Ein Programmierer orientiert sich an der Hardware aber da kommt von Deiner Seite aus gar nichts. Du schreibst nur dass Du die vorhandene Hardware nutzen möchtest. Welche Denn?

      Du bittest um Hilfe und ganz viele haben, und werden auch weiter, versuchen Dir zu helfen. Ohne eine Mitarbeit deinerseits wird da wohl nicht viel bei rum kommen.

      Sorry für die harten Worte.
    • Hier mal zur Ergänzung der Code für die Ansteuerung der LED-Anzeige
      meiner Uhr im Multiplex. Platine siehe meinen vorherigen Beitrag. Die
      Anzeigen (VQE24) haben eine gemeinsame Annode ohne Widerstände.
      Aber Pac-Man hat schon recht. Ein wenig solltest Du schon selbst machen.
      Vor allem solltest Du die Programme verstehen um sie ändern zu können.
      Dateien
    • Das ist ein guter Anfang. a_57_04ef5ee8
      Etwas Offtropic?

      Quellcode

      1. ddrd=255 'Alle Ausgang
      2. ddrc=3 'Bit 0 und 1 Ausgang
      3. Dim a as Byte
      4. 'Lamptest
      5. PortD=255
      6. Do
      7. incr a
      8. portc=a
      9. waitms 1
      10. Loop until a=0
      11. Portd=0
      12. Portc=0
      Alles anzeigen
      PS "Auf Entfernung.. "
      Gerade sind mir diese Aufgefallen - fast doppelt so hoch.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Pluto25 ()

    • Zwei wichtige Anmerkungen zum Schaltplan.

      Der Schaltausgang soll Low-Aktiv sein? Der kann nicht richtig High werden (5V).

      1. Ich würde die Leuchtdiode D2 da raus nehmen, damit am Schaltausgang auch ein ordentlicher Pegel getrieben werden kann.
      Statt dessen die D2 mit einem eigenen Vorwiderstand parallel zu dem 680 Ohm. Oder die D2 gleich an einen anderen Port legen.

      2. Die Vorwiderstände für die Segmente a bis g sind meines erachtens zu hochohmig. Das würde vielleicht passen, wenn das Low-Current 7 Segment-Anzeigen wären. Sowas habe ich aber bisher noch nie gesehen. Für Normale Anzeigen sind 220 Ohm bis 270 Ohm an 5 V besser geeignet.

      Der mittlere Strom eines Segments einer Anzeige errechnet sich ja aus ILed=(VCC - Schleisenspannung_LED) / Rv /2
      Das Durch 2 kommt durch das Multiplexen mit 2x 7 Segment-Anzeige. Bei 220 bis 270 Ohm bist du sicher, dass die LED's nicht schon beim Basteln durchbrennen.
    • Fanpost2010 schrieb:

      Da ich bei meinem Projekt auf mich alleine gestellt bin
      Bist du nicht. Vielleicht stellst du einfach die falschen Fragen.

      Fanpost2010 schrieb:

      oder hat jemand einen einfachen Bascom-Code für eine 2 stellige LED 7-Segment Anzeige wie in meinem Schaltbild angegeben?
      Ich habe was in Vorbereitung!

      Ob das für dich einfach ist, bleibt abzuwarten. Dir fehlen offensichtlich viele Grundlagen.
    • Hallo Fanpost2010,

      Dir fehlt, wie bei unerfahrenen Programmierern oft, ein gewisser Ablaufplan, wie man so ein Projekt angehen sollte. Ist nicht schlimm, sowas kommt erst mit der Zeit.
      Schau Dir die folgenden Programme und deren schrittweise Weiterentwicklung an. Versuch die Programme und die Schritte dahinter zu verstehen. Der Ablauf bei der Programmentwicklung ist in der Regel immer der selbe.

      Zunächst solltest Du Dein Projekt grob in "Einzelaufgaben" zerlegen. Bei Dir wäre das unter anderem das Einlesen der Taster, das Berechnen der neuen Werte, das Runterzählen (Countdown) der Werte, das zur Anzeigebringen der Werte usw.
      Nun sortiert man ein wenig und überlegt, womit man am besten anfängt. Meist beginne ich dann ganz am Ende, bei der Ausgabe. Bei Dir wäre das die Ansteuerung der 7 Segmentanzeige. Wenn man das noch nie gemacht hat, dann einfach ein wenig im www suchen wie andere das vielleicht gelöst haben.

      Zunächst würde ich versuchen, erst mal nur eine 7 Segmentanzeige zum Leuchten zu bringen. Da gibt es mehrere Möglichkeiten, dies zu realisieren. Ein Beispiel findest Du sogar hier im Forumslexikon (siehe Lookup). Dieses Programm leicht abändern und schon sollte eine der beiden 7 Segmentanzeigen im Sekundentakt hochzählen:

      BASCOM-Quellcode

      1. ' =====================================================================
      2. ' Single_7_Segment
      3. '
      4. ' Programmbeispiel zur Ansteuerung einer 7-Segmentanzeige
      5. '
      6. ' Codebeispiel basiert auf einer Lexikon-Veröffentlichung von "Galahat"
      7. ' im Bascomforum (Lexikoneintrag zum Thema "Lookup"),
      8. ' siehe https://bascomforum.de/lexicon/index.php?entry/50-lookup/
      9. ' Der Code ist experimentell und die Benutzung erfolgt auf eigene Gefahr!
      10. ' Der Sourcecode darf für den Eigenbedarf beliebig geändert werden.
      11. ' Kontakt: www.bascomforum.de "R2D2 Bastler"
      12. '
      13. ' =====================================================================
      14. ' Autor Original von Galahat, modifiziert von Robert Link 2022
      15. ' Bascom 2.0.8.5
      16. ' Version Testversion
      17. ' Pinbelegung:
      18. ' PC0 steuert Einerstelle
      19. ' PD0 an Segment a
      20. ' PD1 an Segment b
      21. ' PD2 an Segment c
      22. ' PD3 an Segment d
      23. ' PD4 an Segment e
      24. ' PD5 an Segment f
      25. ' PD6 an Segment g
      26. ' PD7 an Dezimalpunkt DP
      27. $Regfile = "M8def.dat"
      28. $Crystal = 8000000
      29. $HWStack = 40
      30. $SWStack = 40
      31. $Framesize = 30
      32. ' --------------------------------------------------------
      33. ' Aliase und Anschlussbelegung
      34. Digit_1 Alias PortC.0 ' Portpin für die Einerstelle
      35. Config Digit_1 = Output ' Portpins für die Einerstelle als Ausgang konfigurieren
      36. Config PortD = Output ' Kompletten PortD als Ausgang konfigurieren (Segmente der Anzeige)
      37. ' --------------------------------------------------------
      38. ' Variablen
      39. Dim Einzelziffer as Byte ' Variable, deren Wert ausgegeben werden soll
      40. Digit_1 = 1 ' Transistor für Einerdigit einschalten
      41. ' -----------------------------------------
      42. ' Hauptprogramm
      43. ' -----------------------------------------
      44. Do
      45. For Einzelziffer = 0 To 9
      46. PortD = Lookup(Einzelziffer , Ziffer_Muster) ' Hier wird das Ziffernmuster anhand des Wertes der Variable "Einzelziffer" aus der Tabelle geholt und zur Anzeige gebracht
      47. Wait 1
      48. Next
      49. Loop
      50. End
      51. ' ----------------------------------------------
      52. ' Lookup Table für die Zifferndarstellung
      53. ' Bit: 7 6 5 4 3 2 1 0
      54. ' Seg: DP g f e d c b a
      55. ' --A--
      56. ' | |
      57. ' F B
      58. ' | |
      59. ' --G--
      60. ' | |
      61. ' E C
      62. ' | |
      63. ' --D-- DP
      64. ' ----------------------------------------------
      65. Ziffer_Muster:
      66. Data &B00111111 ' Ziffer 0
      67. Data &B00000110 ' Ziffer 1
      68. Data &B01011011 ' Ziffer 2
      69. Data &B01001111 ' Ziffer 3
      70. Data &B01100110 ' Ziffer 4
      71. Data &B01101101 ' Ziffer 5
      72. Data &B01111101 ' Ziffer 6
      73. Data &B00000111 ' Ziffer 7
      74. Data &B01111111 ' Ziffer 8
      75. Data &B01101111 ' Ziffer 9
      Alles anzeigen
      Weiter in der nächsten Antwort...

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von R2D2 Bastler ()

    • Wenn das hinhaut, müssen wir nun auch das zweite Digit einbinden. Dazu muss abwechselnd der erste Wert auf das erste Digit und der zweite Wert auf das zweite Digit gebracht werden. Das Timing für das Umschalten zwischen den beiden Digits übernimmt ein Timer. Das Multiplexen selbst wird komplett in der Timer ISR gemacht. Auch diesen Code konnte man im www finden. Etwas abgeändert sieht er dann so aus (im Hauptprogramm werden die Zahlen für die einzelnen Digits zu Testzwecken manuell reingeschrieben):

      BASCOM-Quellcode

      1. ' =====================================================================
      2. ' Double_7_Segment
      3. '
      4. ' Programmbeispiel zur Ansteuerung von zwei 7-Segmentanzeigen
      5. ' 7-Segment-LED Anzeigen werden im Multiplexbetrieb angesteuert
      6. '
      7. ' Codebeispiel basiert auf einer Lexikon-Veröffentlichung von "Galahat"
      8. ' im Bascomforum (Lexikoneintrag zum Thema "Lookup"),
      9. ' siehe https://bascomforum.de/lexicon/index.php?entry/50-lookup/
      10. '
      11. ' Codebeispiel basiert weiterhin auf einer Veröffentlichung von "Searcher"
      12. ' im Roboternetzforum, siehe
      13. ' https://www.roboternetz.de/community/threads/70270-Wie-richtig-mit-Bascom-7-Segmentanzeige-Multiplexen
      14. ' Der Code ist experimentell und die Benutzung erfolgt auf eigene Gefahr!
      15. ' Der Sourcecode darf für den Eigenbedarf beliebig geändert werden.
      16. ' Kontakt: www.bascomforum.de "R2D2 Bastler"
      17. '
      18. ' =====================================================================
      19. ' Autor Robert Link 2022, basierend auf Code von Galahat und Searcher
      20. ' Bascom 2.0.8.5
      21. ' Version Testversion
      22. ' Pinbelegung:
      23. ' PC0 steuert Einerstelle
      24. ' PC1 steuert Zehnerstelle
      25. ' PD0 an Segment a
      26. ' PD1 an Segment b
      27. ' PD2 an Segment c
      28. ' PD3 an Segment d
      29. ' PD4 an Segment e
      30. ' PD5 an Segment f
      31. ' PD6 an Segment g
      32. ' PD7 an Dezimalpunkt DP
      33. $Regfile = "M8def.dat"
      34. $Crystal = 8000000
      35. $HWStack = 40
      36. $SWStack = 40
      37. $Framesize = 30
      38. ' --------------------------------------------------------
      39. ' Aliase und Anschlussbelegung
      40. Digit_1 Alias PortC.0 ' Digit Einerstelle
      41. Digit_2 Alias PortC.1 ' Digit Zehnerstelle
      42. Config Digit_1 = Output ' Ausgabepin als Ausgang konfigurieren
      43. Config Digit_2 = Output ' Ausgabepin als Ausgang konfigurieren
      44. Config PortD = Output ' Kompletten PortD als Ausgang konfigurieren (Segmente der Anzeige)
      45. ' --------------------------------------------------------
      46. ' Variablen
      47. Dim Einzelziffer(2) as Byte ' Byte-Array für die einzelnen Ziffern anlegen
      48. Dim Stelle as Byte ' Variable, die angibt, welches Digit beim Multiplexen eingeschaltet werden soll
      49. ' --------------------------------------------------------
      50. ' Timer 2 konfigurieren (CTC-Mode)
      51. Config Timer2 = Timer , Prescale = 1024 , Clear_Timer = 1 ' Timerticks 128us
      52. OCR2 = 78 - 1 ' Vergleichswert für ca 10 ms einstellen (78 Schritte * 128us = 9.984 us)
      53. On OC2 ISR_Timer2_Multiplex ' OC2-Interrupt konfigurieren
      54. Enable OC2 ' OC2-Interrupt zulassen
      55. Waitms 300
      56. Enable Interrupts
      57. ' -----------------------------------------
      58. ' Hauptprogramm
      59. ' -----------------------------------------
      60. Do
      61. Einzelziffer(1) = 6 ' Wert für Einerstelle
      62. Einzelziffer(2) = 3 ' Wert für Zehnerstelle
      63. Loop
      64. End
      65. ' ----------------------------------------------
      66. ' Diese Timer2 ISR wird ca alle 10ms aufgerufen
      67. ' Multiplexen der 7-Segment Anzeigen
      68. ' Ablauf:
      69. ' - Alle Digits abschalten
      70. ' - Die Segmente für die nun anzuzeigende Stelle setzen
      71. ' - Das neue Digit einschalten
      72. ' ----------------------------------------------
      73. ISR_Timer2_Multiplex:
      74. If Stelle < 2 Then Incr Stelle Else Stelle = 1 ' Index weiterschalten zur nächsten Stelle
      75. Digit_1 = 0 ' Beide Digits abschalten (hier Digit 1)
      76. Digit_2 = 0 ' Beide Digits abschalten (hier Digit 2)
      77. PortD = Lookup(Einzelziffer(Stelle) , Ziffer_Muster) ' Lookup holt aus den Daten unter Ziffer_Muster
      78. ' das Muster, das zur Zahl in Einzelziffer(Stelle) gehört
      79. ' und setzt damit im PORTD die Segmentportpins
      80. Select Case Stelle ' Eine der beiden Stellen wieder unter Strom setzen
      81. Case 1 : Digit_1 = 1 ' Stelle 1 einschalten
      82. Case 2 : Digit_2 = 1 ' Stelle 2 einschalten
      83. End Select
      84. Return
      85. ' ----------------------------------------------
      86. ' Lookup Table für die Zifferndarstellung
      87. ' Bit: 7 6 5 4 3 2 1 0
      88. ' Seg: DP g f e d c b a
      89. ' --A--
      90. ' | |
      91. ' F B
      92. ' | |
      93. ' --G--
      94. ' | |
      95. ' E C
      96. ' | |
      97. ' --D-- DP
      98. ' ----------------------------------------------
      99. Ziffer_Muster:
      100. Data &B00111111 ' Ziffer 0
      101. Data &B00000110 ' Ziffer 1
      102. Data &B01011011 ' Ziffer 2
      103. Data &B01001111 ' Ziffer 3
      104. Data &B01100110 ' Ziffer 4
      105. Data &B01101101 ' Ziffer 5
      106. Data &B01111101 ' Ziffer 6
      107. Data &B00000111 ' Ziffer 7
      108. Data &B01111111 ' Ziffer 8
      109. Data &B01101111 ' Ziffer 9
      Alles anzeigen
      Weiter in der nächsten Antwort...

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von R2D2 Bastler ()

    • Im nächsten Schritt wäre es nun recht praktisch, wenn man den Wert aus einer einzigen Variablen nehmen könnte und sich dieser selbständig auf beide Digits verteilt. Das funktioniert sogar erschreckend einfach. Vergleiche den Code mit dem vorangegangenen Code.

      BASCOM-Quellcode

      1. ' =====================================================================
      2. ' Double_7_Segment 2
      3. '
      4. ' Programmbeispiel zur Ansteuerung von zwei 7-Segmentanzeigen
      5. ' 7-Segment-LED Anzeigen werden im Multiplexbetrieb angesteuert
      6. '
      7. ' Codebeispiel basiert auf einer Lexikon-Veröffentlichung von "Galahat"
      8. ' im Bascomforum (Lexikoneintrag zum Thema "Lookup"),
      9. ' siehe https://bascomforum.de/lexicon/index.php?entry/50-lookup/
      10. '
      11. ' Codebeispiel basiert weiterhin auf einer Veröffentlichung von "Searcher"
      12. ' im Roboternetzforum, siehe
      13. ' https://www.roboternetz.de/community/threads/70270-Wie-richtig-mit-Bascom-7-Segmentanzeige-Multiplexen
      14. ' Der Code ist experimentell und die Benutzung erfolgt auf eigene Gefahr!
      15. ' Der Sourcecode darf für den Eigenbedarf beliebig geändert werden.
      16. ' Kontakt: www.bascomforum.de "R2D2 Bastler"
      17. '
      18. ' =====================================================================
      19. ' Autor Robert Link 2022, basierend auf Code von Galahat und Searcher
      20. ' Bascom 2.0.8.5
      21. ' Version Testversion
      22. ' Pinbelegung:
      23. ' PC0 steuert Einerstelle
      24. ' PC1 steuert Zehnerstelle
      25. ' PD0 an Segment a
      26. ' PD1 an Segment b
      27. ' PD2 an Segment c
      28. ' PD3 an Segment d
      29. ' PD4 an Segment e
      30. ' PD5 an Segment f
      31. ' PD6 an Segment g
      32. ' PD7 an Dezimalpunkt DP
      33. $Regfile = "M8def.dat"
      34. $Crystal = 8000000
      35. $HWStack = 40
      36. $SWStack = 40
      37. $Framesize = 30
      38. ' --------------------------------------------------------
      39. ' Aliase und Anschlussbelegung
      40. Digit_1 Alias PortC.0 ' Digit Einerstelle
      41. Digit_2 Alias PortC.1 ' Digit Zehnerstelle
      42. Config Digit_1 = Output ' Ausgabepin als Ausgang konfigurieren
      43. Config Digit_2 = Output ' Ausgabepin als Ausgang konfigurieren
      44. Config PortD = Output ' Kompletten PortD als Ausgang konfigurieren (Segmente der Anzeige)
      45. ' --------------------------------------------------------
      46. ' Variablen
      47. Dim Ausgabewert as Byte ' Der (zweistellige) Wert dieser Variable soll an die Segmentanzeigen ausgegeben werden
      48. Dim Einzelziffer(2) as Byte ' Byte-Array für die einzelnen Ziffern anlegen
      49. Dim Stelle as Byte ' Variable, die angibt, welches Digit beim Multiplexen eingeschaltet werden soll
      50. ' --------------------------------------------------------
      51. ' Timer 2 konfigurieren (CTC-Mode)
      52. Config Timer2 = Timer , Prescale = 1024 , Clear_Timer = 1 ' Timerticks 128us
      53. OCR2 = 78 - 1 ' Vergleichswert für ca 10 ms einstellen (78 Schritte * 128us = 9.984 us)
      54. On OC2 ISR_Timer2_Multiplex ' OC2-Interrupt konfigurieren
      55. Enable OC2 ' OC2-Interrupt zulassen
      56. Waitms 300
      57. Enable Interrupts
      58. ' -----------------------------------------
      59. ' Hauptprogramm
      60. ' -----------------------------------------
      61. Do
      62. Ausgabewert = 36 ' Diese Zahl soll in der Anzeige erscheinen
      63. Einzelziffer(2) = Ausgabewert / 10 ' Zehnerstelle isolieren
      64. Einzelziffer(1) = Ausgabewert Mod 10 ' Einerstelle isolieren
      65. Loop
      66. End
      67. ' ----------------------------------------------
      68. ' Diese Timer2 ISR wird ca alle 10ms aufgerufen
      69. ' Multiplexen der 7-Segment Anzeigen
      70. ' Ablauf:
      71. ' - Alle Digits abschalten
      72. ' - Die Segmente für die nun anzuzeigende Stelle setzen
      73. ' - Das neue Digit einschalten
      74. ' ----------------------------------------------
      75. ISR_Timer2_Multiplex:
      76. If Stelle < 2 Then Incr Stelle Else Stelle = 1 ' Index weiterschalten zur nächsten Stelle
      77. Digit_1 = 0 ' Beide Digits abschalten (hier Digit 1)
      78. Digit_2 = 0 ' Beide Digits abschalten (hier Digit 2)
      79. PortD = Lookup(Einzelziffer(Stelle) , Ziffer_Muster) ' Lookup holt aus den Daten unter Ziffer_Muster
      80. ' das Muster, das zur Zahl in Einzelziffer(Stelle) gehört
      81. ' und setzt damit im PORTD die Segmentportpins
      82. Select Case Stelle ' Eine der beiden Stellen wieder unter Strom setzen
      83. Case 1 : Digit_1 = 1 ' Stelle 1 einschalten
      84. Case 2 : Digit_2 = 1 ' Stelle 2 einschalten
      85. End Select
      86. Return
      87. ' ----------------------------------------------
      88. ' Lookup Table für die Zifferndarstellung
      89. ' Bit: 7 6 5 4 3 2 1 0
      90. ' Seg: DP g f e d c b a
      91. ' --A--
      92. ' | |
      93. ' F B
      94. ' | |
      95. ' --G--
      96. ' | |
      97. ' E C
      98. ' | |
      99. ' --D-- P
      100. ' ----------------------------------------------
      101. Ziffer_Muster:
      102. Data &B00111111 ' Ziffer 0
      103. Data &B00000110 ' Ziffer 1
      104. Data &B01011011 ' Ziffer 2
      105. Data &B01001111 ' Ziffer 3
      106. Data &B01100110 ' Ziffer 4
      107. Data &B01101101 ' Ziffer 5
      108. Data &B01111101 ' Ziffer 6
      109. Data &B00000111 ' Ziffer 7
      110. Data &B01111111 ' Ziffer 8
      111. Data &B01101111 ' Ziffer 9
      Alles anzeigen
      Nun haben wir einen Code, der den Inhalt der Variale "Ausgabewert" auf die beiden 7-Segment Anzeigen bringt.

      Weiter in der nächsten Antwort...

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von R2D2 Bastler ()