wie 2 Timer gleichzeitig auf ATMega8

Gast #2239261
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
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
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
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
@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
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.

...
Gast #2249091
Wie sieht denn die Hardware aus?
Schaltplan o.ä. wäre nicht schlecht!

Evtl. keine/falsche Widerstände an den LEDs?
Dann würde evtl. der Spannungsregler/Baterie einbrechen --> Chaos aufm 
uC.
(Firma: Nisch-Aufzüge) Persönliche Seite #2249266
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.

Namaste
#2249275
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.