- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 28

Thema: Mit PCF8574P eine Led dimmen?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.255
    Und warum dann nicht gleich einen ATMEGA 8 als PWM Quelle verwenden ?
    Der kann dann die PWM Signale für die LED's erzeugen. Eventuell könnte man noch einen ULN2803 als Treiber nachschalten.
    Letztlich dürfte dasauch die preiswertese Lösung sein.
    Als Verbindung zwischen dem Steuercontroller und dem Dimm- Controller würde ich SPI verwenden, weil das einfacher zu handeln ist als TWI ( I²C ).
    Beide Schnittstellen sind als Hardware in den ATMEGA Controllern eingebaut.
    Das Protokoll kann man sich dann selber ausdenken. Also entweder alle 8 Dimmwerte nacheinander übertragen, oder ein Kanalbyte gefolgt von einem Wertbyte bei Bedarf senden.
    Eine weitere Möglichkeit wäre Dich am DMX 512 Protokoll ( serielle Schnittstelle ) zu orientieren.
    Dadurch wäre dann die Ansteuerung von 512 Kanälen möglich und die Dimm Controller wären auch als abgesetzte Einheit über größere Entfernungen ( mehrere Hunder Meter ) ansteuerbar.

    Es gibt da also eine Menge möglicher Lösungen.

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Zitat Zitat von wkrug Beitrag anzeigen
    Und warum dann nicht gleich einen ATMEGA 8 als PWM Quelle verwenden ?
    Einfach weil explizit nach dem 8574 gefragt wurde. Natürlich gibt es andere möglicher Weise bessere Methoden, keine Frage! Ich habe hier auch schon von LED Treiber für bis zu 256 LED's !einzeln dimmbar! gelesen. Fragt sich was die Teile kosten und wer das noch Löten kann...

    Grüße Richard

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251
    Natürlich gibt es andere möglicher Weise bessere Methoden, keine Frage!
    Was wäre den eine bessere Lösung?

    256 LED's !einzeln dimmbar!
    2-4 reichen


    mfG
    Philip

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251
    so... habe jetzt ein paar Ports der m32 frei gemacht ;-> Welche sind jetzt genau PWM-Ports (ohne software-pwm?) ? Wie kann man von da aus eine Led dimmen?

    mfG
    Philip
    Geändert von AsuroPhilip (16.07.2011 um 19:40 Uhr)

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.255
    Beim ATMEGA 8 Dil Variante sind das.
    OC1A = PIN 15
    OC1B = PIN 16
    OC2 = PIN 17

    Diese 3 Pins können als PWM arbeiten.
    OC1A und OC1B laufen mit dem Timer 1
    OC2 mit Timer 2

    Bei einem anderen Controller nach OC Pins suchen.

    Die Timer werden für den entsprechenden PWM Mode konfiguriert und die OCx Pins aktiviert und ein passender Prescaler gewählt.
    Je nach dem Wert den man ins Comparematch Register schreibt kommt dann eine entsprechende Pulsweite raus.
    Man kann gerade Timer 1 sehr vielseitig PWM- mässig programmieren. Vom 8Bit PWM bis 16Bit PWM ( 9 und 10Bit gehen auch soweit ich weiss ) ist da einiges möglich. Auch ein Ausgangssignal mit 50% Duty Cycle und änderbarer Frequenz.
    Fast PWM solltest Du nicht machen, weil da keine Werte mit 0 ( = kein Signal ) möglich ist.
    Initialisierungsstrings müsste ich jetzt zusammensuchen, da ich jetzt nicht ganz genau weiss was Du konkret brauchst hilft Dir das auch wenig.
    Alles läuft dann in Hardware und benötigt deshalb keine zusätzliche Rechenleistung mehr, ausser zum Schreiben der Comparematch Register.

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    27.07.2010
    Ort
    Aachen ---- NRW
    Beiträge
    251
    Danke schonmal, aber ich meinte die pins vom atmega32. Hast du ein Beispielcode?

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.255
    Ok die Pins 40 Pin Dil Variante:
    OC0 = PIN 4 Timer0
    OC1A = PIN 19 Timer1
    OC1B = PIN 18 Timer 1
    OC2 = PIN 21 Timer 2

    Der Code ist für nen ATMEGA 16 mit 8MHz Quarz und sollte auch auf nem 32 laufen.

    Code in "C" für CodeVision:

    Code:
    // Timer 1 overflow interrupt service routine
    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {
    OCR1AL=uc_redtable[uc_red];                                /* Werte für die PWM's übernehmen */
    OCR1BL=uc_greentable[uc_green];
    }
    
    // Timer 2 overflow interrupt service routine
    interrupt [TIM2_OVF] void timer2_ovf_isr(void)
    {
    OCR2=uc_bluetable[uc_blue];                                /* Werte für die PWM's übernehmen */
    }
    
    
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 1000,000 kHz
    // Mode: Phase Correct PWM top=00FFh
    // OC1A output: Non-Inv.
    // OC1B output: Non-Inv.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: On
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0xA1;
    TCCR1B=0x02;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: 1000,000 kHz
    // Mode: Phase Correct PWM top=FFh
    // OC2 output: Non-Inverted PWM
    ASSR=0x00;
    TCCR2=0x62;
    TCNT2=0x00;
    OCR2=0x00;
    
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x45;
    Du musst jetzt nur noch die OCR Register mit Werten füllen und das Ding macht PWM.
    Timer 1 ist, da die Bereiche mit Timer 2 zusammen passen mussten und DMX ohnehin nicht mehr als 256 Werte kennt, auf 8 Bit Modus eingestellt.
    Timer 0 hab ich in diesem Beispiel nicht für PWM Erzeugung verwendet.
    In den Overflow Interrupts bei Timer 1 und Timer 2 werden die aktuellen Helligkeitswerte in die OCR Register übernommen. Das vermeidet Glitches, Du kannst das aber auch ignorieren wenn Dich die Interrupts stören. Der Code ist Teil meiner DMX RGB Lampe mit High Power LED's.
    Timer 0 ist hier nicht für die PWM Generierung verwendet - Ich brauchte nur 3 PWM Quellen.

    Das Ganze ist nur ein Beispiel, man kann die PWM Quellen sehr vielseitig konfigurieren. Datenblatt lesen ist aber da Pflicht!

Ähnliche Themen

  1. RP6 M32 und noch ein PCF8574P?
    Von AsuroPhilip im Forum Robby RP6
    Antworten: 14
    Letzter Beitrag: 27.06.2011, 22:19
  2. LCD über Pcf8574P an Rn mega128funk
    Von Kalli01 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 16.08.2010, 18:16
  3. Nochmal I2C PCF8574P
    Von Cruser12 im Forum Asuro
    Antworten: 10
    Letzter Beitrag: 23.06.2010, 21:09
  4. Schalter an den PCF8574P anschließen
    Von Cruser12 im Forum Asuro
    Antworten: 7
    Letzter Beitrag: 11.05.2010, 21:17
  5. LCD an PCF8574P im I2C-Mode
    Von Vector3 im Forum Sensoren / Sensorik
    Antworten: 5
    Letzter Beitrag: 30.03.2009, 08:02

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress