-         

Ergebnis 1 bis 9 von 9

Thema: 15Kanäle schalten und dimmen

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329

    15Kanäle schalten und dimmen

    Anzeige

    Hallo NG,

    mit einem ATMega88 will ich 15 Ausgänge schalten und mit PWM dimmen.
    Im Idealfall sollen 3 Helligkeiten für die Ausgänge wählbar sein.

    3 Software-PWMs scheiden ja warscheinlich wegen der sich beeinflussenden Interrupts aus. Wie bekomme ich das Signal des Hardware-PWM auf mehrere Pins verteilt?

    Günter

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.06.2008
    Ort
    Rösrath
    Alter
    33
    Beiträge
    332
    Welche Interrupts sollten sich da beeinflussen?

    Das kann man alles mit einem Interrupt erschlagen. Mit einem Quarz sollte bei 3 PWMs auch die Abtastrate in einem brauchbaren Rahmen bleiben, zumindest war es bei mir mit C so - wie das bei Bascom aussieht weiß ich nicht, müsste aber auch klappen.

    Du musst dann in der Interrupt-Routine eben alle Ports je nach Konfiguration an- und abschalten. Das Beispiel für Software-PWM im Wiki sollte dir weiterhelfen, den Rest kann man sich dazzureimen.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329

    PWM

    Hallo Pyo0skull,

    damit ich 3 verschiedene Helligkeiten kriege, brauche ich doch 3 PWMs.
    Lasse ich bei jedem einen Interrupt auslösen, um die Ausgänge umzuschalten, kann es passieren, daß 2 Interrupts gleichzeitig anstehen und einer warten muß. Dieses ist durch ein zappeln am Ausgang meßbar.
    Geht das mit einem Interrupt auch?

    Günter

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.06.2008
    Ort
    Rösrath
    Alter
    33
    Beiträge
    332
    Du benutzt einfach einen der Hardware-Timer und in deren Interrupt-Routine baust du dir dann ein Software-PWM.

    http://www.roboternetz.de/wissen/ind...M_per_Software

    Da ist der grundlegende Ablauf drin, das muss dann eben für 3 verschiedene PWM-Ausgänge gemacht werden. Die Aufteilung auf einzelne Kanäle musst du dann im Hauptprogramm ausprogrammieren, so das möglichst wenig Logik in der ISR ist.

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329

    PWM

    Hallo pyr0skull,

    wenn mans mal begriffen hat eigentlich ganz einfach

    $regfile = "m8def.dat"
    $crystal = 1000000

    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Portb.3 = Output

    Osccal = 255

    Dim Hell0 As Byte
    Dim Hell1 As Byte
    Dim Hell2 As Byte
    'bis hell123456

    Dim Tick As Byte
    Dim Range As Byte
    Range = 100

    On Timer0 Ontimer0
    Tccr0 = &B00000001
    Timsk.toie0 = 1
    Enable Interrupts

    Hell0 = 100
    Hell1 = 10
    Hell2 = 1

    Do

    Loop

    End

    Ontimer0:
    Tick = Tick + 1
    Timer0 = 254
    If Tick >= Range Then
    Tick = 0
    End If
    If Tick < Hell0 Then
    Portb.1 = 1
    Else
    Portb.1 = 0
    End If
    If Tick < Hell1 Then
    Portb.2 = 1
    Else
    Portb.2 = 0
    End If
    If Tick < Hell2 Then
    Portb.3 = 1
    Else
    Portb.3 = 0
    END IF
    Return

    Danke für deine Hilfe!

    Günter

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    03.12.2008
    Beiträge
    5
    Hallo Günter,
    kannst Du mir einmal auf die Sprünge helfen,
    die eine LED laufend hell und dunkel steuert. (PWM)
    (atmega
    Uwe, dk1kq@darc.de

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Timer0 wird mit 254 gestartet und löst bei 255 einen Interrupt aus.
    Im Interrupt wird der Ausgang unterhalb des Helligkeitswerts auf High ansonsten auf Low gesetzt.

    Fertig ist die PWM

    Günter

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    03.12.2008
    Beiträge
    5

    PWM

    Hallo Günter,

    nun ja, das habe ich auch schon gelesen - aber nicht verstanden
    Das Programm das Du Pyr0skull geschickt hast -
    hm
    wenn man sich das Signal mit OSzi ansieht, dann liegen dort Impulse an, die jedoch -- NICHT -- ihr Breite verändern, wie das gewünscht ist.

    Es ist mir klar dass der Timer hoch und runterzählt - doch wo ist die Verbindung zum Port ?

    m.E müsste sich die Pulsbreite stetig ändern.

    Jede Erklärung ( oder Literaturhinweis ) willkommen.

    gruß Uwe

  9. #9
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.05.2007
    Beiträge
    329
    Hallo Uwe,

    Es ist mir klar dass der Timer hoch und runterzählt - doch wo ist die Verbindung zum Port ?
    z.B. hier: Portb.1 = 1

    m.E müsste sich die Pulsbreite stetig ändern.
    nö nur wenn die Helligkeit geändert wird

    z.B. hier:

    Hell0 = 100
    Hell1 = 10
    Hell2 = 1

    gruß Günter

Berechtigungen

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