Forum: Mikrocontroller und Digitale Elektronik PWM auf Atmega8


von pascal M. (balance)


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!

von icke (Gast)


Lesenswert?

Wie wäre es mit einem Schaltplan und ein bisschen Quellcode?

von pascal M. (balance)


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.

von get pampered (Gast)


Lesenswert?

pascal M. schrieb:
> Danke, froh wäre ich auch um die entsprechenden Seiten im Datasheet,
> damit ich mir das auch selbst durchlesen kann.

VHS bietet Kurse an:

Suchmaschinen erfolgreich bedienen
Suchen und Finden im Internet
...

von J.-u. G. (juwe)


Lesenswert?

pascal M. schrieb:
> Schaltplan:
> http://www.mikrocontroller.net/wikifiles/f/f6/Mega...

Das ist Dein Schaltplan? Wo ist denn da die an PD5 angeschlossene LED?

von pascal M. (balance)


Lesenswert?

Das LED ist wie folgt angeschlossen (einfach an PD) 
http://www.mikrocontroller.net/wikifiles/b/bb/Led.gif

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

Googlen sowie lesen kann ich auch, aber wurde ich nicht fündig. Ich hab 
mehrer Stunden probier das Problem zu lösen.

von J.-u. G. (juwe)


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.

von pascal M. (balance)


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?

von Samuel C. (dragonsam)


Lesenswert?

Der Timer nutzt den Systemtakt mit einem Vorteiler. Bei deinem Beispiel 
hat der Timer scheinbar den Vorteiler 256. Dann ergibt sich

f = (Systemtakt / Vorteiler) / Zählweite
f = (8.000.000 / 256) / 256
f = 122,07 Hz

von J.-u. G. (juwe)


Lesenswert?

pascal M. schrieb:
> Der Timer benutzt ja, laut Datasheet eine 32kHZ Frequenz.

Nein. Der Prescaler ist doch auf 256 gesetzt. Bei einer Taktfrequenz von 
8MHz bedeutet das: 8MHz/256 = 31.25kHz. Nicht 32kHz.

von pascal M. (balance)


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?

von J.-u. G. (juwe)


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).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.