Ampelsteuerung mit AT328p

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

    • tschoeatsch schrieb:

      Deine alias mit Leerzeichen dazwischen werden angenommen?
      Da hattest du aber noch kein IF - THEN drin.

      Thomas1964 schrieb:

      Ja die alias mit Leerzeichen werden ohne Probleme oder Fehlermeldungen angenommen.
      Und jetzt hast du Fehler. Also, Leerzeichen raus (zusammenschreiben) , oder mit Unterstrich.
      Ist zwar 'ne Tipperei, führt aber zu neuen Erkenntnissen. "Normalerweise" sollte das Prog von
      Meister Hora aber funktionieren. Bin ich von überzeugt.

      Detlef
      Leichtsinn ist kein Mut, Vorsicht keine Feigheit.
    • @Thomas1964

      Benenne mal Deine Variablen richtig. Die Leerzeichen in den Namen sind nämlich falsch:

      F2_4 Weiss ist eben nicht eine Variable sondern irgendwas, die Variable heißt nur F2_4

      156 If F1_3 Weiss = 0 Then F1_3 Weiss = F1_3_enable

      Error : 35 Line : 156 3 parameters expected , in File : Z:\µC Programme\Ampelkreuzung 328p.bas

      Diese Fehlermeldung besagt, daß die Anzahl der erforderlichen Parameter falsch ist, weill hier Varialen und sonstige Wertze ohne Zuweisung stehen. Eine richtige If-Anweisung lautet

      If Variable_1 = X Then
      Tue_was
      else
      tue_was_anderes
      end if

      oder wenn es keinen else-Zweig gibt, dann

      If Variable_1 = X then Tue_was (verkürzte Schreibweise)

      Gruß Harald
      Wem ich nicht ausdrücklich widerspreche, der darf das bis auf Widerruf als "Gefällt mir" verstehen.
    • Ein Test: Ändere mal die alias, die in der timer1_isr verwendet werden so ab, dass keine Leerzeichen innerhalb derVariablen sind, Leerzeichen weg lassen oder durch _ ersetzen. Also F1_3 Weiss zu F1_3Weiss nachen. Die anderen verwendeten Variablen genau so, F2_4 Weiss zu F2_4Weiss.
      Raum für Notizen

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

      -----------------------------------------------------------------------------------------------------
    • Hm.

      Auch wenn der Compiler die alias-Anweisung annimmt und nicht meckert

      z.B.
      A1_3 Rot Alias Portb.5

      dann bin ich mir nicht sicher ob er damit auch mit den logischen Operationen zurechtkommt


      tschoeatsch schrieb:

      BASCOM-Quellcode

      1. Timer1_isr:
      2. Load Timer1 , Timer1reload
      3. If F1_3 Weiss = 0 Then
      4. F1_3 Weiss = F1_3_enable
      5. Else
      6. F1_3 Weiss = 0
      7. End if
      8. If F2_4 Weiss = 0 Then
      9. F2_4 Weiss = F2_4_enable
      10. Else
      11. F2_4 Weiss = 0
      12. end if
      13. Return
      Alles anzeigen
      Probier mal das.

      Kannst du mal das Programm zum Test abspecken und
      schreiben

      A1_3_Rot

      also mit Unterstrich verbinden



      EDIT: AArgs... Die Meister waren wieder schneller.
      Geht aber in die gleiche Richtung....

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

    • Hallo tschoetsch,

      lag an den Varialen, wieder was gelernt, das
      die keine Leerzeichen enthalten dürfen.

      Hier der Code, vieleicht kann ja einer was mit anfangen.

      Eagle Board zum aufstecken auf Arduino R3 habe ich als Anhang
      hochgeladen...

      Gruß Thomas


      Quellcode

      1. 'Programmname: Ampelkreuzung 328p.bas
      2. 'Funktion: Ampelkreuzung mit Fussgänger
      3. 'Mikrocontroller: Mega328
      4. '------------------------------------------------------------------------------------
      5. $regfile = "m328pdef.dat" ' eingesetzter Mikrocontroller
      6. $crystal = 16000000 ' eingestellte Taktfrequenz
      7. $hwstack = 40
      8. $swstack = 32
      9. $framesize = 60
      10. '------------------------------------------------------------------------------------
      11. Config Portc.0 = Input
      12. Config Portb = Output 'gesamten Port B als Ausgabeport
      13. Config Portd = Output 'gesamten Port D als Ausgabeport
      14. A1_3_rot Alias Portb.5 'Aliasnamen vergeben
      15. A1_3_gelb Alias Portb.4
      16. A1_3_gruen Alias Portb.3
      17. A2_4_rot Alias Portb.2
      18. A2_4_gelb Alias Portb.1
      19. A2_4_gruen Alias Portb.0
      20. F1_3_weiss Alias Portd.7
      21. F1_3_rot Alias Portd.6
      22. F1_3_gruen Alias Portd.5
      23. F2_4_weiss Alias Portd.4
      24. F2_4_rot Alias Portd.3
      25. F2_4_gruen Alias Portd.2
      26. '-----------------------------------------------------------------------------------
      27. Dim Analogwandler As Word 'Variable zur Aufnahme des Wertes vom Analogwandler 'Schleifenanfang
      28. Dim Potiwert As Integer
      29. Dim F1_3_enable As Bit
      30. Dim F2_4_enable As Bit
      31. Dim Pause As Byte
      32. '---------------- Timer konfigurieren----------------------
      33. const Timer1Reload = 7812
      34. config timer1=timer,prescale = 1024
      35. load timer1 , Timer1Reload
      36. on ovf1 Timer1_isr
      37. enable timer1
      38. start timer1
      39. Enable Interrupts
      40. Config Adc = Single , Prescaler = Auto , Reference = Avcc
      41. Do
      42. Pause = 3
      43. Analogwandler = Getadc(0)
      44. Potiwert = Analogwandler / 16
      45. 'Phase 1
      46. A1_3_rot = 1
      47. A1_3_gelb = 0
      48. A1_3_gruen = 0
      49. A2_4_rot = 0
      50. A2_4_gelb = 0
      51. A2_4_gruen = 1
      52. F1_3_gruen = 1
      53. F1_3_rot = 0
      54. F2_4_rot = 1
      55. Wait Potiwert
      56. F1_3_gruen = 0
      57. F1_3_rot = 1
      58. F1_3_enable = 1
      59. F2_4_enable = 0
      60. Wait 1
      61. 'Phase 2
      62. A1_3_rot = 1
      63. A1_3_gelb = 0
      64. A1_3_gruen = 0
      65. A2_4_rot = 0
      66. A2_4_gelb = 1
      67. A2_4_gruen = 0
      68. Wait Pause
      69. 'Phase 3
      70. A1_3_rot = 1
      71. A1_3_gelb = 0
      72. A1_3_gruen = 0
      73. A2_4_rot = 1
      74. A2_4_gelb = 0
      75. A2_4_gruen = 0
      76. Wait Pause
      77. 'Phase 4
      78. A1_3_rot = 1
      79. A1_3_gelb = 1
      80. A1_3_gruen = 0
      81. A2_4_rot = 1
      82. A2_4_gelb = 0
      83. A2_4_gruen = 0
      84. Wait Pause
      85. 'Phase 5
      86. A1_3_rot = 0
      87. A1_3_gelb = 0
      88. A1_3_gruen = 1
      89. A2_4_rot = 1
      90. A2_4_gelb = 0
      91. A2_4_gruen = 0
      92. F2_4_gruen = 1
      93. F2_4_rot = 0
      94. Wait Potiwert
      95. F2_4_gruen = 0
      96. F2_4_rot = 1
      97. F1_3_enable = 0
      98. F2_4_enable = 1
      99. Wait 1
      100. 'Phase 6
      101. A1_3_rot = 0
      102. A1_3_gelb = 1
      103. A1_3_gruen = 0
      104. A2_4_rot = 1
      105. A2_4_gelb = 0
      106. A2_4_gruen = 0
      107. Wait Pause
      108. 'Phase 7
      109. A1_3_rot = 1
      110. A1_3_gelb = 0
      111. A1_3_gruen = 0
      112. A2_4_rot = 1
      113. A2_4_gelb = 0
      114. A2_4_gruen = 0
      115. Wait Pause
      116. 'Phase 8
      117. A1_3_rot = 1
      118. A1_3_gelb = 0
      119. A1_3_gruen = 0
      120. A2_4_rot = 1
      121. A2_4_gelb = 1
      122. A2_4_gruen = 0
      123. Wait Pause
      124. Loop
      125. End
      126. '--------------------------------------------------------------------
      127. Timer1_isr:
      128. Load Timer1 , Timer1reload
      129. If F1_3_weiss = 0 Then
      130. F1_3_weiss = F1_3_enable
      131. Else
      132. F1_3_weiss = 0
      133. End If
      134. If F2_4_weiss = 0 Then
      135. F2_4_weiss = F2_4_enable
      136. Else
      137. F2_4_weiss = 0
      138. end if
      139. Return
      Alles anzeigen
      Dateien
    • Thomas1964 schrieb:

      Ja die alias mit Leerzeichen werden ohne Probleme oder Fehlermeldungen angenommen.
      Hab nur mal grob geschaut aber die Alias sollten wenn möglich nicht ein Bezug zu Systemvariablen habe. Diese Schreibweise [F1_3 Weiss = F1_3_enable] würde ich immer vermeiden.
      Man solle den Compiler nicht überfordern bei der Syntaxprüfung.

      Ja dann könne schon solche Meldungen kommen. Wie diese.
      Error : 350 Line : 152 Interrupt needs return [[ 13]]