www.mikrocontroller.net

Forum: Compiler & IDEs PWM mit ATMega8


Autor: Christian Heigele (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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... 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

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian Heigele (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dirk (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Dirk (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

anbei ein Sample Prg in AVR GCC. Es ist nicht das gelbe vom Ei, aber es
erfuellt seinen Zweck.

Ich hab das Prg nur compiliert. Es wurde nicht an der Zielhardware
getestet.

Takt: interner RC Oszillator @ 8Mhz
µC: Mega8

Mfg
Dirk

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian Heigele (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Simon Küppers (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probier mal den CD Eingang von Masse wegzunehmen ;)

grinst
Simon..

Autor: Christian Heigele (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

der Prescaler stimmt nicht. Setz mal den Prescaler auf 1.

Mfg
Dirk

Autor: Christian Heigele (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
TCCR0 = (1<<CS01); So isses im Moment.
Wie sollte es sein?
#grs

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

TCCR0 = (1<<CS00);

Mfg
Dirk

Autor: Christian Heigele (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oke, jetzt blinken sie alle ganzganz schenl
aber is immer noch nicht gedimt :(
#grs

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

mit wieviel Mhz laeuft dein AVR den?

Also mit TCCR0 = (1<<CS00) laeuft der Code einwandfrei. Mein AVR laeuft
mit internen 8Mhz.

Mfg
Dirk

Autor: Christian Heigele (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meiner läuft ohne externen Oszi.
Also auch 8 Mhz.
Hast du das in hardware nachgebaut?
#grs

Autor: Christian Heigele (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Den kompletten Source hab ich jetzt mal angehängt.
#grs

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie kommst du auf 8 MHz?  Auslieferungszustand ist 1 MHz.

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

tja mit 1Mhz und Prescaler von 8 wird das nix.

Stell mal auf 8Mhz um.

Mfg
Dirk

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

hab mein DEV Board rausgekramt und ein paar Leds angeschlossen (Led's
sind LOW Aktiv).

Der Code funktioniert.

Mfg
Dirk

Autor: Christian Heigele (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wie stell ich den mal kurz auf 8 Mhz um?
#grs

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

du bist verdammt faul. Schau mal endlich ins Datasheet! Suchbegriff
FuseBits.

Mfg
Dirk

Autor: Christian Heigele (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur dass ich nichts falsch mache.
Das Fuse-Bit muss heissen: 11100111
Ich bin nicht nur faul
#grs

Autor: Christian Heigele (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hä
Jetzt bin ich verwirrt.
Aber kleinen Moment.
Der Bit oben war für den SP12.
#grs

Autor: Christian Heigele (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oki
Ich muss (ich hab yaap) den CKOPT setzen oder?
#grs

Autor: Christian Heigele (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Seite 28 CKSEL3...0

Du machst den Thread echt lang. Nutze naechstes mal den Chat.

Mfg
Dirk

Autor: lucifer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist zwar schon etwas älter aber hat jemand zufällig noch diese dateien?

pwm_init.c
simple_delayroutinen.c

oder kann sie jemand anhängen?

Autor: lucifer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
niemand? :/

Autor: Jens500 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: lucifer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah das ist doch was
vielen dank

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.