LEDs unabhänging voneinander blinken lassen

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!

  • stefanhamburg schrieb:

    Hi Sven,
    könntest Du nicht als ersten Ansatz eine einfache Endlosschleife schreiben, in der Du Zähler hochzählst und bei leicht unterschiedlichen Zählerendständen die LEDs getoggelt (umgeschaltet) werden? Ohne Timer oder so.
    So etwas in der Art:

    BASCOM-Quellcode

    1. ...
    2. DIM LED1_zaehler AS WORD
    3. DIM LED2_zaehler AS WORD
    4. ...
    5. DO
    6. IF Led1_zaehler < 800 THEN
    7. INCR Led1_zaehler
    8. ELSE
    9. Led1_zaehler = 0
    10. TOGGLE Led1
    11. END IF
    12. IF Led2_zaehler < 900 THEN
    13. INCR Led2_zaehler
    14. ELSE
    15. Led2_zaehler = 0
    16. TOGGLE Led2
    17. END IF
    18. WAITMS 1
    19. LOOP
    Alles anzeigen



    Nur als erste Idee.


    Zu der Variablendimensionierung siehe auch unter Datentypen
    Wäre auch mein Favorit, wenn ich es nicht bisschen anders machen würde: 8) Statt if-Abfragen ein select case

    BASCOM-Quellcode

    1. Select Case Led1_zaehler
    2. Case 1 To 50 : Led1 = 1
    3. Case 51 To 200 : Led1 = 0
    4. Case 201 : Led1_zaehler = 0
    5. End Select
    6. Incr Led1_zaehler
    Der Vorteil an diesem Konstrukt wäre das einstellbare 'Tastverhältnis', so kann man 'Blitze' besser realisieren, also die 'An-Zeit' der Led deutlich kürzer wie die 'Aus-Zeit' machen.
    Im Beispiel wäre das ein 50 msec Blitz mit einer nachfolgenden Pause von 150 msec (alles ca.-Werte)
    Raum für Notizen

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

    -----------------------------------------------------------------------------------------------------
  • stefanhamburg schrieb:

    stefanhamburg schrieb:

    könntest Du nicht als ersten Ansatz ...

    a_17_af3b400f Ich bin natürlich nicht davon ausgegangen, dass du es nicht anders kannst.
    Raum für Notizen

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

    -----------------------------------------------------------------------------------------------------
  • BASCOM-Quellcode

    1. ...
    2. Config Portx = Output
    3. Led1 Alias Portx.y1
    4. Led2 Alias Portx.y2
    5. Dim Led1_zaehler As Word
    6. Dim Led2_zaehler As Word
    7. Do
    8. Select Case Led1_zaehler
    9. Case 1 To 800 : Led1 = 1
    10. Case 801 To 2000 : Led1 = 0
    11. Case 2001 : Led1_zaehler = 0
    12. End Select
    13. Incr Led1_zaehler
    14. Select Case Led2_zaehler
    15. Case 1 To 810 Led2 = 1
    16. Case 811 To 2010 : Led2 = 0
    17. Case 2011 : Led2_zaehler = 0
    18. End Select
    19. Incr Led2_zaehler
    20. Loop
    21. End
    Alles anzeigen
    So ist es fast komplett, am Anfang noch die nötigen Zeilen mit Kontrollertyp, crystal, stackwerte einfügen, den port noch genau bezeichnen und dann sollte es gehen (hoffe ich, ich bin weit weg von der Unfehlbarkeit)
    Raum für Notizen

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

    -----------------------------------------------------------------------------------------------------
  • So, habe das Programm mal entsprechend ergänzt. In der Praxis Flackern die beiden LEDs ( PB0 und PB1 ) nur ganz wenig und im selben Takt. Simuliert ein kleiens Feuer. :D Ist aber nicht wirklich ein Rundumblitzer. ;) Hatte nochmal ein wenig probiert, hat sich aber nichts geändert.


    BASCOM-Quellcode

    1. '*************************************************************************************************
    2. '* *
    3. '* Tiny13 mit 9,6 MHz *
    4. '* *
    5. '* Doppelblitz Tiny *
    6. '* *
    7. '*************************************************************************************************
    8. $regfile = "attiny13.dat"
    9. $crystal = 9600000
    10. $hwstack = 16
    11. $swstack = 8
    12. $framesize = 24
    13. Portb.0 = 1
    14. Portb.1 = 1
    15. Portb.2 = 1
    16. Portb.3 = 1
    17. Portb.4 = 1
    18. Config Portb = Output
    19. Led1 Alias Portb.0
    20. Led2 Alias Portb.1
    21. Dim Led1_zaehler As Word
    22. Dim Led2_zaehler As Word
    23. Do
    24. Select Case Led1_zaehler
    25. Case 1 To 800 : Led1 = 1
    26. Case 801 To 2000 : Led1 = 0
    27. Case 2001 : Led1_zaehler = 0
    28. End Select
    29. Incr Led1_zaehler
    30. Select Case Led2_zaehler
    31. Case 1 To 810 : Led2 = 1
    32. Case 811 To 2010 : Led2 = 0
    33. Case 2011 : Led2_zaehler = 0
    34. End Select
    35. Incr Led2_zaehler
    36. Loop
    37. End
    Alles anzeigen
  • BASCOM-Quellcode

    1. '*************************************************************************************************
    2. '* *
    3. '* Tiny13 mit 9,6 MHz *
    4. '* *
    5. '* Doppelblitz Tiny *
    6. '* *
    7. '*************************************************************************************************
    8. $regfile = "attiny13.dat"
    9. $crystal = 9600000
    10. $hwstack = 16
    11. $swstack = 8
    12. $framesize = 24
    13. Portb.0 = 1
    14. Portb.1 = 1
    15. Portb.2 = 1
    16. Portb.3 = 1
    17. Portb.4 = 1
    18. Config Portb = Output
    19. Led1 Alias Portb.0
    20. Led2 Alias Portb.1
    21. Dim Led1_zaehler As Word
    22. Dim Led2_zaehler As Word
    23. Do
    24. Select Case Led1_zaehler
    25. Case 1 To 30 : Led1 = 0
    26. Case 31 To 300 : Led1 = 1
    27. Case 601 : Led1_zaehler = 1
    28. End Select
    29. Incr Led1_zaehler
    30. Select Case Led2_zaehler
    31. Case 1 To 40 : Led2 = 0
    32. Case 41 To 310 : Led2 = 1
    33. Case 611 : Led2_zaehler = 1
    34. End Select
    35. Incr Led2_zaehler
    36. Waitms 1
    37. Loop
    38. End
    Alles anzeigen
  • Das

    BASCOM-Quellcode

    1. Config Portb = Output
    solltest Du VOR dem setzen der Portpins schreiben. Macht sich in diesem Fall kaum bemerkbar.
    Bist Du mit dem Ergebnis denn zufrieden?

    Damit Du in einem Jahr noch weißt, was Du gemacht hast, solltest Du noch mehr Kommentare einfügen. Ganz oben eine kurze Funktionsbeschreibung - praktisch Dein Anforderungssatz aus Post #1. Und im Programm dann kleine Gedächtnisstützen. Zum Beispiel 'LED1 Dunkelphase, 'LED1 Hellphase, usw. MUSS man nicht machen, aber es erleichtert Dir später (und anderen) das Lesen des Programms.
    Ansonsten kannst Du jetzt ja noch weitere LEDs ansteuern ... Viel Spaß!
  • Hallo Stefan,

    das mache ich eigentlich auch. Ich muss gestehen, dass da zuvor auch noch andere Programme waren. Haben schon viele verschiedene Lösungsansätzen versucht. Daher habe ich das Programm auch noch nicht kommentiert. Das mache ich eigentlich sonst immer. ;)

    Mal abgesehen von der großen 1 ms Pause sieht das super aus. :thumbsup: Habe schon mal überlegt, die Pause vielleicht mit einer Schleife zu machen.... Vielleicht gehts dann schneller.
  • Ja perfekt ! :) Nun ist das ganze 1 a ! Vielen Dank euch allen für die Hilfe und Tipps ! Möchte euch das fertige Programm aber nicht vorenthalten:

    BASCOM-Quellcode

    1. '*************************************************************************************************
    2. '* *
    3. '* Tiny13 mit 9,6 MHz *
    4. '* *
    5. '* Doppelblitz Tiny *
    6. '* *
    7. '*************************************************************************************************
    8. $regfile = "attiny13.dat"
    9. $crystal = 9600000
    10. $hwstack = 16
    11. $swstack = 8
    12. $framesize = 24
    13. Config Portb = Output
    14. Led1 Alias Portb.0
    15. Led2 Alias Portb.1
    16. Dim Led1_zaehler As Word
    17. Dim Led2_zaehler As Word
    18. Portb.0 = 1
    19. Portb.1 = 1
    20. Portb.2 = 1
    21. Portb.3 = 1
    22. Portb.4 = 1
    23. Do
    24. Select Case Led1_zaehler
    25. Case 1 To 30 : Led1 = 0
    26. Case 31 To 300 : Led1 = 1
    27. Case 601 : Led1_zaehler = 1
    28. End Select
    29. Incr Led1_zaehler
    30. Select Case Led2_zaehler
    31. Case 1 To 40 : Led2 = 0
    32. Case 41 To 310 : Led2 = 1
    33. Case 611 : Led2_zaehler = 1
    34. End Select
    35. Incr Led2_zaehler
    36. Waitus 500
    37. Loop
    38. End
    Alles anzeigen
  • Zeile 24 bis 28 kannst Du zusammenfassen:

    PORTB=1

    Gruß Christian

    PS: Hier auch mal ein Doppelblitzer:


    BASCOM-Quellcode

    1. '************************************************************
    2. ' Kleiner Mikrocontroller Einsteigerkurs
    3. ' (c) 2013/2014 ceperiga
    4. '------------------------------------------------------------
    5. ' Projektinfos: www.bascomforum.de
    6. '------------------------------------------------------------
    7. ' Stufe 1: Attiny 13
    8. '------------------------------------------------------------
    9. 'Informationen zur CC-Lizensierung:http://creativecommons.org
    10. '============================================================
    11. ' Name:
    12. ' Unit: 1.1.2
    13. '------------------------------------------------------------
    14. 'Beschreibung: Doppelblitzer mit 2 Leuchtdioden
    15. '************************************************************
    16. $regfile = "attiny13.dat" 'verwendeter Controller
    17. $crystal = 1200000 'Taktfrequenz
    18. $HWSTACK=6 'Stackwerte und Framesize zuweisen
    19. $SWSTACK=6
    20. $FRAMESIZE=28
    21. '==============================================================================
    22. 'Ausgänge / Eingänge deklarieren / Aliasvergabe
    23. '------------------------------------------------------------------------------
    24. Config Portb.1 = Output 'Port b.1 als Ausgang
    25. Config Portb.3 = Output 'Port b.3 als Ausgang
    26. Led_links Alias PortB.1 'Umbenennen von PortB.1
    27. Led_rechts Alias PortB.3 'Umbenennen von PortB.3
    28. '==============================================================================
    29. 'Hauptprogramm
    30. '------------------------------------------------------------------------------
    31. Do 'Schleifenanfang
    32. Led_links = 1 'Port B.1 einschalten
    33. Waitms 50 '50 ms warten
    34. Led_links = 0 'Port B.1 ausschalten
    35. Waitms 50 '50 ms warten
    36. Led_links = 1 'Port B.1 einschalten
    37. Waitms 50 '50 ms warten
    38. Led_links = 0 'Port B.1 ausschalten
    39. Waitms 50 '50 ms warten
    40. Led_rechts = 1 'Port B.3 einschalten
    41. Waitms 50 '50 ms warten
    42. Led_rechts = 0 'Port B.3 ausschalten
    43. Waitms 50 '50 ms warten
    44. Led_rechts = 1 'Port B.3 einschalten
    45. Waitms 50 '50 ms warten
    46. Led_rechts = 0 'Port B.1 ausschalten
    47. Waitms 150 '150 ms warten
    48. Loop 'Zurück zu Do (Schleifenanfang)
    49. '==============================================================================
    50. End 'end program
    Alles anzeigen
    Wenn das die Lösung ist, möchte ich mein Problem wieder haben.