Renteneintritts-countdown mit einem Tischrechner, Fragen über Fragen

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!

  • Michael schrieb:

    ob der Platz da drin reicht
    Da war mal ein Akkupack drin, der wurde als Leiche mal entfernt. Sollte also passen.

    Michael schrieb:

    möglicherweise wird da eine +/- 5V Logik verwendet. Ist die Masse der Versorgung mit der Masse der Chips identisch? (wegen Oszi-Anschluss) Kannst du Chipbezeichnungen lesen?
    Die Bezeichnung kann man lesen, ich hab' noch nicht recherchiert. Was mich ja stutzig macht, ist das der Plus-Anschluss an dem Gehäuse (Aluplatte über der Tastatur) angeschlossen ist. Auch das Netzteil, ein Trafo mit Brücke, liefert 2 Spannungen, wobei die 2. Spannung (zum Laden des Akkus?) über eine Widerstand in der Minusleitung generiert wird. Alles bisschen komisch.
    christophlorenz.de/calc/sanyo.php
    calcuseum.com/SCRAPBOOK/BONUS/18643/1.htm
    Raum für Notizen

    -----------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------
  • Pluto25 schrieb:

    Was mir noch Sorgen machen würde: Wie auf null ziehen?
    Die hab' ich auch, aber ich geh' jetzt erst mal was essen.
    Raum für Notizen

    -----------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------
  • Noch was zur Betriebsspannung, es findet sich nur 1 dicker Elko mit 1000müF und an den geht auch die Versorgung vom Nt, jetzt 5V. Der andere, große Elko hat 3,3müF und führt 120V, wohl für's display.
    Raum für Notizen

    -----------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------
  • @Pluto25 das mit dem auf 0 ziehen: ohne Tastendruck liegt 5V an, mit einem NPN keim Problem. Wenn eine Taste gedrückt wird, dann kann die Spannung während des Pulses auf -4V runter gehen, das wäre das Problem. Aber wenn man eine Diode mit Kathode zum Kollektor des Transistor dazwischen schaltet, dann sollte es doch passen, oder?
    Raum für Notizen

    -----------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------
  • Es hilft wohl nix, als es zu probieren. Die nötige hw für den Anschluß eines Testboards hält sich ja in Grenzen, ich werde berichten...
    Raum für Notizen

    -----------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------
  • djmsc schrieb:

    Hast du mal die drei ICs im Rechner etwas näher untersucht?
    Nö, ist mir zu blackboxmäßig.

    djmsc schrieb:

    Vielleicht kannst du ja auch alles über die ICs abgreifen und steuern.
    da gibt's ähnliche Signale, wie bei der Tastatur. An der kann ich aber besser meine paar Drähtchen dran löten :D
    Raum für Notizen

    -----------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------
  • djmsc schrieb:

    ich hab da an BCD gedacht
    im Umfeld der Tastaturanschlüsse ist nix zu sehen, was auf BCD hin deutet, sollte ja dann was mit 8 sein. Ich hab' aber mehr die Zahl 13 (Dioden, Kondensatoren, Widerstände).
    Raum für Notizen

    -----------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------
  • Ich hab' jetzt mal Spannungsteiler eingebaut und hab' so Signale im positiven Bereich. Da hab' ich mich jetzt auch getraut, meinen LA dran anzuschließen und hab' jetzt so ein Signal auf einer Zeile:
    Tischrechner-Zeilensignal.PNG
    Wenn ich richtig rechne, dann können so 16 Zeilen 'durchgepollt' werden. Ein Progrämmelchen hab' ich auch schon, mal schau'n, ob ich die Tasten damit erkennen kann...

    Es tut sich was, es werden die Tasten erkannt, aber bei ein paarn kommt bei längerem Drücken nur 1x ein Wert, im Weiteren wird 0 angezeigt. Da passt wohl was noch nicht mit dem timing...

    BASCOM-Quellcode

    1. 'Rentneruhr-Tastaturtest
    2. $regfile = "m328pdef.dat"
    3. $Crystal=16000000
    4. $hwstack=64
    5. $swstack=128
    6. $framesize=30
    7. $baud = 9600
    8. Config Int0 = Falling 'Spalte 1
    9. On Int0 Spalte1_isr
    10. Spalte1 Alias Pind.2
    11. Config Int1 = Falling 'Spalte 2
    12. On Int1 Spalte2_isr
    13. Spalte2 Alias Pind.3
    14. Zeile0 Alias Pinc.0 'Zeile 0, wird als Startsignal verwendet
    15. Config Timer1 = Timer , Prescale = 8 , Clear_timer = 1
    16. Compare1a = 391
    17. On Compare1a Timer1_isr
    18. ' Timer value explination
    19. ' The timer is a 16Bit timer, it overflows when the timer reaches 65536
    20. ' The AVR is running at 16000000Hz, the prescaler is 8
    21. ' Each tick is 0,0005 ms - (1 / CPUSpeed in KHz ) * Prescaler
    22. ' The timer needs 391 ticks to reach the required time ( 391 * 0,0005 = 0,1955ms)
    23. ' The start value for the timer must be set to 65145 so that it will overflow at 65536 after 391 ticks
    24. Dim Zeichen_da As Byte 'flag, =1 wenn Zeichen empfangen wurde
    25. Dim Zeichen As Word 'enthält Spalten- und Zeilenbit
    26. Dim Tz As Byte 'Zähler im timer_isr
    27. Dim Spalte As Bit
    28. Enable Interrupts
    29. Wait 1
    30. Enable Int0 : Enable Int1
    31. print "los geht's"
    32. Do
    33. If Zeichen_da = 1 Then
    34. Print Zeichen
    35. Zeichen = 0 'Zeichen löschen
    36. End If
    37. Zeichen_da = 0
    38. Waitms 100
    39. Enable Int0 : Enable Int1
    40. Loop
    41. End
    42. Spalte1_isr: 'int0, wird ausgelöst, wenn irgend eine Zeile mit Spalte 1 verbunden wird
    43. Bitwait Zeile0 , Reset 'warte bis Zeilenpuls kommt
    44. Zeichen.0 = Not Spalte1 'erste bit setzen, die nächsten werden in der timer1_isr gesetzt
    45. Zeichen.15 = 0
    46. Start Timer1
    47. Enable Compare1a 'timer starten
    48. Disable Int0 'int0 erst mal ausschalten
    49. Return
    50. Spalte2_isr: 'int1, wird ausgelöst, wenn irgend eine Zeile mit Spalte 2 verbunden wird
    51. Bitwait Zeile0 , Reset 'warte bis Zeilenpuls kommt
    52. Zeichen.0 = Not Spalte2 'erste bit setzen, die nächsten werden in der timer1_isr gesetzt
    53. Zeichen.15 = 1
    54. Start Timer1
    55. Enable Compare1a 'timer starten
    56. Disable Int1 'int0 erst mal ausschalten
    57. Return
    58. Timer1_isr:
    59. Incr Tz
    60. Spalte = Spalte1 And Spalte2 '=0, wenn mindestens eine Spalte=0
    61. Zeichen.tz = Not Spalte
    62. If Tz = 15 Then
    63. Tz = 0
    64. Stop Timer1
    65. Disable Compare1a 'Timerinterrupt ausschalten
    66. Timer1 = 0
    67. Zeichen_da = 1
    68. End If
    69. Return
    Alles anzeigen
    Wie kann ich ein word mit print binär anzeigen lassen?
    Raum für Notizen

    -----------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von tschoeatsch ()

  • Wie starte ich den timer? Doch auch mit einem interrupt? Gibt's einen speziellen pin? Wenn nicht, dann müsste ich die Spalten mit 2x pcint erkennen, was ja auch nicht schlecht wäre.Hm...
    Raum für Notizen

    -----------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------
  • Ich hätte jetzt den int0 für die Zeile verwendet, einfach zu bedienen und hohe Priorität. Der pcint bietet sich für die Spalten an, da ja 2 Spalten den timer wieder stoppen sollen.
    Wo ich noch keine Idee hab', wie bekomme ich nur einen Wert, egal wie lange man die Taste drückt? Also, wie bekomme ich raus, wann ich die Taste loslasse und gleich wieder drücke, zum Gegensatz, dass ich länger auf der selben Taste bleibe?
    Raum für Notizen

    -----------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------
  • Besser nicht stoppen, Wert merken/auswerten. Sollten mehrere auftauchen werden mehrere Tasten gleichzeitig gedrückt und kann als Fehler oder Spezialkommando interpretiert werden.
    Die int0 könnte den Wert zurücksetzen und feststellen ob der gleiche wieder auftrat ( Taste festgehalten) oder eben nicht (Taste losgelassen)

    Ein Zähler könnte sinnvoll sein z.b weniger als zwei wiederholungen - fehlerpuls mehr als 1000 Wecker einschalten mehr als 100000 Notarzt rufen.

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

  • Neue Version

    BASCOM-Quellcode

    1. 'Rentneruhr-Tastaturtest
    2. 'Variante 2
    3. $regfile = "m328pdef.dat"
    4. $Crystal=16000000
    5. $hwstack=64
    6. $swstack=128
    7. $framesize=30
    8. $baud = 9600
    9. Config Int0 = Falling 'Zeile , wird als Startsignal für timer1 verwendet
    10. On Int0 Zeile_isr
    11. Pcicr.1 = 1
    12. Pcmsk1 = &B11 'pinc.0 + pinc.1
    13. On Pcint1 Spalte_isr
    14. Spalte1 Alias Pinc.0 'Spalte 1
    15. Spalte2 Alias Pinc.1 'Spalte 2
    16. Config Timer1 = Timer , Prescale = 8
    17. ' Timer value explination
    18. ' The timer is a 16Bit timer, it overflows when the timer reaches 65536
    19. ' The AVR is running at 16000000Hz, the prescaler is 8
    20. ' Each tick is 0,0005 ms - (1 / CPUSpeed in KHz ) * Prescaler
    21. ' The timer needs 391 ticks to reach the required time ( 391 * 0,0005 = 0,1955ms)
    22. ' The start value for the timer must be set to 65145 so that it will overflow at 65536 after 391 ticks
    23. Dim Zeichen_da As Byte 'flag, =1 wenn Zeichen empfangen wurde
    24. Dim Zeichen As Word 'enthält Spalten- und Zeilenbit
    25. Dim Spalte As Byte , Spalte_ As Byte
    26. Enable Interrupts
    27. Wait 1
    28. Enable Int0
    29. Enable Pcint1
    30. print "los geht's"
    31. Do
    32. If Zeichen_da = 1 Then
    33. Print Spalte ; " " ; Zeichen
    34. Zeichen = 0 'Zeichen löschen
    35. End If
    36. Zeichen_da = 0
    37. Waitms 500
    38. Enable Pcint1
    39. Loop
    40. End
    41. Zeile_isr: 'int0, wird ausgelöst, wenn irgend eine Zeilenpuls kommt
    42. Timer1 = 0
    43. Return
    44. Spalte_isr: 'wird ausgelöst, wenn auf einer Spalte ein Zeilenpuls kommt
    45. Spalte_ = Pinc And &B11
    46. If Spalte_ < 3 Then
    47. Zeichen = Timer1
    48. Spalte = Spalte_
    49. Zeichen_da = 1
    50. Disable Pcint1
    51. End If
    52. Return
    Alles anzeigen
    Die Werte pro Taste sind relativ konstant, aber es gibt ab und an mal Ausreisser.

    Ich vermute, die Ausreisser kommen daher, das ich mit meinem Tastendruck ja auch mal mitten in dem Puls rein komme. Dadurch wird der interrupt ja später ausgelöst und der timer läuft weiter als er beim Beginn des Pulses war. Ich müsste nach dem interrupt auf einen 2. warten und dessen Werte nehmen.
    Raum für Notizen

    -----------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------

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

  • code noch bisschen optimiert, jetzt sind die Ausreisser weg, der gezählte timerWert für jede Taste schwankt um ca. 5 ticks

    BASCOM-Quellcode

    1. 'Rentneruhr-Tastaturtest
    2. 'Variante 2
    3. $regfile = "m328pdef.dat"
    4. $Crystal=16000000
    5. $hwstack=64
    6. $swstack=128
    7. $framesize=30
    8. $baud = 9600
    9. Config Int0 = Falling 'Zeile , wird als Startsignal für timer1 verwendet
    10. On Int0 Zeile_isr
    11. Pcicr.1 = 1
    12. Pcmsk1 = &B11 'pinc.0 + pinc.1
    13. On Pcint1 Spalte_isr
    14. Spalte1 Alias Pinc.0 'Spalte 1
    15. Spalte2 Alias Pinc.1 'Spalte 2
    16. Config Timer1 = Timer , Prescale = 8
    17. ' Timer value explination
    18. ' The timer is a 16Bit timer, it overflows when the timer reaches 65536
    19. ' The AVR is running at 16000000Hz, the prescaler is 8
    20. ' Each tick is 0,0005 ms - (1 / CPUSpeed in KHz ) * Prescaler
    21. ' The timer needs 391 ticks to reach the required time ( 391 * 0,0005 = 0,1955ms)
    22. ' The start value for the timer must be set to 65145 so that it will overflow at 65536 after 391 ticks
    23. Dim Zeichen_da As Byte 'flag, =1 wenn Zeichen empfangen wurde
    24. Dim Zeichen As Word , Zeichen_ As Word 'enthält Spalten- und Zeilenbit
    25. Dim Spalte As Byte , Spalte_ As Byte
    26. Dim Tz As Byte
    27. Enable Interrupts
    28. Wait 1
    29. Enable Int0
    30. Enable Pcint1
    31. Print "los geht's"
    32. Do
    33. If Zeichen_da = 1 Then
    34. Print Spalte ; " " ; Zeichen
    35. Waitms 200
    36. Zeichen_da = 0
    37. End If
    38. Enable Pcint1
    39. Loop
    40. End
    41. Zeile_isr: 'int0, wird ausgelöst, wenn irgend eine Zeilenpuls kommt
    42. Timer1 = 0
    43. Return
    44. Spalte_isr: 'wird ausgelöst, wenn auf einer Spalte ein Zeilenpuls kommt
    45. Zeichen_ = Timer1
    46. Spalte_ = Pinc And &B11
    47. If Spalte_ < 3 And Tz = 3 Then 'fallende Flanke, mind. eine Spalte wird low
    48. Zeichen = Zeichen_
    49. Spalte = Spalte_
    50. Zeichen_da = 1
    51. Disable Pcint1
    52. Tz = 0
    53. End If
    54. If Spalte_ < 3 And Tz < 3 Then 'fallende Flanke, mind. eine Spalte wird low
    55. Incr Tz
    56. End If
    57. Return
    Alles anzeigen
    Aber wie kann ich den code jetzt für die Ausgabe verwenden? Ich weiß jetzt, wieweit der timer laufen muss, bis ich eine Spalte auf low ziehen muss. Ich denke mal mit einem compare-interrupt?
    Raum für Notizen

    -----------------------------------------------------------------------------------------------------

    -----------------------------------------------------------------------------------------------------