PWM mit ATMega8

Gast #178933
Lesenswert?

Ahoi!
Ich möchte gerne ein paar Dioden dimmen, und muss dazu PWM
"sprechen"
Ich hab mir mal das Beispiel von mc-project.de angeschaut

/***********************************************************
   Beispiel zur Initialisierung und Verwendung
   der PWM des Atmega8
   --> Dimmen von LEDs an den Ports OC1A und OC1B
***********************************************************/

#include <avr/io.h>
#include <pwm_init.c>
#include <simple_delayroutinen.c>

int main(void) {

    unsigned char i = 0;
   pwm_init ();

    for (;;) {

      for (i=0; i<254; i++) {
         OCR1A = i;
         OCR1B = i;
         delay_us (10000);
      }
   }
}


Und das geht auch ganz gut (Man braucht dazu natürlich noch
http://www.mc-project.de/Pages/AVR/Software/simple_delayroutinen.c und
http://www.mc-project.de/Pages/AVR/Software/pwm_init.c)
Aber 1. brauche ich 3 PWM Ports (und das hat der ATMega8 ja) und 2.
möchte ich eigentlich mehrere (jeweils 3-4 Dioden) mit einem PWM-Port
ansprechen.
Dabei dachte ich an ein Transistoren-Array, aber damit das
funktioniert, benötige ich ja ein Software PWM und das obige ist doch
Hardware oder?
Wäre nett wenn mir jmd. helfen könnte. (weil ich heute Geburtstag habe
Smile)
#grs
Gast #178934
Lesenswert?

Hi,

dann erstmal Happy Birthday.

Der Mega8 hat 3 Hardware PWM's also koenntest du deine led's daran
anschliessen.

Da du mehrere Led's dimmen moechtest musst du einen Treiber
(Transistor oder lieber Mosfet) nehmen. Du koenntest die
Betriebsspannung fuer die LED's erhoehen z.B. auf 24V dann kannst du
ca 7 Stueck in Reihe legen.

Falls es mit Software PWM gemacht werden soll hier die Timer ISR 8 Bit
ein kleines Prg.

// Timer2 ISR (34,72µs)  OVERFLOW BETRIEB

SIGNAL(SIG_OVERFLOW2)
{

    if(z++ == 0)
    {
    cbi(PORTD,2);
    cbi(PORTD,3);
    }


    if(Ri++ == R)
    {
      sbi(PORTD,2);
    }
    if(Gi++ == G)
    {
      sbi(PORTD,3);
    }


}




Mfg
Dirk
Gast #178935
Lesenswert?

Aber mit einem Transistor kann ich den Hardware-PWM nicht nehmen oder?
Und dein Softwarebsp. verstehe ich nicht ganz.
Könntest du das, sofern die Umstände, die durch meine bescheidene Bitte
hervorgerufen wurden, nicht allzu groß sind, näher erläutern, oder sogar
in einen Bsp-Code einbinden?
Freundliche Grüße zurück Christian
Gast #178936
Lesenswert?

Hi,

anbei mal die Hardware. Der Transistor/Mosfet ist nur ein Beispiel und
muss auch den Strom schalten koennen.

Natuerlich kannst du die Hardware PWM Ausgaenge an einem Transistor
oder Mosfet.

Ich finde die PWM Ausgaenge liegen ein bischen doof (direkt auf den
SPI).

Ich bastle nochmal ein kleines Prg zusammen fuer ein Software 8 Bit PWM
für 3 Ausgaenge.

Mfg
Dirk
Angehängte Dateien:
Gast #178938
Lesenswert?

Eine Idee einer Software-PWM hatte ich übrigens vor einiger Zeit mal
hier gepostet.  Sollte sich über die Forum-Suche finden lassen.  Ist
nicht extrem genau, aber für das Dimmen von paar LEDs müsste es tun.
Gast #178939
Lesenswert?

Also:
Ich habs immernoch nicht gepeilt, habe aber ein noch größeres Problem:
Ich will mehrere Dioden auf einmal ansprechen.
Um  das zu machen, brauche ich eine größere Spannung als mein ATMega
liefern kann, also brauche ich ja einen Transistor(-Array).
Aber irgendwie bringe ich die jetztmal nicht mehr zum leuchten.
Ich hab das Folgendermaßen angeschlossen:

Vcc-R1-LED-LED-ULN(das ist mein Transistor Array vom Typ
ULN2002A)-ATMega(auf PB0 bis...)

Irgendwie schaff ich es nicht ein Leuchte hervorzurufen.
Wenn ich aber manuell eine erdung an einen ULN-Ausgangsport anlege,
dann leuchten die Dioden auf.
#grs
Gast #178941
Lesenswert?

Also.
Ist zwar etwas später, aber ich habe jetzt Dirks Code ausprobiert, und
jetzt blinken die Dioden, zwar unterschiedlich schnell aber gleich
hell.
Stimmt da irgendwas mit en zahlen nicht?
#grs
Gast #178957
Lesenswert?

Oder meintest du das:

The ATmega8 stores four different calibration values for the internal
RC Oscillator.
These bytes resides in the signature row High byte of the addresses
0x0000, 0x0001,
0x0002, and 0x0003 for 1, 2, 4, and 8 Mhz respectively.

Und wo sollte ich das eingeben?
Noch verwirrter als vorher.
#grs

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren