- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 23

Thema: 4 Led´s unabhängig per Zufall blinken lassen?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    39
    Beiträge
    647

    4 Led´s unabhängig per Zufall blinken lassen?

    Hi,

    ich habe einen Atmega48, welcher ja 2 8bit und einen 16bit Timer hat.
    Mein Problem ist das ich 4 Led´s unabhängig voneinander Blinken lassen möchte. Die Einschaltzeit ist bei allen 10ms, die Zeit in der sie abgeschaltet sind liegt bei jeweils 2 einmal bei 51ms und einmal bei 86ms. Dabei soll die Zeitspanne in der die Led´s aus sind jeweils um ca. +-5-10ms variieren. Die Variation wollte ich mit dem rnd() Befehl machen. Allerdings weiss ich nicht wie die Led´s jetzt unabhängig voneinander Blinken lasse.
    Ich hoffe ihr versteht mein Problem. Ich brauche nur eine Herangehensweise, das Programm schreibe ich dann natürlich selbst.

    Danke
    Gruß Daniel
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    39
    Beiträge
    647
    Hi,

    ich habe selbst noch keine Lösung gefunden.

    Ist mein Problem zu schwer? Oder hab ichs unverständlich dargestellt?

    Danke
    Gruß Daniel
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    verständlich JA, aber ohne wissen über die existierende Lösung kann man da jetzt keine sachdienlichen Hinweis geben, die Lösungsmöglichkeiten divergieren zu stark.

    Je nachdem wie du das Blinken realisierst, kannst du im Compare-Interrupt ja den nächsten Compare-Wert mit deiner Rnd() um ein paar Takte vergrößern oder verkleinern .... bring mal ein wenig Code mit was du bisher shco hast, dann sehen wir weiter ^^
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    39
    Beiträge
    647
    Also eine existierende Lösung habe ich noch nicht so recht. Den Atmega48 wollte ich nehmen, weil es der kleinste µC ist den ich hier rumliegen habe. Ich denke schnell genug ist er. Die Leds hab ich im Moment an PB1-PB4, das kann aber gerne geändert werden.

    Mein Code sagt nicht viel weil ich ja noch keinen Ansatz habe. Aber trotzdem zeig ich was ich bis jetzt habe:
    $regfile = "m48def.dat"
    $crystal = 1000000
    $baud = 9600
    Config Timer0 = Timer, Prescale = 8

    Config Pinb.1 = Output
    Config Pinb.2 = Output
    Config Pinb.3 = Output
    Config Pinb.4 = Output

    Dim I As Integer

    Const Timervorgabe = 131
    On Timer0 Timer_irq
    Enable Timer0
    Enable Interrupts

    Do

    Loop
    End

    Timer_irq:
    Timer0 = Timervorgabe

    Return
    Ich dachte mir ich lass den Timer einfach 1000 mal pro Sekunde auslösen, so das er dann für die vier Kanäle jeweils den Status berechnet. Also ob die Led an oder aus sein soll. Aber so recht weiss ich nicht wie ich das realisieren soll.

    Das ist meine Überlegung dazu es kann aber alles noch geändert werden, da bin ich flexibel.

    Wenn du sonst noch infos brauchst, sag mir was fehlt ich versuche es zu liefern.

    Danke
    Gruß Daniel
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    die überlegung ist schonmal sehr gut! du legst einfach 4 counter fest und jedesmal wenn einer deiner counter abgelaufen ist, setzt du ihn mit einem neuen wert + (rnd() * zu variierendem Wert) ... aber unter der vorraussetzung, dass rnd() einen wert zwischen 0 udn 1 liefert, das weis ich leider grad nicht ^^

    beachte unbedingt, wenn du mit float arbeitest auch immer schön zu casten und die ergebnisvariablen richtig festzulegen, damit du keine kommastellen verlierst!

    achja das wichtigeste vergessen, in den counterüberläufen dekrementierst du deine counter bis sie 0 erreichen, vll. noch 4 variablen die signalisieren ob du für die jeweilige LLED gerade in die on oder off phase gehst! und fasse dich bei deinen bedingungen so kurz wie möglich, der interrupt darf nciht so lange dauern!
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Als Bascom-Laie würde ich es so versuchen:
    Code:
    $regfile = "m48def.dat"
    $crystal = 1000000
    $baud = 9600
    Config Timer0 = Timer, Prescale = 8
    
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    Config Pinb.3 = Output
    Config Pinb.4 = Output
    
    Dim I As Integer
    Dim Led1 As Byte
    Dim Led2 As Byte
    
    Const Timervorgabe = 131
    On Timer0 Timer_irq
    Enable Timer0
    Enable Interrupts
    
    Led1 = 51
    Led2 = 86
    
    Do
    
    Loop
    End
    
    Timer_irq:
    Timer0 = Timervorgabe
    
    If Led1 > 0 Then
       Decr Led1
    Else
       Toggle Pinb.1
       If Pinb.1 = 1 Then
          Led1 = 10                                             ' Anzeit
       Else
          Led1 = Rnd(10) + 51                                   ' Auszeit
       End If
    End If
    
    If Led2 > 0 Then
       Decr Led2
    Else
       Toggle Pinb.2
       If Pinb.2 = 1 Then
          Led2 = 10
       Else
          Led2 = Rnd(10) + 86
       End If
    End If
    
    Return
    (Ungetestet)

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. Led blinken lassen mit Timer0
    Von sky2 im Forum PIC Controller
    Antworten: 2
    Letzter Beitrag: 25.12.2009, 18:33
  2. LED blinken lassen während Programm normal weiterläuft
    Von Steffen08 im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 30.03.2009, 21:10
  3. LED im 1 oder 2 sek. Takt per Interrupt blinken lassen
    Von rogerberglen im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 17.04.2007, 19:51
  4. Led's unabhängig voneinander blinken lassen
    Von Thorsten75 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 20.03.2007, 12:41
  5. LED´s per Zufall leuchten lassen
    Von Hoomer im Forum Elektronik
    Antworten: 11
    Letzter Beitrag: 05.02.2006, 14:45

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad