Hallo, ich habe seit dem Wochenende ein Phänomen oder auch einen Denkfehler zu verarbeiten: Um bei einem Spannungsausfall bzw. Ausschaltbefehl an einem Board mit ATmega32 keinen Datenverlust zu erleiden habe ich einen Stützkondensator (GoldCap 1,0F) in die Spannungszuführung VCC eingebaut. Anschließend wollte ich die Betriebsspannung auf INT1 führen um bei fallender Flanke die betreffenden Werte in den EEPROM zu schreiben zu lassen. Entsprechend wurde INT1 als INPUT konfiguriert und die Interrupt-Service-Routinne auf fallende Flanke programmiert. Das Phänomen: Der ATmega speichert die Werte bei Spannungsausfall oder Ausschalten wie gewünscht; allerdings bereits schon bei unbeschaltenem Port INT1 >> also ohne, daß das auszuwertende Signal der abfallenden Spannung überhaupt am Port INT1 anliegt !!! Ich habe den Test bestimmt 20x mit positivem Ergebnis ausgeführt. Wenn am INT1 ohne Beschaltung und PullUp eine vagabuntierende Spannung vorhanden währe und die ISR den Abfall dieser Spannung als H/L-Flanke erkennt, woher bekommt dann der ATmega noch genug Energie zu Rückschreiben >> wir befinden uns ja dann schon im Lo-Bereich ? Ursprünglich war geplant, die Auswertespannung vor dem Festspannungsregler abzugreifen und mit dem GoldCap hinter den Regler einzuspeisen. Eine Diode im Eingang des 7805 hätte mir den Rückfluß der Energie in die Spannunsversorgung verhindert so daß selbst, wenn am Eingang des 7805 schon Lo ist, für eine gewisse Zeit durch den Kondensator auf der Seite des ATmega Hi gehalten wird. Warum ist das so und kann diese Lösung ohne INPUT-Signal so dauerhaft beibehalten werden ??? Eine schöne Woche Frank
> Wenn am INT1 ohne Beschaltung und PullUp ...
Bezieht sich hier das "ohne" sowohl auf "Beschaltung" als auch auf
"PullUp"? Weil dann ist das kein Wunder, denn ein offener Eingang
floatet wild umher und löst damit hier Interrupts aus.
Korrekt, das Phänomen tritt im Moment ohne Pullup und ohne Beschaltung auf. Wie gesagt, von wildem floatem will ich erst einmal nicht sprechen; die Funktion ist ansonsten einfandfrei! Ich werde den Eingang beschalten und sehen ob sich prinzipiell etwas ändert. Danke für die Info Frank
Frank L. wrote: > Wie gesagt, von wildem floatem will ich erst einmal nicht sprechen; die > Funktion ist ansonsten einfandfrei! Das Eine schließt das Andere nicht aus. Die Spannung an einem offenen Eingang wandert nun mal unkontrolliert umher, und so werden beim Überschreiten der H/L-Grenze Interrupts ausgelöst.
Ich würde dazu keinen Interrupt nehmen, sondern einen normalen Eingang pollen (und entprellen). Der Goldcap speichert Energie für mehrere Minuten (ein Goldcap 0,1F hat genug Energie für mehr als eine halbe Minute Soundausgabe mit Tiny85 über HS-PWM direkt auf Lautsprecher), da hast Du verdammt viel Zeit zur Datensicherung. ...
Hannes Lux wrote: > Ich würde dazu keinen Interrupt nehmen, sondern einen normalen Eingang > pollen (und entprellen). Der Goldcap speichert Energie für mehrere > Minuten (ein Goldcap 0,1F hat genug Energie für mehr als eine halbe > Minute Soundausgabe mit Tiny85 über HS-PWM direkt auf Lautsprecher), da > hast Du verdammt viel Zeit zur Datensicherung. > > ... Dachte ich auch erst. Das Problem ist, daß an einem anderen Interrupt ein Drehgeber eingelesen wird und dieser Wert im EEPROM abgelegt werden soll. Bediene ich nun versehendlich beim- oder nach dem Speichern noch den Encoder so wird der angeschlossene Schrittmotor wohl noch nachgeführt; der gespeicherte Wert des Drehgebers ist allerdings nicht korrekt bzw. im Gleichlauf mit der Hardware. Nach Auslösung des Interrupts zum Datenspeichern sperre ich alle ISR bis der GoldCap leer ist und ein Neustart erfodert. Frank
> Nach Auslösung des Interrupts zum Datenspeichern sperre ich alle ISR bis > der GoldCap leer ist und ein Neustart erfodert. Das kann man auch nach Erkennung des Spannungseinbruchs per entprelltem Polling. Dazu braucht es keinen Interrupt. Also: Wenn Spannung weg dann Motor aus Pause (letzte Drehgeberbewegungen durch Nachlauf noch mitnehmen) Werte sichern ...
Danke, das leuchtet mir ein. Ich werde, wie gesagt, heute Abend testen. Wie lang kann mann das Polling ziehen (zeitlich); bzw. kann ich festlegen, daß bis zum Neustart gepollt wird? Frank
> Danke, das leuchtet mir ein. Ich werde, wie gesagt, heute Abend testen. > Wie lang kann mann das Polling ziehen (zeitlich); Ich würde das Polling mit der vermutlich sowiso benötigten Tastenentprellung kombinieren, die von einem Timer synchronisiert wird. Wenn nach der Entprellung der Eingang als "Saft fehlt" erkannt wird, kann die Aktion beginnen. > bzw. kann ich > festlegen, daß bis zum Neustart gepollt wird? Das Polling sollte nebenher erfolgen, also z.B. alle 20 ms im Rahmen der Tastenentprellung. Bis zum Neustart wird es wohl nicht gehen, da der AVR ja ohne Spannung (wenn der Cap leer ist) schlecht pollen kann... ;-) Er arbeitet (und pollt) exakt solange, bis aufgrund des Absinkens der Cap-Spannung der Brown-Out-Reset zuschlägt und den AVR am Unfugmachen hindert. Sollte die Stromversorgung vorher wieder funktionieren, dann kann natürlich der Betrieb fortgesetzt werden, vermutlich sogar ohne Neustart. Pauschal kann man da nicht viel sagen, es kommt auf die Details Deiner Anwendung an. ...
Hannes Lux wrote: > Bis zum Neustart wird es wohl nicht gehen, da der AVR ja ohne Spannung > (wenn der Cap leer ist) schlecht pollen kann... ;-) .. sorry, da habe ich mich wohl ein bischen unqualifiziert ausgedrückt; ich meinte es natürlich so wie du treffend formuliert hast. > Pauschal kann man da nicht viel sagen, es kommt auf die > Details Deiner Anwendung an. Anwendung eigentlich ganz simpel (ist immer noch mein Einsteigerprojekt in AVR und BASCOM) Ein Schrittmotor soll in seinen Funktionen mittels optischen Drehgeber in seiner Position (10.000 Step's) sowie mittels Tasten für Motor disable/enable, Halbschritt/Mikroschritt, verschidene Positionsmarken anfahren, Kalibriermodus für die angeschlossene Mechanik etc. über einem ATmega32 gesteuert werden. Ein LCD-Display 4x20 informiert über alle relevanten Zustände sowie Positionen einschl. Umrechnung in Einheiten für den nichtlinearen, mechanisch gekoppelten Abtrieb. Es funktioniert bislang alles problemlos; der "I-Punkt" war letztendlich das Zwischenspeichern des Wertes für den Schrittzähler bei Spannungsausfalls bzw. Ausschaltbefehl. Da der GoldCap die Versorgung trotz angeschlossenem LCD relativ lange aufrecht hält muss sichergestellt werden, daß in dieser Zeit ein erneutes Betätigen des Drehgebers nicht zum Weiterarbeiten des softwaremäßigen Schrittzählers führt. (ansonsten entsteht eine Differenz zwischen Schrittzähler und eigentlicher Motorstellung) Soweit der Kurzdurchlauf zur Anwendung. Wie gesagt, ich bin mit meinen Kenntnissen sicherlich noch im untersten Level und werde mich step by step vorarbeiten. Polling habe ich schon gehört aber noch nicht benutzt; auf Timer möchte ich wegen der Anwendung im HF-Bereich möglicht verzichten. Ich befürchte, daß ich mit der Aktivierung, den Teilerketten und Wandlungen mehr Störungen unterhalb der Quarzfrequenz produziere als mir lieb ist. Da ich für das Auslesen des optischen Drehgebers schon einmal mit Interrupts gearbeitet habe schien mir diese Lösung in punkto Plausibilität am nächsten. Soviel dazu... Du siehst, ich habe noch viel Wasser vor mir... Frank
Ausserdem würde ich nicht VCC messen, sondern die Spannung vor deinem 7805. Das mit der Diode ist gut, damit nichts zurückfliesst! Aber besser vor dem 7805 eine Schwelle definiren! So merkst du, wenn die externe Spannung wegbricht únd kannst speichern, etc., egal was deine VCC macht!
> Ausserdem würde ich nicht VCC messen, sondern die Spannung vor deinem > 7805. Das hatte ich vorausgesetzt, über Spannungsteiler und Z-Diode, wobei der Spannungsteiler den PullDown für definiertes Signal enthält. > ...in AVR und BASCOM... Das wäre für mich das KO-Kriterium. Schon alleine aufgrund der Tatsache, dass Bascom bei jedem Interrupt alle (auch die unbenutzten) Register auf Stack sichert, was 128 unnötige Takte kostet. Dazu kommt, dass ein kooperatives Multitasking, wie es in ASM (oder C, wenn man es richtig kann) leicht möglich ist, in Bascom nur schwer realisierbar ist und recht langsam wird. ...
Hi Warum eigentlich INT1? Für solche Aufgaben ist der Analogkomperatur die bessere Lösung. Da kannst du einen definierten Pegel einstellen, bei den der Interrupt ausgelöst wird. MfG Spess
Danke nochmals für die Bemühungen aller Teilnehmer, Natürlich gehe ich mit der Spannungsüberwachung vor dem 7805 ab; die Diode liegt in als Rückflußsicherung davor. Der PIN des Analogkomperators ist leider schon vergeben und läßt sich von Seiten des Layouts schwer tauschen. Dem Beitrag mit dem K.O.-Kriterium kann ich leider nicht folgen... sorry
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.