Genau 3,515 Sekunden etwas abfragen

Gast #4360674
Lesenswert?
• ▲
▼
Guten Tag Liebes MC Forum,

ich möchte gerne ziemlich genau den DS2740U abfragen.

Der aktualisiert seine Register ja im Intervall von 3,515 Sekunden.

Ich habe ein Atmega88-PA und ein Display und möchte damit halt 
Batteriemessungen durchführen.

Angenommen, mein Quarz schwingt nun mit +/- 0 ppm und der Quarz ist in 
Ordnung.

Wie löse ich den am besten denn alle 3,515 Sekunden ein Interrupt dafür 
aus?
Bzw. welchen Quarz kann ich dafür am besten wählen?

Es soll kein Batterie betriebenes Gerät werden (also der der den DS2740U 
abfragt).

Gruß
Wolfsente
Gast #4360688
Lesenswert?
• ▲
▼
mr. mo schrieb:
> Gegenfrage:
> Wieso muss das so genau sein?

Möchte halt nicht 2-mal den selben Wert abfragen.


abfrage schrieb:
> Nette Idee, aber wie bekommst du deine Abfrage mit dem Refresh des
> Registers synchronisiert?

Muss ja nicht genau nach dem Refresh sein, sondern einfach nur genau 
alle 3,515 Sekunden sein.
Dann wird ja das Register aktualisiert.
Gast #4360700
Lesenswert?
• ▲
▼
Wolfsente schrieb:
> Muss ja nicht genau nach dem Refresh sein, sondern einfach nur genau
> alle 3,515 Sekunden sein.
> Dann wird ja das Register aktualisiert.

Wenn du alle 4 Sekunden abfragst, dann kannst du sicher sein, dass auf 
jeden Fall ein neuer Wert im Register stand.
Du machst dir Probleme, die es eigentlich gar nicht gibt.
Gast #4360715
Lesenswert?
• ▲
▼
Oliver S. schrieb:
> http://evolutec.publicmsg.de/index.php?menu=software&content=prescalertools

Der Link ist aber eher untauglich, der "Preload" ist ziemlicher Unsinn.

Korrekt wäre sich einen Betriebsmodus rauszusuchen in dem sich der TOP 
Wert des Timers einstellen lässt, etwa Mode 7 beim 8-Bit Timer im 
Mega328.
Oder auch Mode 14 beim 16-Bit Timer im Mega328.

Dann wird nämlich der Overflow Interrupt immer zur gleichen Zeit 
ausgelöst ohne das man mit dem Counter-Register rum fummeln muss.
Gast #4360744
Lesenswert?
• ▲
▼
Der Andere schrieb:
> Was passiert dann? Bleibt der Erdkern stehen, schaltet sich die Sonne
> aus?

Wenn Venus und Merkur richtig stehen, könnte es vllt den Weltfrieden 
bringen.
Wenn nicht, das weiss dann niemand.

Der Andere schrieb:
> Was ist dein Ziel?

Hatte mir nur Gedanken gemacht, wie ichs ziemlich genau abgefragt 
bekomme.

Das Thema hat sich für mich doch erledigt und ich habe es verstanden :D
Gast #4360745
Lesenswert?
• ▲
▼
Oliver S. schrieb:
> Natürlich macht an das per CTC.

Ich tendiere da eher zu Fast PWM, damit der Overflow IRQ auch beim TOP 
Wert kommt.

> Und mit etwas nachdenken findet man dann auch raus,
> wie der Preload-Wert und der TOP-Wert für CTC zusammenhängen.
> Denn irgendwie muß man den ja auch ausrechnen ;)

Ob man nun Preload oder TOP ausrechnet, die Anzahl der Zählschritte 
bleibt gleich, ja.
Aber der Link propagiert eben Preload beim AVR und da ist das Murks, 
weil man den Counter nicht automatisch neu setzen lassen kann.
#4360777
Lesenswert?
• ▲
▼
Rudolph schrieb:
> Ich tendiere da eher zu Fast PWM, damit der Overflow IRQ auch beim TOP
> Wert kommt.

Was willst du mit dem Overflow?

Man generiert mit dem Timer im CTC eine Millisekunde und lässt in der 
CTC-ISR einen Abwärtszähler mit Startwert 3515 laufen. Wenn dieser bei 0 
angekommen ist, geht der Punk ab oder die K... ist am Dampfen oder was 
auch immer.

Rudolph schrieb:
> Aber der Link propagiert eben Preload beim AVR und da ist das Murks

Wenn der Timer nichts anderes kann, ist das kein Murks. Da es für die 
meisten Leute nur einen einzigen AVR gibt, nämich den Atmega8 und dessen 
8048-Gedächtnis-Timer0 nur Overflow kann, macht man das eben so.

Da der TO aber einen Atmega88 hat, ist das natürlch kein Thema und man 
nimmt selbstverständlich den CTC-Mode. Alles andere wäre dann 
tatsächlich Murks.

mfg.
Gast #4360808
Lesenswert?
• ▲
▼
Thomas E. schrieb:
>> Ich tendiere da eher zu Fast PWM, damit der Overflow IRQ auch beim TOP
>> Wert kommt.
>
> Was willst du mit dem Overflow?

Willst Du mich trollen?

Thomas E. schrieb:
>> Aber der Link propagiert eben Preload beim AVR und da ist das Murks
>
> Wenn der Timer nichts anderes kann, ist das kein Murks.
...
> Da der TO aber einen Atmega88 hat

Die Timer vom ATMega88 könnten einen automatischen Preload vom 
Counter-Register? Interessant.

Macht das doch mit dem CTC wenn Ihr Spass dran habt, ob nun Fast PWM mit 
Overflow oder CTC mit Compare Match ändert ja am Ergebnis nichts.
Gast #4360852
Lesenswert?
• ▲
▼
Mal ne Frage dazu.
Ich habe 8 mHz

im CTC Mode habe ich ein Prescal von 64 und muss 125 Takte in das 
OutputCompare Register dazu reinpacken damit ich im 1 mS Intervall ein 
Interrupt bekomme.

im Overflow Mode ist es doch eig. dasselbe oder? außer das ich in der 
Interrupt Routine noch das Register wieder auf 0 setzen muss?

und dann noch ne Frage.
Ich hab das grad ausgerechent mit dem 8MHz und einer Millisekunden.
8MHz / 64 Prescale = 8nS.
8nS * 125 Takte = 1mS.

Wenn ich aber das Tool von der Seite nehme, sagt der mir 131 Takte :o
Gast #4360854
Lesenswert?
• ▲
▼
Ok habs schon verstanden, bei Compare cleart er das und bei Overflow 
mach ich ja ein Preload ich Dussel.

Sry....

Aber warum ist CTC denn besser als OVF? ich versteh nicht so ganz warum 
CTC besser ist. Am ende hab ich doch eine mS oder nicht?
Gast #4360867
Lesenswert?
• ▲
▼
Thomas E. schrieb:
>> Willst Du mich trollen?
>
> Hast du irgendwelche verbotenen Substanzen genommen?

Ich nicht, aber Du kannst scheinbar welche empfehlen.
Die Antwort werte ich dann mal als klares "ja".

> Rudolph schrieb:
>> Die Timer vom ATMega88 könnten einen automatischen Preload vom
>> Counter-Register? Interessant.
>
> Schalt dein Hirn ein!

Schreibt der der keine fünf Beiträge hier lesen will aber trotzdem 
dagegen diskutieren will.
Gast #4360889
Lesenswert?
• ▲
▼
Wolfsente schrieb:
> Ok habs schon verstanden, bei Compare cleart er das und bei Overflow
> mach ich ja ein Preload ich Dussel.

Nein, ein Preload des Counter-Registers macht man auf gar keinen Fall, 
weil das nicht automatisch geht.

Im Fast-PWM Modus 7 vom ATMega88 stell man mit OCRA den TOP Wert des 
Zählers ein und wenn dieser erreicht wird gibt es die Möglichkeit, einen 
Overflow Interrupt auszulösen.

> Aber warum ist CTC denn besser als OVF? ich versteh nicht so ganz warum
> CTC besser ist. Am ende hab ich doch eine mS oder nicht?

CTC ist nicht besser oder schlecht als Fast PWM, bei CTC nimmt man den 
Compare-Match Interrupt, bei Fast PWM mit OCRA als TOP den Overflow 
Interrupt.
Die beiden Modi machen in der Anwendung als Zeitbasis sogar quasi das 
gleiche, wenn der Zähler den Wert von OCRA erreicht wird er automatisch 
auf Null zurück gesetzt.
#4360921
Lesenswert?
• ▲
▼
Wolfsente schrieb:
> Aber warum ist CTC denn besser als OVF? ich versteh nicht so ganz warum
> CTC besser ist. Am ende hab ich doch eine mS oder nicht?

Wenn der TCNT per Programm mit einem Preload versehen werden soll, 
geschieht das in der OVF-ISR, die im Programm irgendwann nach Auftreten 
des OVF-Interrupts ausgeführt wird.

Aber der Timer läuft bis zur Aktualisierung des Counters natürlich 
weiter. Sodaß er möglicherweise beim Laden des Preloads nicht auf 0 
steht. Das mag mit Prescaler = 64 sogar noch alles funktionieren.

Läuft der Timer aber schneller, funktioniert das mit Sicherheit nicht. 
Dann muß, damit der Timer exakt läuft, der aktuelle TCNT ausgewertet und 
der Preload entsprechend angepasst werden. In der Zeit läuft er 
natürlich auch weiter, was dann auch wieder berücksichtigt werden muss.

Im CTC macht das die Hardware des Controllers alles von alleine. Exakt. 
Immer.

mfg.
Gast #4360940
Lesenswert?
• ▲
▼
Nein, das wird auch alle 3,5s aktualisiert.
Frag einfach alle 1s ab und nutz es für die Verarbeitung.
Es ist halt ein Verbrauchsmesser und kein Strommesser. Dafür gibt es 
andere Lösungen.


Hans
Gast #4361077
Lesenswert?
• ▲
▼
Thomas E. schrieb:
> Wenn der TCNT per Programm mit einem Preload versehen werden soll,
> geschieht das in der OVF-ISR, die im Programm irgendwann nach Auftreten
> des OVF-Interrupts ausgeführt wird.
>
> Aber der Timer läuft bis zur Aktualisierung des Counters natürlich
> weiter. Sodaß er möglicherweise beim Laden des Preloads nicht auf 0
> steht. Das mag mit Prescaler = 64 sogar noch alles funktionieren.
>
> Läuft der Timer aber schneller, funktioniert das mit Sicherheit nicht.
> Dann muß, damit der Timer exakt läuft, der aktuelle TCNT ausgewertet und
> der Preload entsprechend angepasst werden. In der Zeit läuft er
> natürlich auch weiter, was dann auch wieder berücksichtigt werden muss.

Ok, angenommen ich habn Asynchronen Timer mit nem 32.768 Hz Quarz dran.
Mit Prescaler 1024 und mach ein Preload von 224 in dem Interrupt.
Dann sollte das praktisch gesehen genauso gut laufen, wenn ich das mit 
CTC mache?
Weil 1024 ist ja ein sehr großer Prescaler und mein interner Takt von 
8MHz ja sher groß ist, das es da keine Überschneidungen geben könnte

Also davon abgesehen mach ich trtzdm ads mit CTC. Mir gehts nur ums 
Verständnis
Gast #4361134
Lesenswert?
• ▲
▼
Wolfsente schrieb:
> Hatte mir nur Gedanken gemacht, wie ichs ziemlich genau abgefragt
> bekomme.

Du machst dir unötig Gedanken. Der DS2740U summiert alle Messergebnisse 
auf (1. Messung + 2. Messung u.s.w.).

Mal angenommen du liest zu schnell aus bekommst du eben mehrmals das 
selbe Ergebniss und irgendwann das neu berechnete Ergebniss. Du machst 
also einfach nen Vergleich -> Alt = Neu? Wenn:Ja -> verwerfe Neu 
Wenn:Nein -> übernehme neues Ergebniss. Wenn du schneller als die 3,5s 
aus liest wirst du so nie ein Ergebniss verlieren bzw. Überspringen.

Wenn du aber langsamer als deine 3.5s ausliest, kann es durch aus 
passieren das du mal ein Ergeniss verpasst.

Also solltest du einfach alle z.B. 3s auslesen dann ist alles Save.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren