PWM auf Atmega8

OP #3117159
Lesenswert?

Hallo,

Ich bin neu in Sachen Elektronik und deren Programmierung. Ich hab 
jedoch Erfahrung mit anderen Sprachen, weshalb ich den Code gut lesen 
kann. Vorausgesetzt, ich kenne die AR Befehle etc.

Ich würde gerne für ein Schulprojekt eine LED dimmen. Dazu habe ich 
einige Fragen, als allererstes jedoch, wieso ich das Tutorial nicht 
realisiert kriege.

Ich habe hier einen Atmega8 mit 8MHZ nach dem Aufbau wie im AVR Tutorial 
und füttere diesen mit dem C-Code aus dem LED-Fading Artikel.

Leider leuchtet meine LED nur konstant hell und es passiert nichts. Das 
Oszilloskopt sagte auch nicht viel, flach wie ne Flunder. :P

An was könnte es liegen? Falsche Fuses? Falsche Configs im Code? Hab ihn 
nicht angepasst, da nichts konkret diesbezüglich stand. Im Prinzip kann 
ja nur die TCC* Einstellung falsch sein, nicht? Weiter wüsste ich gerne, 
wie sie genau auf die 122 Mhz kommen.

Ich probiere es schon lange und hab nen ziemlichen Stress, wäre froh 
über Hilfe. Werde mich sobald ich Zeit habe auch revanchieren, da ich 
denke, ein gutes LED Tutorial schreiben zu können. Im späterne Verlauf 
möchte ich meine eigenen PWM Werte per Stevssche Potzenfunktion 
berechnen, dazu werde auch noch Fragen kommen g. Da ich im Projekt das 
alles gut beschreiben muss, kann ichs sowieso etwas verändert 
veröffentlichen.

Vielen Dank!
OP #3117185
Lesenswert?

Klar, dachte die Artikel sind hier allen bekannt.

Code: http://www.mikrocontroller.net/articles/LED-Fading
Schaltplan: 
http://www.mikrocontroller.net/wikifiles/f/f6/Mega8_Tutorial.png

Wir haben jedoch keinen Quarzoszillator sondern einen Quarz, so 
angebracht: 
http://www.mikrocontroller.net/wikifiles/e/eb/Tutorial-quarz-schaltplan.png

Danke, froh wäre ich auch um die entsprechenden Seiten im Datasheet, 
damit ich mir das auch selbst durchlesen kann. Irgendwie finde ich nicht 
das gewollte.
#3117231
Lesenswert?

pascal M. schrieb:
> Das LED ist wie folgt angeschlossen (einfach an PD)

Einen I/O-Pin "PD" gibt es nicht, die heißen z.B. PD0, PD1,...

> Wie gesagt hab ich nichts selbst designed sondern alles von hier
> übernommen, aus dem Tutorial und dem LED-Fading Artikel.

Was meinst Du mit "hier"? Niemand kennt alle Schaltungen aus der 
Artikelsammlung oder dem Forum. Am besten können wir Dir helfen, wenn 
wir den kompletten und exakten Plan Deiner Schaltung (die oben von Dir 
verlinkte ist es schonmal nicht) und den Code, exakt so, wie Du ihn 
kompiliert hast.

Da Du einen externen Quarz verwendest, und deshalb die passenden Fuses 
gesetzt werden müssen, wäre auch eine Angabe hierüber sinnvoll.
OP #3117258
Lesenswert?

Hallo,

Ja, dann erstmal entschuldigung. Ich achte normalerweise darauf, alle 
nötigen Infos zu packen. Ich ging irgendwie davon aus, dass die 
Tutorials die meisten kennen.

Ich hab das Problem jedenfalls schonmal teilweise gelöst, und zwar ist 
der Code ja für Atmega32 gemacht, dort ist OC1A PD5. Bei Atmega8 ist es 
aber ja PB1. Das erklärt, warum es zwar leuchtet nicht aber dimmte.

Ich werde das nun noch mehr überprüfen. Stundenlanges Gesuche und dann 
ein so doofer Fehler. Ich werde alle nötigen Infos noch posten, falls 
noch ein Problem auftaucht, welches mich in die Knie zwingt.

Andere Frage: Wie kommen die auf 122 hz? (Siehe comments im Code welchen 
ich oben postete. Der Code ist 1:1, bis auf DDRB |= 1 << PB1; ganz 
unten)

Der Timer benutzt ja, laut Datasheet eine 32kHZ Frequenz. Ich hab ja 
alle 8bit bzw 256 nen Interrupt, was mit doch einen 32kHz/256=125hz Takt 
gibt, nicht? Wo sind die anderen 3 hin?
OP #3117320
Lesenswert?

Tatsächlich, hab ich falsch gelesen.

Wenn ich meine Eigene Schaltung + Code bastle, muss ich dann bei der PWM 
nicht die maximale Leistung pro Pulse berechnen? Wenn mein LED z.B. 350 
Ampere braucht und 2V, dann benutz ich ja z.B. nen Mosfet welchen ich 
per PWM ansteuere, oder? Muss dann aber nicht darauf achten, dass ein 
voller Puls nicht dessen Leistung überspringt?
#3117607
Lesenswert?

Du musst darauf achten, dass bei durchgeschaltetem Transistor, der Strom 
durch die LED nicht den zulässigen Wert überschreitet. Das macht man mit 
einem Vorwiderstand.
http://www.mikrocontroller.net/articles/LED#Durchlassstrom

Das führt dann automatisch dazu, dass die LED bei voll ausgeseteuerter 
PWM durchgängig mit voller Leistung leuchtet (und bei geringeren 
PWM-Tastverhältnissen dann erscheint dunkler erscheint, da sie pro 
PWM-Periode nur für kurze Zeit mit voller Helligkeit leuchtet und den 
Rest der Zeit ausgeschaltet ist).

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