Forum: Mikrocontroller und Digitale Elektronik AVR Takt nicht immer gleich?


von Toni (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> jetzt weiß ich nicht mehr so recht woran es sonst noch liegen könnte.
Software?
Poste doch mal den Sourcecode.

von Sebastian (Gast)


Lesenswert?

Kenne das für gewöhnlich nur mit internem RC. Der KONDENSATOR intern ist 
nicht sehr Temperaturstabil.Fuses richtig gesetzt??

von Toni (Gast)


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

von Toni (Gast)


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?

von Michael U. (amiga)


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

von Gast (Gast)


Lesenswert?

Das kann ungefähr 138 Gründe haben. Ohne Sourcecode kann man dazu keine 
Aussage treffen. Außer dieser: Am Quarz liegts nicht, denn der schwingt 
immer gleich schnell.

von Bensch (Gast)


Lesenswert?

> Außer dieser: Am Quarz liegts nicht, denn der schwingt
immer gleich schnell.

Im Prinzip ja....
Aber wenn die CKOPT nicht gesetzt ist, setzt er schonmal aus.

von Toni (Gast)


Angehängte Dateien:

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

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.