Unterprogramm, 2. Mikrocontroller

    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!

    • Mitch64 schrieb:

      weiß ich wie man das rechnet
      Die Berechnung ist ja auch richtig. Nun hätten seine 66k auch funktioniert (Wenn auch knapp). Ich nehme meißt 1k und eine Led. Dann darf es auch ein "beliebiger" Npn sein. Oft haben die erheblich weniger als 200 fache Verstärkung.
      Interssant das die Mikrocontroller-Leute mit Ihrer andern Rangehensweise auf ein ähnliches Ergebniss kommen. Deine 22K bei 5 fachen Strom = 5K5 . Anderes Datenblatt Hfe=100 - 2k7 . 8 stat 5fache Sicherheit =1k5.
      Vielzuviel Rechnerei . Man nehme einfach den nächsten der rumliegt zwischen 1 und 10 K - paßt schon.

      Und wieder fehlt das Grün a_31_4f4a3ad8
    • Guten Abend,
      bei 35 µA war ich auch gelandet. Haben dann die anstehende Spannung 2,28 V durch 35 µA geteilt = 64 K Ohm. Den Übersteuerungsfaktor habe ich aber vergessen!!
      Es ist ja sicherlich ein Fehler im Code, ihr werde es mir sicherlich sagen. -Aber wie komme ich auf 4,2 K Hz (lt. Multimeter) lt. Ozi 4,4 K Hz. Sind das die einzelnen Schritte? 3686400 / 4400 / 2?

      Hier noch einmal der fehlerhafte Code:


      $regfile = "m8def.dat"
      $crystal = 3686400
      $hwstack = 32
      $swstack = 10
      $framesize = 80
      Declare Sub Keypressed
      Dim Zeit As Word
      Dim Hupe As Bit

      On Timer1 Ontimer1 'Interrupt-Routine für Timer1-Overflow
      Config Timer1 = Timer , Prescale = 64 'Takt ist Quarz/64
      Enable Timer1 'Timer1-Overflow-Interrupt ein
      Enable Interrupts 'Interrupts global einschalten


      'Die Schalter schalten gegen Masse, alle Ports haben einen Pullup-Widerstand
      Config Pinb.0 = Input 'Wassertemperatur
      Portb.0 = 1
      Config Pinb.1 = Input 'Motoroeldruck
      Portb.1 = 1
      Config Pinb.2 = Input 'Getriebeoeldruck
      Portb.2 = 1
      Config Pinb.3 = Input 'Quittierschalter
      Portb.3 = 1
      Config Portd.2 = Output 'LED Wassertempe-
      'ratur
      Config Portd.3 = Output 'LED Motoroeldruck
      Config Portd.4 = Output 'LED Getriebeoel-
      'druck
      Config Portd.5 = Output 'Hupe (Relais)
      Config Portd.6 = Output 'Piezo-Summer


      Portd.2 = 1
      Portd.3 = 1
      Portd.4 = 1
      Waitms 200
      Portd.2 = 0
      Portd.3 = 0
      Portd.4 = 0
      Waitms 200
      Portd.2 = 1
      Portd.3 = 1
      Portd.4 = 1
      Waitms 200
      Portd.2 = 0
      Portd.3 = 0
      Portd.4 = 0
      Waitms 200
      Portd.2 = 1
      Portd.3 = 1
      Portd.4 = 1
      Waitms 200
      Portd.2 = 0
      Portd.3 = 0
      Portd.4 = 0

      Sound Portd.6 , 500 , 100
      Waitms 100
      Portd.6 = 0
      Sound Portd.6 , 800 , 100
      Waitms 100

      Portd.6 = 0
      Portd.5 = 1
      Waitms 100
      Portd.5 = 0
      Waitms 100
      Portd.5 = 1
      Waitms 100

      Portd.5 = 0

      Do
      If Pinb.0 = 0 Then
      Portd.2 = 1
      Else
      Portd.2 = 0
      End If

      If Pinb.1 = 0 Then
      Portd.3 = 1
      Else
      Portd.3 = 0
      End If

      If Pinb.2 = 0 Then
      Portd.4 = 1
      Else
      Portd.4 = 0
      End If



      If Pinb.0 = 0 Or Pinb.1 = 0 Or Pinb.2 = 0 And Hupe = 0 Then
      Hupe = 1
      Else
      Hupe = 0
      End If


      If Zeit = 0 And Hupe = 1 Then
      Portd.5 = 1
      Else
      Portd.5 = 0
      End If


      Debounce Pinb.3 , 0 , Keypressed , Sub


      Loop
      '----------------------------------------------------------------------------
      Sub Keypressed
      Zeit = 20
      End Sub
      End
      '
      '____________________________________________________________________________
      Ontimer1: 'Timer1-Overflow-Interrupt-Routine
      Timer1 = 57599 'Timer1 voreinstellen (=65535-7936) Blinkfrequenz 1 Sek
      'Timer1 voreinstellen (=65535-28801) Blinkfrequenz 0,5 Sek
      If Zeit > 0 Then Decr Zeit

      '
      Return

      Grüße
    • Mal so am Rand

      Sowas

      BASCOM-Quellcode

      1. Portd.2 = 1
      2. Portd.3 = 1
      3. Portd.4 = 1
      4. Waitms 200
      5. Portd.2 = 0
      6. Portd.3 = 0
      7. Portd.4 = 0
      8. Waitms 200
      9. Portd.2 = 1
      10. Portd.3 = 1
      11. Portd.4 = 1
      12. Waitms 200
      13. Portd.2 = 0
      14. Portd.3 = 0
      15. Portd.4 = 0
      16. Waitms 200
      17. Portd.2 = 1
      18. Portd.3 = 1
      19. Portd.4 = 1
      20. Waitms 200
      21. Portd.2 = 0
      22. Portd.3 = 0
      23. Portd.4 = 0
      Alles anzeigen
      kannst du auch kürzer schreiben

      BASCOM-Quellcode

      1. For X = 0 To 5
      2. Toggle Portd.2
      3. Toggle Portd.3
      4. Toggle Portd.4
      5. Waitms 200
      6. Next X
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Fiede schrieb:

      Guten Abend,
      bei 35 µA war ich auch gelandet. Haben dann die anstehende Spannung 2,28 V durch 35 µA geteilt = 64 K Ohm. Den Übersteuerungsfaktor habe ich aber vergessen!!
      Das erklärt natürlich den Vorwiderstand.
      Aber du musst mit der Spannung rechnen, die da rauskommen soll, wenn alles korrekt funktioniert. Also mit 5V.

      Jetzt heißt es erst mal den Fehler im Code finden.
    • Ich hab mir mal erlaubt dein Programm etwas zu überarbeiten

      BASCOM-Quellcode

      1. $regfile = "m8def.dat"
      2. $crystal = 3686400
      3. $hwstack = 32
      4. $swstack = 10
      5. $framesize = 80
      6. Config Timer1 = Timer , Prescale = 64 'Takt ist Quarz/64
      7. On Timer1 Ontimer1 'Interrupt-Routine für Timer1-Overflow
      8. Enable Timer1 'Timer1-Overflow-Interrupt ein
      9. Enable Interrupts 'Interrupts global einschalten
      10. 'Die Schalter schalten gegen Masse, alle Ports haben einen Pullup-Widerstand
      11. Config Pinb.0 = Input 'Wassertemperatur
      12. Portb.0 = 1
      13. Config Pinb.1 = Input 'Motoroeldruck
      14. Portb.1 = 1
      15. Config Pinb.2 = Input 'Getriebeoeldruck
      16. Portb.2 = 1
      17. Config Pinb.3 = Input 'Quittierschalter
      18. Portb.3 = 1
      19. Config Portd.2 = Output 'LED Wassertempe-
      20. 'ratur
      21. Config Portd.3 = Output 'LED Motoroeldruck
      22. Config Portd.4 = Output 'LED Getriebeoel-
      23. 'druck
      24. Config Portd.5 = Output 'Hupe (Relais)
      25. Config Portd.6 = Output 'Piezo-Summer
      26. Dim Zeit As Word
      27. Dim Hupe As Bit
      28. Dim X As Byte
      29. For X = 0 To 5
      30. Toggle Portd.2
      31. Toggle Portd.3
      32. Toggle Portd.4
      33. Waitms 200
      34. Next X
      35. Sound Portd.6 , 500 , 100
      36. Waitms 100
      37. Portd.6 = 0
      38. Sound Portd.6 , 800 , 100
      39. Waitms 100
      40. Portd.6 = 0
      41. Portd.5 = 1
      42. Waitms 100
      43. Portd.5 = 0
      44. Waitms 100
      45. Portd.5 = 1
      46. Waitms 100
      47. Portd.5 = 0
      48. Do
      49. Portd.2 = Not Pinb.0
      50. Portd.3 = Not Pinb.1
      51. Portd.4 = Not Pinb.2
      52. If Pinb.0 = 0 Or Pinb.1 = 0 Or Pinb.2 = 0 Then Hupe = 1
      53. If Pinb.0 = 1 And Pinb.1 = 1 And Pinb.2 = 1 And Hupe = 1 Then Hupe = 0
      54. If Zeit = 0 And Hupe = 1 Then
      55. Portd.5 = 1
      56. Else
      57. Portd.5 = 0
      58. End If
      59. Debounce Pinb.3 , 0 , Keypressed , Sub
      60. Loop
      61. End
      62. '----------------------------------------------------------------------------
      63. Keypressed:
      64. Zeit = 20
      65. Return '
      66. '____________________________________________________________________________
      67. Ontimer1: 'Timer1-Overflow-Interrupt-Routine
      68. Timer1 = 57599 'Timer1 voreinstellen (=65535-7936) Blinkfrequenz 1 Sek
      69. 'Timer1 voreinstellen (=65535-28801) Blinkfrequenz 0,5 Sek
      70. If Zeit > 0 Then Decr Zeit
      71. '
      72. Return
      Alles anzeigen
      Und so schaltet die Hupe auch ordentlich ein und per Taste für kurze Zeit aus.
      Wenn die Fehlerquelle beseitugt wird/wurde geht auch die Hupe wieder aus. Das hat in deinem Programm noch gefehlt.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.