Warum hängt diese Programm manchmal ?

    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!

    • daja schrieb:

      Wenn es aber eine Besere Lösung gibt
      Es gibt sicher viele andere Lösungen aber ob die dann besser sind? a_56_df238249 Es macht ja was es soll (meißtens - die Ausfälle würde ich auch Hardwareseitig vermuten)

      daja schrieb:

      diese hier macht für mich die Sache übersichtlicher.
      genau darum gehts. :)
      Ich verwende zusätzlich die Intention Lines da sieht man gleich falls eine Schleife "entschleift" wurde und durch verschiedene Farben sind auch größere Programmblöcke gut zu erkennen (was Du mit dem mehrfach einrücken erreicht hast)
    • Hallo Daja
      Ich habe mir mal Deinen Code in Ruhe angeschaut. War gestern ein Schnellschuß von mir. Ich habe nicht gesehen das die Schleifen nacheinander ablaufen, sondern angenommen Sie sind verschachtelt. Im Code sehe ich keinen Fehler. In den alten Beiträgen wurden ja auch schon alle möglichen Fehler angesprochen. Da das Programm Final ist könnte man Sicherheitshalber die Stackwerte noch weiter vergrößern, der AVR hat ja noch 30% Speicher frei. Wenn man sich den ganzen Beitrag mal durchliest und das Projekt mal versteht, dann merkt man das Du schon ein Pfiffikus bist.

      Am Schaltplan merkt man das Du dich schon länger mit Elektronik beschäftigst. Die Üblichen Copy und Past Fehler fehlen.

      Darf ich trotzdem noch einige Anregungen geben? - Wenn der Schaltplan so noch aktuell ist.
      Den C4 am Reseteingang solltest Du entfernen. Bei Spannungsschwankungen gibt es jetzt keinen Reset, es sei den Du hast BOD in den Fuses aktiviert, obwohl der AVR selbst schon Unterspannung hat.
      Den C310 kann man noch reichlich größer machen. Hatte auch mal 47µF verbaut, da hat ein anderer Verbraucher einen Impuls auf der Netzspannung verursacht und somit dauernd einen Reset ausgelöst. Erst bei 800µF war der Spuk vorbei.
      Frage: Wie sind die Spannungen an den AVR Eingängen der Lichtschranken? Geht die Spannung wieder sauber auf 5V hoch?
      Bei der Transistorbeschaltung würde ich zusätzlich einen externen 1k Pullup verwenden.
      Bin halt auch ein bisschen von der alten Schule. ;)

      Hat noch jemand eine bessere Idee? Auch ich lerne noch gerne jeden Tag etwas neues dazu.

      Noch einen schöne Tag an alle.
    • Hallo daja,
      ich habe dir die Hauptschleife mal etwas geändert und die Gosubs rausgenommen.
      Für mich ist so viel besser zu verstehen, was da passiert. Auch finde ich di Einrückung unmittelbar verständlich.

      BASCOM-Quellcode

      1. Do
      2. Led = Du
      3. If Du = 1 Then
      4. If Raus = 1 And Rein = 0 Then
      5. D = 0
      6. For D = 1 To 10 '10 Durchläufe
      7. For X = 0 To 255 Step 51 'a1 an
      8. Pwm1b = X
      9. Waitms Zeit
      10. Next
      11. For X = 0 To 255 Step 51 'a2 an
      12. Pwm1a = X
      13. Pwm1b = 255 - X
      14. Waitms Zeit
      15. Next
      16. For X = 0 To 255 Step 51 'a3 an
      17. Pwm0a = X
      18. Pwm1a = 255 - X
      19. Waitms Zeit
      20. Next
      21. For X = 0 To 255 Step 51 'a4 an
      22. Pwm0b = X
      23. Pwm0a = 255 - X
      24. Waitms Zeit
      25. Next
      26. For X = 0 To 255 Step 51 'a4 aus
      27. Pwm0b = 255 - X
      28. Waitms Zeit
      29. Next
      30. If Rein = 1 Then
      31. Exit For 'Abfrage ob Weg fertig
      32. End If
      33. Next D
      34. Rein = 0
      35. Raus = 0
      36. Elseif Rein = 1 And Raus = 0 Then
      37. D = 0
      38. For D = 1 To 10 '10 Durchläufe
      39. For X = 0 To 255 Step 51 'a4 an
      40. Pwm0b = X
      41. Waitms Zeit
      42. Next
      43. For X = 0 To 255 Step 51 'a3 an
      44. Pwm0a = X
      45. Pwm0b = 255 - X 'a4 aus
      46. Waitms Zeit
      47. Next
      48. For X = 0 To 255 Step 51 'a2 an
      49. Pwm1a = X
      50. Pwm0a = 255 - X 'a3 aus
      51. Waitms Zeit
      52. Next
      53. For X = 0 To 255 Step 51 'a1 an
      54. Pwm1b = X
      55. Pwm1a = 255 - X 'a2 aus
      56. Waitms Zeit
      57. Next
      58. For X = 0 To 255 Step 51 'a1 aus
      59. Pwm1b = 255 - X
      60. Waitms Zeit
      61. Next
      62. If Raus = 1 Then 'Abfrage ob Weg fertig
      63. Exit For
      64. End If
      65. Next D
      66. Rein = 0
      67. Raus = 0
      68. End If
      69. End If
      70. Loop
      Alles anzeigen
      Bist du dir eigentlich sicher, dass DU (ACSR.ACO) immer den Wert 1 hat? Wenn das nicht der Fall ist, macht dein Programm nichts und sieht so aus, als ob es hängt. Schau doch mal, ob du dir den Wert nicht irgendwie anzeigen lassen kannst, z.B. einen Port-Pin mit LED auf diesen Wert setzen.
    • Franz schrieb:

      Hallo daja,
      ich habe dir die Hauptschleife mal etwas geändert und die Gosubs rausgenommen.
      Für mich ist so viel besser zu verstehen, was da passiert. Auch finde ich di Einrückung unmittelbar verständlich.

      BASCOM-Quellcode

      1. Do
      2. Led = Du
      3. If Du = 1 Then
      4. If Raus = 1 And Rein = 0 Then
      5. D = 0
      6. For D = 1 To 10 '10 Durchläufe
      7. For X = 0 To 255 Step 51 'a1 an
      8. Pwm1b = X
      9. Waitms Zeit
      10. Next
      11. For X = 0 To 255 Step 51 'a2 an
      12. Pwm1a = X
      13. Pwm1b = 255 - X
      14. Waitms Zeit
      15. Next
      16. For X = 0 To 255 Step 51 'a3 an
      17. Pwm0a = X
      18. Pwm1a = 255 - X
      19. Waitms Zeit
      20. Next
      21. For X = 0 To 255 Step 51 'a4 an
      22. Pwm0b = X
      23. Pwm0a = 255 - X
      24. Waitms Zeit
      25. Next
      26. For X = 0 To 255 Step 51 'a4 aus
      27. Pwm0b = 255 - X
      28. Waitms Zeit
      29. Next
      30. If Rein = 1 Then
      31. Exit For 'Abfrage ob Weg fertig
      32. End If
      33. Next D
      34. Rein = 0
      35. Raus = 0
      36. Elseif Rein = 1 And Raus = 0 Then
      37. D = 0
      38. For D = 1 To 10 '10 Durchläufe
      39. For X = 0 To 255 Step 51 'a4 an
      40. Pwm0b = X
      41. Waitms Zeit
      42. Next
      43. For X = 0 To 255 Step 51 'a3 an
      44. Pwm0a = X
      45. Pwm0b = 255 - X 'a4 aus
      46. Waitms Zeit
      47. Next
      48. For X = 0 To 255 Step 51 'a2 an
      49. Pwm1a = X
      50. Pwm0a = 255 - X 'a3 aus
      51. Waitms Zeit
      52. Next
      53. For X = 0 To 255 Step 51 'a1 an
      54. Pwm1b = X
      55. Pwm1a = 255 - X 'a2 aus
      56. Waitms Zeit
      57. Next
      58. For X = 0 To 255 Step 51 'a1 aus
      59. Pwm1b = 255 - X
      60. Waitms Zeit
      61. Next
      62. If Raus = 1 Then 'Abfrage ob Weg fertig
      63. Exit For
      64. End If
      65. Next D
      66. Rein = 0
      67. Raus = 0
      68. End If
      69. End If
      70. Loop
      Alles anzeigen
      Bist du dir eigentlich sicher, dass DU (ACSR.ACO) immer den Wert 1 hat? Wenn das nicht der Fall ist, macht dein Programm nichts und sieht so aus, als ob es hängt. Schau doch mal, ob du dir den Wert nicht irgendwie anzeigen lassen kannst, z.B. einen Port-Pin mit LED auf diesen Wert setzen.
      In deinem Programmschnipsel die Zeile 2 ist die Kontrolle, ob dunkel oder nicht.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hallo @daja

      Ich denke ich habe in deinem Code noch einen Fehler entdeckt bezüglich Konfiguration des Analog-Komparators.

      Den Initialisierst du ja mit
      ACSR = &b0000_0000

      Im Schaltbild ist der LDR an AIN1 (-) angeschlossen, der AIN0 (+) ist unbeschaltet.

      Auf diese Weise vergleichst du den LDR-Pegel mit einem offenen Eingang.

      Ich vermute, du wolltest den internen Bandgap aktivieren?

      Dann solltest du die Initialisierung so abändern:

      ACSR = &b0100_0000

      (Bit 6 setzen für Bandgap)
    • Mitch64 schrieb:

      Im Schaltbild ist der LDR an AIN1 (-) angeschlossen, der AIN0 (+) ist unbeschaltet.
      Nein AIN0 ist beschaltet, siehe Programm. Sorry ist im Schaltplan nicht geändert, weil nachträglich huckepack aufgelötet.
      Ich habe mit dieser Rückkopplung die Hysterese vergrößert.
      Dieser Teil der Steuerung funktioniert ja auch (Kontrol LED leuchtet), er reagiert nicht auf die Lichttaster.

      Hier mal 2 Videos

      youtu.be/r8V9-v9Zv9w
      youtu.be/BlHtt02q_Ig

      hof.png

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

    • Ja dann sieht das schon anders aus mit dem Comparator.
      Dann ist die Initialisierung ja korrekt!

      Videos habe ich mir angeschaut.
      In meiner Fantasie habe ich einen Weg gesehen, an dem links und rechts diese Led-Streifen sind.

      Ist doch immer wieder erhellend, wenn man das mal real sieht.
      Der Effekt ist bei Dämmerung oder im Dunkeln bestimmt enorm.

      Vielen dank für die Video-Präsentation.