mikrocontroller.net

Forum: Compiler & IDEs timer und servo wollen nicht...


Autor: problem_child (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
hi,
ich schaffs einfach nicht mit meinem atmega8 ein pwm signal zu
erzeugen. mein quarz hat 3686400 H.
ich wollte das so machen:
timer1 loest alle 20ms einen interrupt aus und setzt pin0 von PORTB
auf
high, stellt timer2 und der sollte nach 1.5ms pin0 wieder auf low
setzen.

meine rechnung:
(3686400 * 0.02) / 8 = 9216       fuer timer1
(3686400 * 0.0015) / 64 = 84      fuer timer2

waere echt dankbar fuer jede hilfe. ich probier jetz schon ziemlich
lange daran herum und weis einfach nicht warum das nicht will...

Autor: neuer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
deine whileschleife wird wahrscheinlich wegoptimiert.
schau dir mal den objektcode an.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt's einen wichtigen Grund, die Hardware-PWM nicht zu
benutzen?

Autor: problem_child (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
warum ich die hardware-pwm nicht benutz ist pure unwissenheit ;)
hab gerade mal in avr-studio getestet
und da scheint es als würde das timing passen...

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> deine whileschleife wird wahrscheinlich wegoptimiert.

Eher nicht, denn das wäre nicht erlaubt.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erzähl mal.
Woran scheitert es denn? 'Es funktioniert nicht' ist ja wohl
eine etwas dürftige Fehlerbeschreibung.

Kriegst du am Ausgang Pulse? (Halte mal eine LED mit Vorwiderstand
dran: sollte leuchten bzw. glimmen).

Ich hab jetzt die Timer-Zahlen nicht nachgerechnet, aber wenn
die stimmen: Bist du sicher, dass der Quarz auch aktiv ist?

Autor: problem_child (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

hab den fehler jetz gefunden.
das problem war, dass auch wenn ich den interrupt von timer2
ausschalte timer2 natürlich weiterläuft und auch in den 20ms
überläuft. weil der interrupt aus ist wird auch das überlaufflag
nicht wieder entfernd. also wird der interrupt sofort ausgelöst,
wenn ich in der ISR von timer1 den interrupt von timer2 wieder
aktiviere.
musste also noch TIFR &= 0xc0 einfuegen und jetz gehts.

trotzdem danke, dass ihr so schnell geschrieben habt!!!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.