AVR Takt nicht immer gleich?

Gast #1021296
Lesenswert?
• ▲
▼
Also mein Problem is folgendes:
Ich habe auf einem ATMEG88 einen Regler laufen der mir mit Hilfe eines 
Schrittmotors ein Gelenk positionieren kann, was auch die meiste Zeit 
funktioniert, nur manchmal habe ich das Problem, dass der ganze 
Controller viel langsamer arbeitet, d.h. der Steppertackt ist um einiges 
zu langsam, führe ich dann ein Reset durch läuft alles wieder normal.
Ich hab mir dann mal gedacht es könnet am Quarz liegen der einfach mit 
einer zu geringen Geschwindigkeit schwingt, hab dann den Takt 
ausgemessen und alles war normal :-/ jetzt weiß ich nicht mehr so recht 
woran es sonst noch liegen könnte.
Habt ihr vielleicht eine Idee?

Atmega88 @ 14.7456MHz mit 2 33pF Kondis

lg
Gast #1021312
Lesenswert?
• ▲
▼
der Sourcecode ist leider ein bischen lang ;-)
soll ich evt nur einen bestimmten Teil Posten?

Fuses sind sicher richtig gesetzt, wie gesagt, meistens funktioniert es 
auch richtig nur manchmal (ohne neuprogrammieren oder anderen 
änderungen) sieht es eben so aus als ob die Quarzfrequenz viel geringer 
währe.

lg
Gast #1021321
Lesenswert?
• ▲
▼
Ich hab übrigens den Speicher relativ voll:

Program:    7900 bytes (96.4% Full)
(.text + .data + .bootloader)

Data:        805 bytes (78.6% Full)
(.data + .bss + .noinit)

kann es sein, dass dadurch Probleme entstehen?
also dass C den Speicher nicht immer gleich vergibt (zb wegen 
Interrupts) und evt. manchmal dadurch langsamer ist?
#1021322
Lesenswert?
• ▲
▼
Hallo,

Dein Programm ist abgestürzt...
Irgendein Teilprogramm gerät in den Zustand, daß es den AVR mehr 
beschäftigt als nötig.

Bei C würde ich auch Stack-Overflow in Betracht ziehen oder eben
Interruptroutinen, die Dinge erledigen, die nicht dort reingehören, 
Berechnungen z.B., die bei bestimmten Datenkombinationen viel zu lange 
brauchen oder Zählerüberläufe, die nicht sauber bearbeitet werden und 
eine volle Zusatzrunde einlegen oder...

Ohne das Programm nur Stochern im Nebel, sicher ist für mich nur, daß 
der AVR-Takt sich nicht von selber um extreme Werte ändert und ein Quarz 
schon garnicht, zumindest nicht Grundwellenquarze in AVR-üblicher 
Benutzung.

Gruß aus Berlin
Michael
Gast #1021612
Lesenswert?
• ▲
▼
Ok hier ist mal der Quellcode,
wie es aussieht ist es ein Softwareproblem und der Quarz dürfte immer 
gleich schnell schwinden, da die Serielle Schnittstelle immer 
funktioniert.

Zum Programm selbst:
es wird ein 50kHz Sinussignal getriggert abgetastet, ein beobachter 
errechnet dann den systemzustand, und der regler (läuft mit 1/4 der 
abtastrate des beobachters) soll dann die Position ausregeln bzw einer 
linearisierten sollposition folgen (rampe).

einige der Interruptoutienen sind schon etwas länger, aber warum das nur 
manchmal zu problemen führt wundert mich


lg
Angehängte Dateien:

Antwort schreiben

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.

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.