Attiny 24 INT0 Eingang

    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!

    • Attiny 24 INT0 Eingang

      Hi,

      ich bin auf der Suche nach Hilfe, da ich einfach nicht weiterkomme.

      Das Programm schaltet mit einem Eingang zwei verschiedene Ausgänge ein und aus. Eigentlich recht einfach. Da ich aber nur sporadisch mich mit dem Programmieren beschäftige ist es nicht so einfach mich in die Materie einzuarbeiten. Daher bitte ich um Sachliche Antworten!

      Zur Hardware… Ich verwende einen Attiny 24 bei dem alle Pin benötigt werden.

      Die Pins B.0 / B.1 / B.2 / B.3 sind alle als Eingänge in Verwendung. Mir ist klar, dass der PinB.3 ein Reset Pin ist. Diese würde ich aber gerne als Eingang nutzen. Ich gehe davon aus, dass dies so möglich ist. Gibt es dabei etwas zu beachten?

      Meine momentane Hürde ist aber der Pin PB.2 Diesen verwende ich als Eingangspin. Starte ich den Tiny schalten erst alle Ausgänge einmal Ein und dann aus. Dies ist auch so gewollt. Dann ist der Tiny mit seinem Programm aber erst Aktive, wenn der PinB.2 einmal betätigt wurde.

      Dieser Pin kann laut Datasheet ja den INT0 ansprechen. Diesen Interrupt habe ich aber in der Software nicht Aktiv gesetzt.

      Was Übersehe ich oder habe ich vergessen damit ich diese Funktion nicht habe?
      Mir ist bewuß, dass das Programm nicht seht elegant ist, aufgrund meine fehlenden Kenntnis, wenn aber jemand einen verbesseungsvorschlag hat
      bin ich natürlich gerne offen für konstruktive Kritik. ;)




      BASCOM-Quellcode

      1. $regfile = "attiny24.dat"
      2. $crystal = 80000
      3. $hwstack = 40
      4. $swstack = 16
      5. $framesize = 32
      6. Config Pinb.0 = Input
      7. Config Pinb.1 = Input
      8. Config Pinb.2 = Input
      9. Config Pinb.3 = Input
      10. Config Porta = Output
      11. Taster1 Alias Pinb.0
      12. Taster2 Alias Pinb.1
      13. Taster3 Alias Pinb.3
      14. Taster4 Alias Pinb.2
      15. W1r Alias Porta.2
      16. W1g Alias Porta.0
      17. W2r Alias Porta.3
      18. W2g Alias Porta.1
      19. W3r Alias Porta.6
      20. W3g Alias Porta.4
      21. W4r Alias Porta.7
      22. W4g Alias Porta.5
      23. Dim Zaehler1 As Bit
      24. Dim Zaehler2 As Bit
      25. Dim Zaehler3 As Bit
      26. Dim Zaehler4 As Bit
      27. W1r = 1 ' Abgleich alle Antriebe schalten einmal hin und her'
      28. Waitms 300
      29. W1r = 0
      30. Waitms 50
      31. W1g = 1
      32. Waitms 300
      33. W1g = 0
      34. Waitms 50
      35. W2r = 1
      36. Waitms 300
      37. W2r = 0
      38. Waitms 50
      39. W2g = 1
      40. Waitms 300
      41. W2g = 0
      42. Waitms 50
      43. W3r = 1
      44. Waitms 300
      45. W3r = 0
      46. Waitms 50
      47. W3g = 1
      48. Waitms 300
      49. W3g = 0
      50. Waitms 50
      51. W4r = 1
      52. Waitms 300
      53. W4r = 0
      54. Waitms 50
      55. W4g = 1
      56. Waitms 300
      57. W4g = 0
      58. Disable Interrupts
      59. Do
      60. Debounce Taster1 , 0 , On_taster1 , Gosub 'Taster 1 Entprellen'
      61. Debounce Taster2 , 0 , On_taster2 , Gosub 'Taster 2 Entprellen'
      62. Debounce Taster3 , 0 , On_taster4 , Gosub 'Taster 3 Entprellen'
      63. Debounce Taster4 , 0 , On_taster4 , Gosub 'Taster 4 Entprellen'
      64. Loop
      65. End
      66. On_taster1:
      67. Bitwait Taster1 , Reset 'warten bis Taster auf 0 geht'
      68. Bitwait Taster1 , Set 'warten bis Taster auf 1 geht'
      69. If Zaehler1 = 0 Then
      70. W1r = 1
      71. Waitms 500
      72. W1r = 0
      73. Zaehler1 = 1
      74. Else
      75. W1g = 1
      76. Waitms 500
      77. W1g = 0
      78. Zaehler1 = 0
      79. End If
      80. Return
      81. On_taster2:
      82. Bitwait Taster2 , Reset 'warten bis Taster auf 0 geht'
      83. Bitwait Taster2 , Set 'warten bis Taster auf 1 geht'
      84. If Zaehler2 = 0 Then
      85. W2r = 1
      86. Waitms 500
      87. W2r = 0
      88. Zaehler2 = 1
      89. Else
      90. W2g = 1
      91. Waitms 500
      92. W2g = 0
      93. Zaehler2 = 0
      94. End If
      95. Return
      96. On_taster3:
      97. Bitwait Taster3 , Reset 'warten bis Taster auf 0 geht'
      98. Bitwait Taster3 , Set 'warten bis Taster auf 1 geht'
      99. If Zaehler3 = 0 Then
      100. W3r = 1
      101. Waitms 500
      102. W3r = 0
      103. Zaehler3 = 1
      104. Else
      105. W3g = 1
      106. Waitms 500
      107. W3g = 0
      108. Zaehler2 = 0
      109. End If
      110. Return
      111. On_taster4:
      112. Bitwait Taster4 , Reset 'warten bis Taster auf 0 geht'
      113. Bitwait Taster4 , Set 'warten bis Taster auf 1 geht'
      114. If Zaehler4 = 0 Then
      115. W4r = 1
      116. Waitms 500
      117. W4r = 0
      118. Zaehler4 = 1
      119. Else
      120. W4g = 1
      121. Waitms 500
      122. W4g = 0
      123. Zaehler4 = 0
      124. End If
      125. Return
      Alles anzeigen
      (Bitte Code in CodeBox einfügen! /six1)
    • Map2015 schrieb:

      Diese würde ich aber gerne als Eingang nutzen. Ich gehe davon aus, dass dies so möglich ist. Gibt es dabei etwas zu beachten?
      Zum einen musst du diesen Pin über die Fuse abschalten und zum anderen kannst du hinterher deinen Tiny nicht mehr flashen. Zumindestens nicht mehr über den normalen Weg.

      Zu deinem Taster-Problem: Du benutzt Debounce was schon für die Entprellung der Taster da ist aber dann hast du noch Bitwaits in den Taster-Subs. Das würde ich mal raus nehmen.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Map2015 schrieb:

      Um das Fusebit auszuschalten würde folgende Zeile gelten:
      Wenn du mit Fusebit den Reset-pin meinst, lass die Finger davon !!!
      Du versperrst dir damit den Zugang zum Controller. Will sageen, du kannst nicht
      mehr auf den Controller zugreifen , nicht mehr Flashen, keine Fusebits ändern und so.
      Also: Hände weg vom Reset !

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • djmsc schrieb:

      kannst du deine vier Tasten auch über einen ADC-Eingang abfragen. Das spart dann schon mal drei Pins ein.
      ADC aber nur an PortA. Und den hat er schon fest belegt.

      Wenn da nicht mehr dazu kommt, kann er auch mit PortB die vier Taster abfragen.
      Vorschlag:
      GND----+T1+-------|<--------+PB.0
      GND----+T2+-------|<--------+PB.1
      GND----+T3+-------|<--------+PB.0
      ..............+-------|<--------+PB.1
      GND----+T4+-------|<---------+PB.2

      Also, vom Pin über Entkopplungsdiode ,Taster nach GND.
      Bei den Pins Pullup Widerstände einschalten.

      PortB auslesen.
      Kein Taster = 7
      Taster 1 = 6
      Taster 2 = 5
      Taster 3 = 4
      Taster 4 = 3
      Alles unter3 Mismatch

      Nur so als Vorschlag, und RESET bleibt frei.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • Hallo an alle,

      vielen Dank für die Zahlreichen Antworten und guten Tips. Diese werde ich beim nächsten Projekt sichherlich berücksichtigen.
      Beim aktuellen Projekt bin ich allerdings auf den Reset PIN angewiesen, da die Platine komplett fertig ist. Daher ist die Optinon
      mit nem andere Controller leider nicht umsetzbar.

      Wo schalte ich denn den Reset PIN um? Wenn ich den Controller auslese kann ich ja den Resetpin auf enable und disable setzten. Wenn ich dies gemacht habe sende ich diese Info zum Controller.
      Nun starte ich die Schaltung neu. Aber er Reagiert nicht auf die Funkiton dieses Eingang.
      Daher bin ich davon ausgegangen, dass der Controller es nicht übernommen hat. Als gegentest habe ich den Controller versucht auszulesen. Dieser wird ja dann wie erwartet nicht mehr erkannt. Also gehe ich
      davon aus, dass er die Fusebit Einstellungen übernommen hat.

      Was muss ich dabei noch beachten ?

      Lg Marcel
    • Mal zum Verständnis:
      Du hast das Fuse-Bit für Reset = IO gesetzt und jetzt funktioniert dein Programm nicht richtig oder kannst du noch auf deinen Controller zugreifen?

      Als Beispiel zum setzen des Fuse-Bit Reset = IO bei einem Mega 8.

      Fuse-Bits-setzen.jpg Fuse-Bits-setzen2.jpg

      Du erreichst dieses Fenster über Manuelles Programmieren.
      Bei dir werden die Fuse-Bits sicherlich anders aussehen. Das ist von Controller zu Controller unterschiedlich.
      Eine Lösung habe ich nicht, aber mir gefällt Ihr Problem.
    • Dekaman schrieb:

      Also: Hände weg vom Reset !

      Michael schrieb:

      Ich möchte Dekamans Bedenken nochmal wiederholen.
      Es bringt dir nur Frust, wenn du dich so aus dem Controller aussperrst, gerade als Anfänger.
      Fällt dir was auf ?

      Du hast in deinem Quellcode Portb.0 - 3 als Input configriert.
      Dann fragst du die Pins mit Debounce ab, ob sie 0 sind. Sie müssen aber auch 1 sein können.
      Das erreichst du damit, das du die internen Pullup's einschaltest. (PORTB.0=1 , PORTB.1=1 ...........)
      In deinem Programm habe ich das aber nicht gefunden , oder übersehen ?
      Oder du verwendest Hardwaremäßig Widerstände nach VCC.
      Ich hatte in #8 einen Vorschlag unterbreitet. Deine Platine ist aber schon fertig, wie du schreibst.
      Aber selbst da kann man, wenn es nicht auf Schönheit ankommt, mit Lötkolben, Skalpell, Draht,
      den Dioden und etwas Heißkleber das alles noch richten. Das ist aber meine persönliche Meinung.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • Hi an Alle,

      Danke für die Tips,

      ich konnte die Fuse bits für den Resetpin ändern. Im gegensatz zu dem Bilderbeispiel von DJMSC ist beim Tiny keine Einstellung für diesen Pin auf I/O zu setzten.
      Anstatt schaltet man den Pin einfach nachdem das Programm aufgespielt wurde aus Disable.

      Vielen Dank für die Vielen hilfreichen Antworten. Beim nächsten Projekt wird von vorne rein anders gelöst.

      @ detlef ... die Pullups habe ich auf der Platine Hardware seitig gelößt daher ist diese Programmzeile nicht zu finden. Zum ändern der Platine... warum hardware seitig wenns doch Softwareseitig geht a_58_b54cfdb4
      Vielen dank auch an dich für die Tips. !!

      lg marcel