Forum: Mikrocontroller und Digitale Elektronik LED-Fading geht nicht


von depp_007 (Gast)


Lesenswert?

Hi,
ich habe das Beispiel hier einmal verwendet 
http://www.mikrocontroller.net/articles/LED-Fading
Aber leider tut sich garnichts wenn ich eine LED zwischen PD5 und LO 
anschließe. Weder mit noch ohne 1KOhm Widerstand.
Habe das Beispiel kopiert bei mir (AVR Studio) eingefügt und meine 
Frequenz 3686400Hz eingestellt. Auch in den Einstellungen hab ich 
ATmega8, 3686400Hz und -0s eingestellt.
Was mach ich denn falsch?

von Floh (Gast)


Lesenswert?

depp_007 schrieb:
> Was mach ich denn falsch?

Keinen Schaltplan, keinen Code.
:-)

von depp_007 (Gast)


Lesenswert?

Aber einen Link zum Code... und Schaltplan.... ist ein fertiges 
Testboard und somit Lötfehler ausgeschlossen wenn du das meinst. Andere 
Sachen funktionieren auch damit.

von depp_007 (Gast)


Lesenswert?

Ah ok beim ATmega8 ist der OC1A nicht auf PD5 sondern PB1.
Umgestellt -> geht
Aber jetz seh ich das flackert ja wie bescheuert beim dimmen. Gibts da 
nich was besseres, oder geht das nicht besser mit PWM?

von Floh (Gast)


Lesenswert?

depp_007 schrieb:
> Ah ok beim ATmega8 ist der OC1A nicht auf PD5 sondern PB1.
> Umgestellt -> geht

deswegen Schaltplan. Meist wird einem erst bewusst, was man falsch 
gemacht hat, wenn man einen Scahltplan davon machen muss.

> Aber jetz seh ich das flackert ja wie bescheuert beim dimmen. Gibts da
> nich was besseres, oder geht das nicht besser mit PWM?

deswegen Code herzeigen.
Mein Tip ins Blaue: Controllertaktfrequenz und Takteinstellungen im 
Programm passen nicht.
:-)

von depp_007 (Gast)


Lesenswert?

Achso ja mit dem Takt hatte ich bei dem Teil schon immer Probleme...
Der Code ist nach wie vor aus dem Link kopiert. Nur PD5 auf PB1 
geändert.
Es ist ein Oszilator mit 3,6864MHz auf dem Board eingebaut und ich habe 
im Programm 3686400Hz eingestellt. Warum macht der dann falsche 
Frequenzen?

Auch mit folgendem erhalte ich keine 300Hz.
1
#define F_CPU 3686400
2
void wait_us(int mikroSec)
3
{
4
  _delay_loop_2(1*(F_CPU/(1000000/4))*mikroSec);
5
}
6
while(1){
7
    PORTC =0b00000001;
8
    wait_us(1667);
9
    PORTC=0b00000000;
10
    wait_us(1667);
Erst wenn ich wait auf 1520 setze erhalte ich genaue 300Hz.

von Falk B. (falk)


Lesenswert?

@  depp_007 (Gast)

>Aber jetz seh ich das flackert ja wie bescheuert beim dimmen. Gibts da
>nich was besseres, oder geht das nicht besser mit PWM?

Wahrscheinlich ist im AVR die CLK8 Fuse gesetzt, dann läuft der mit 1 
MHz statt 8, und deine LED flimmert mit ~15Hz statt 120Hz. Siehe [[AVR 
Fuses]].

MFG
Falk

von xGast (Gast)


Lesenswert?

Wie Falk Brunner geschrieben hast du vermutlich per Fuses noch den 
internen Takt statt den Externen aktiviert.

von depp_007 (Gast)


Lesenswert?

Hmm der Fuse bit steht auf "Int RCosc Frequency 2MHz"
Aber ich hab ja ein 3,6864MHz oszilat und das ist ja extern...Muss ich 
da auf Ext XTAL gehen?

von Karl H. (kbuchegg)


Lesenswert?

depp_007 schrieb:
> Hmm der Fuse bit steht auf "Int RCosc Frequency 2MHz"
> Aber ich hab ja ein 3,6864MHz oszilat und das ist ja extern...Muss ich
> da auf Ext XTAL gehen?

Wirst du wohl tun müssen.

von Vlad T. (vlad_tepesch)


Lesenswert?

depp_007 schrieb:
> Muss ich
> da auf Ext XTAL gehen?

Hast du einen Quarz, oder einen Oszilator dran?
bei ersterem ist er tot, wenn du das einstellst.

Nicht nur das umstellen, sondern auf jeden Fall auch die DIV8 Fuse 
überprüfen, die sollte nicht programmiert (=1) sein

von Karl H. (kbuchegg)


Lesenswert?

Im Mega8 gibt es keine CKDIV8

von Falk B. (falk)


Lesenswert?

Der Code im Artikel braucht einen Takt mit ~8MHz, denn sonst geht die 16 
Bit PWM nicht. Auch die anderen PWMs sinf fest auf 8 MHz konfiguriert 
und werden NICHT autoatisch an eine andere Frequenz per F_CPU 
eingestellt.

Leute, vor allem als Anfänger sollte man ein Beispiel erst einmal 100% 
so nachbauen wie vorgegeben. Wenn das dann läuft und man verstanden hat 
wie es läuft, DANN kann man anfangen eigene Änderungen vorzunehmen.

MFG
Falk

von depp_007 (Gast)


Lesenswert?

Es ist ein Quarz. Geht aber noch und mit der Ext XTAL einstellung 
funktioniert auch das Dimmen.
Hatte eben nur ein experimentierboard hier und das hat kein 8MHz 
quarz...
Wenn ich das fest verbaue schau ich auch das ich ein 8MHz Quarz 
auftreibe, aber zum testen hab ich leider nur dieses Board da.

Wie müsste ich denn hier vorgehen wenn ich 2 Dimmbare Kanäle haben 
wollte?

von Falk B. (falk)


Lesenswert?

@  depp_007 (Gast)

>Hatte eben nur ein experimentierboard hier und das hat kein 8MHz
>quarz...

Es wäre ja auch VOLLKOMMEN ABSURD, den ATmega 8 einfach mit internem 8 
MHz RC-Oszillator zu betrieben, so wie im Artikel geschrieben steht 
(nicht nur der ATmega32 hat den)

>Wie müsste ich denn hier vorgehen wenn ich 2 Dimmbare Kanäle haben
>wollte?

Ja wie wohl? Den zweiten PWM-Kanal vom Timer 1 nutzen?

Mann Oh Mann!

von xGast (Gast)


Lesenswert?

Beschäftige dich bitte zunächst mit dem µC:
http://www.mikrocontroller.net/articles/AVR-Tutorial
...
Du wirst sonst nicht weit kommen.

von Rolf Magnus (Gast)


Lesenswert?

depp_007 schrieb:
> Es ist ein Oszilator mit 3,6864MHz auf dem Board eingebaut und ich habe
> im Programm 3686400Hz eingestellt. Warum macht der dann falsche
> Frequenzen?

Weil F_CPU dem Prozessor nicht auf magische Weise sagt, daß du einen 
externen Oszillator benutzen möchtest. Du teilst damit lediglich dem 
Programm mit, mit welcher Taktfrequenz der Prozessor läuft (also nicht 
"laufen soll", sondern "bereits läuft"). Daß er auch tatsächlich diese 
Frequenz hat, dafür mußt du selbst sorgen.

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.