wie 2 Timer gleichzeitig auf ATMega8

Gast #2239261
Lesenswert?

Hallo zusammen,

hab da ein kleines Problem. Ich brauche für eine Krippenbeleuchtung eine 
PWM Dimmung für die LEDs und eine Uhr, damit ich verschiedene 
Beleuchtungsmodi zeitabhängig einstellen kann.

An meinem Testaufbau hab ich 2 LEDs (Port C) für den PWM Test und 
weitere 6 LEDs (Port D), die ich benutze um die Uhr zu testen. Ausgabe 
der Sekunden binär an den 6 LEDs, aber fürs optische Debugging reichts 
allemal ;-)

PWM über Timer 0 alleine funtioniert einwandfrei.
Sekundenzählen über Timer 1 alleine funktioniert auch.

Wenn ich nun beide Timer zusammen aktiviere funktioniert PWM noch, aber 
die Sekundenanzeige wird zu einer Lichtorgel.

Kommt mir so vor als wenn der Interrupt für Timer 1 auch schon nach 256 
Takten kommt anstelle der gewünschten 15625 Takten (Mega8 @ 1Mhz).

Kann mir da jemand weiterhelfen? Code im Anhang.

Danke schon mal
Angehängte Dateien:
#2239747
Lesenswert?

Ich denke nicht, dass die Antwort hier zutreffend war.
Die Timer sind voneinander unabhängig und Timer 1 ist ja auf CTC 
konfiguriert. Und soweit ich das analysiert habe, stimmt das auch alles.

Allerdings sehe ich auch nicht, wo jetzt das Problem in deinem Programm 
liegt. Eventuell ein Hardware-Problem? Abblockkondensatoren hast du am 
µC?
#2239901
Lesenswert?

Karl Heinz Buchegger schrieb:
> Ich denke nicht, dass die Antwort hier zutreffend war.
> Die Timer sind voneinander unabhängig und Timer 1 ist ja auf CTC
> konfiguriert. Und soweit ich das analysiert habe, stimmt das auch alles.

sorry, das stimmt, ich hab zu schnell gelesen und dachte beides macht 
ein Timer.

Stefan Ernst schrieb:
> Der Stack-Pointer gehört nicht dazu, ergo ist
> dort die Reihenfolge egal.

Man sollte es sich trotzdem angewöhnen, erst das Highbyte zu 
beschreiben.
Gast #2248440
Lesenswert?

So ... hab die Kondensatoren eingelötet => kein Unterschied

Hab meine gelötete Schaltung auf dem Steckbrett nachgebaut => kein 
Unterschied

Hab den uC getausch => kein Unterschied

High und Lowbyte hab ich auch mal spaßeshalber getauscht ... nix.

Externer Oszillator hab ich für Spaß auch mal rangehangen (und Werte 
geändert) ... leider auch nix.

Allerdings konnte ich etwas leider nicht reproduzierbares beobachten. 
Manchmal werden die LEDs ganz dunkel - und dann stimmt auch das Timing.

Von der Beschaltung und Stromversorgung her hab ich mich an den Aufbau 
aus dem Tutorial gehalten (jetzt sogar mit Kondensatoren, wer lesen kann 
ist im Vorteil ;-))

Noch jemand ne Idee?

Danke und Gruß
#2248945
Lesenswert?

@Hannes Lux

Das wurmt mich, dass ich im TO-Programm den Fehler nicht finde.
Kannst du dir das mal ansehen. Meiner Meinung nach, ist es in Ordnung.

> Allerdings konnte ich etwas leider nicht reproduzierbares beobachten.
> Manchmal werden die LEDs ganz dunkel - und dann stimmt auch das Timing.

Hä?
Sieht für mich immer mehr nach einem Hardware-Problem aus.
#2249068
Lesenswert?

Karl Heinz Buchegger schrieb:
> @Hannes Lux
>
> Das wurmt mich, dass ich im TO-Programm den Fehler nicht finde.
> Kannst du dir das mal ansehen.

Beim ersten Reinschaun (als der Thread neu war) habe ich es schnell 
wieder geschlossen, da ich diesen Stil nicht besonders mag.

> Meiner Meinung nach, ist es in Ordnung.

Ich hab's mir jetzt (wegen Dir) nochmal genauer angesehen. Ich hätte 
zwar Vieles anders gemacht *), aber einen offensichtlichen Fehler kann 
ich auch nicht sehen.

>
>> Allerdings konnte ich etwas leider nicht reproduzierbares beobachten.
>> Manchmal werden die LEDs ganz dunkel - und dann stimmt auch das Timing.
>
> Hä?
> Sieht für mich immer mehr nach einem Hardware-Problem aus.

Das sehe ich auch so. Aber wegen dieses einfachen Programms werde ich 
keine Hardware aufbauen.

Ich weiß nun nicht, womit die Hexdatei geflasht wird. Mein uralter (und 
längst verschrotteter) Eigenbau-Brenner mit Eigenbau-(Pfusch-)Software 
in QBASIC von M$-Doof hätte da Mist gebrannt, weil die Hexdatei aufgrund 
der Lücken in der Interrupt-Sprungtabelle fragmentiert ist.

*) Anders gemacht hätte ich z.B.:

- "Tabs durch Spaces ersetzen" eingestellt, damit die
  Flatterformatierung unterbleibt, wenn man den Quältext außerhalb
  des AVR-Studios betrachtet.
- Die komplette Interrupt-Sprungtabelle kopiert (wegen
  Übersichtlichkeit).
- 16-Bit-Zahlen mit Low() und High() in Bytes zerlegt und dezimal
  angegeben.
- Oder statt Plus beim Zusammensetzen der Bits benutzt.
- Auf SREG-Sicherung verzichtet, solange die Mainloop leer ist, bzw.
  dafür ein Exklusiv-Register verwendet.
- Exklusivregister für ISR eingerichtet, um unnötige Push/Pop zu
  sparen, der AVR hat immerhin 32 Register.
- Vergleichswerte für die Zeit-Zählung dezimal angeben, damit man sie
  als Mensch ohne Umrechnen lesen kann.
- Etwas umfangreicher kommentiert.

All das sind keine Fehler im klassischen Sinne, erhöhen aber die 
Lesbarkeit von Quältexten. Ich fühle mich dabei einfach wohler.

...
#2249275
Lesenswert?

Winfried J. schrieb:
> Es ginge natürlich auch mit nur einem Timer und in einer ISR
>
> Der System Timer mus auf der Zeitbasis auf des Grösten gemeinasmen
> Teilers laufen und static integer softwarezähler für jeden kanal
> inklusive Uhr inkrementieren, vergleichen, zurücksetzen und die Portbits
> setzen.

Richtig...
Ist hier z.B. so realisiert:
Beitrag "Re: Kann man während einer PWM noch nebenbei was auf dem Display anzeigen!?"

>
> Namaste

...
#2249528
Lesenswert?

Also:

Es hat mir keine Ruhe gelassen.
Mega8 hab ich keinen mehr da. Aber ich habe das Programm, so wie es ist, 
in einen Mega16 gebrannt (include natürlich angepasst). Hat auf Anhieb 
funktioniert.

Ich denke, es ist irgendeine Hardware Sache.
Mach doch mal ein Photo von deinem Aufbau / Schaltplan

Was nimmst du als Spannungsversorgung?
Gast #2252114
Lesenswert?

Karl Heinz Buchegger schrieb:
> Was nimmst du als Spannungsversorgung?

Hab ein Steckernetzteil auf 9V eingestellt. Reduziert auf 5V wird dann 
mit der Schaltung hier aus dem Tutorial über den 7805.

Dennis Heynlein schrieb:
> Wie wild leuchten denn die "Debug-LED's" der Sekunden ?

Grob würd ich sagen, dass in 1 Sekunde auf 59 hochgezählt wird.

> gibts bei dir vielleicht nen Logikanalyser um das Aufzuzeichnen ?

Leider nein.

Winfried J. schrieb:
> reset beschaltung war schon erfragt?

Standard, 10k auf VCC.

Hannes Lux schrieb:
> Ich weiß nun nicht, womit die Hexdatei geflasht wird.

Benutze inzwischen den mySmartUSB light. Vorher über LPT Marke Eigenbau. 
(Die Widerstände sind übrigens noch angelötet.)


Ich find es echt super, dass ihr euch so viel Kopfzerbrechen mit meinem 
Problem macht!
Gast #2259551
Lesenswert?

Karl Heinz Buchegger schrieb:
> Mega8 hab ich keinen mehr da. Aber ich habe das Programm, so wie es ist,
> in einen Mega16 gebrannt (include natürlich angepasst). Hat auf Anhieb
> funktioniert.

Hab meinen Aufbau mit komplett neuen Bauteilen inkl. ganz frischen uC 
neu aufgesteckt. Leider wieder das gleiche Ergebnis. Hab das ganze mal 
fotografiert. Also so langsam zweifel ich an meinem Verstand ...

(Der uC ist separat, damit ich ihn später aufm Brett in die Krippe 
einsetzen kann. Zur besseren Übersicht hab ich dem Quarz für das Foto 
entfernt.)

Viele Grüße
Angehängte Dateien:

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