PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : atmel mit 2 input captures?



Ceos
29.01.2009, 11:40
ich suche nen atmel mit 2 inputcapture-einheiten, kennt da wer einen ? in der parametric table von atmel findet man so nen parameter leider nciht ...

es geht um die messung eines phasenversatz 2er sinusschwingungen, meineidee war ers nach nem schmitttrigger die flankenzeiten zu messen aber wenn ich nur einen inputcapture habiss des bissl und 2 megas verwenden iss auch mist wie ich die nicht synchron bekomme

pacer_one
29.01.2009, 12:08
abgesehen davon, dass dein Deutsch schlecht ist und ich nicht so der Experte in Sachen Mikrocontroller bin, hätte ich da einen Vorschlag

Du könntest doch über den externen Interrupteingang beide Controller synchronisieren um anschließend die Zeitdifferenz beider Signale über eben diesen Eingang zu ermitteln.
Müsstest du anschließend nur die Zählerstände beider Controller auswerten.

Gruß, pacer

Edit: der Mega8 hat doch 2 Interrupteingänge, da sollte man doch was draus machen können, oder?

Ceos
29.01.2009, 12:46
OT @pacer_one

abgesehen davon, dass dein Deutsch schlecht ist was sollte dieser überflüssige kommentar bitte, wenn du rechtschreibgeil bist dann antworte nicht auf meine fragen .... meine fresse sowas regt mich auf
diverse tippfehler gestehe ich ja ein und wenn ich grad n bissl mehr zeit hab les ich auch nochmal kontrolle aber eben gerade hatte ich halt keine #


OT Ende

die interrupteingänge kannste knicken, eh ich in der ISR bin vergehen einige takte und ausserdem ist die abarbeitung in der ISR nicht immer gleich (mögliche verzweigungen) also relativ unpräzise

die ICU ist da so präzise dass sie schon 2-3 takte nach der erkannten flanke den wert in ein dafür vorgesehenes register geschrieben hat, welches ich dann gemütlich auslesen kann

die notlösung sieht vor, in der interrupt-ISR den timerwert ohne umschweife in eine variable zu kopieren und dann über eine flag-variable im hauptprogramm diese dann auszulesen und zu verarbeiten ... aber wenn der phasenversatz relativ gering oder gar 0 ist, macht sich das blöd, wenn sich die ISRs gegenseitig blockieren

pacer_one
29.01.2009, 13:26
Nun, du hast leider keine Angabe gemacht, wie genau du das Ergebnis haben möchtest und wie oft du abtasten willst. Soweit ich weiß, wird wenn ein Interrupt auftritt, der aktuelle Befehl ausgeführt und anschließend in die ISR gesprungen.
Dadurch gibt es nur einen Unterschied der in der Länge des abzuarbeitenden Befehls begründet ist. Wie lange der MC benötigt um in die ISR zu kommen, ist ja egal.
Verzweigungen sollten in der ISR natürlich nicht vorkommen.

Eventuell kannst du ja sogar zwei Timer nehmen und beide erst in der Hauptroutine auslesen. Dann müsstest du in der ISR die Zähler nur stoppen.
Dadurch sollte die ISR sehr kurz werden, bei entsprechender Taktung des MCs sollte dann Zeiten µs-Bereich zu messen sein. Einen AVR mit einer Capture-Einheit habe leider nicht zu bieten.


Tschuldigung, ich hab nix gegen Tippfehler und rechtschreibgeil bin ich noch lange nicht, aber deine Schreibweise ist schon ziemlich ignorant, da muss man ja dreimal lesen um zu verstehen.
Und nicht gleich losholzen, auch wenn es nicht das ist was du hören wolltest, habe ich doch versucht dir zu helfen.

Edit: muss mich da korrigieren, einen Timer kann man natürlich nicht stoppen, sondern nur den Zählerstand im ICR-Register speichern. Von daher braucht man dann auch zwei Timer.

askazo
29.01.2009, 13:37
Der kleinste ATMega mit 2 Input Captures müsste der Mega162 sein.
Generell haben glaube ich alle AVR pro 16bit Timer einen Input Capture.
So findest Du auch über den Parametric Table schnell den richtigen.

Gruß,
askazo

pacer_one
29.01.2009, 13:51
@Askazo
Stimmt, der Mega 162 hat zwei Captureinheiten. Timer1 und Timer 3
Die Aussage ist soweit korrekt, 3x nachgeschaut, 3x Treffer :-)

Ceos
29.01.2009, 15:21
danke euch, sry dass ich gleich so reingesprungen bin ... bisl stressig grad


Dann müsstest du in der ISR die Zähler nur stoppen.


kann ich ja, einfach prescaler-bits auf 0 setzen

M162 hab ich sogar zufälligerweise 2 über!

der M32 hat auch 2 timer aber eben nur 1 ICU deswegen die erfahrungsfrage ;)

Besserwessi
29.01.2009, 16:46
Wenn man es wirklich so genau haben will, das man 2 ICP einhaten haben muß, dann sollte man ohne Verteiler arbeiten und hat dann auch kein Problem etwas zurückzusetzen.
Die Alternative wäre wirklich nur einen ICP und einen externen interrupt zu nehmen. Die Interrupt Antwortzeit kriegt man reproduzierbar (Zyklengenau), wenn man den µC per sleep Befehl in den Idel mode versetzt.

Der M32 hat zwar 3 Timer, aber nur einer davon ist ein 16 Bit Typ.

Ceos
30.01.2009, 08:38
dann sollte man ohne Verteiler arbeiten und hat dann auch kein Problem etwas zurückzusetzen. ja gut, nur versteh ich grad leider den zusammenhang nichtm, was meinst du mit "verteiler" ??? ich hab keinen "verteiler"!

die interrupt-reaktionszeit auszurechnen erfodert schon einiges an vorkenntnissen .... ich hab schon ein bild davon was da so an rechenzyklen draufgeht, zumal wir vor ner weile schonmal drüber diskutiert haben(hier im forum), aber ICH muss diesen teil ja nicht programmieren, das muss der E-techniker der hier mit mir zusammenarbeitet und ich kann ihm da schlecht alles vorbeten, er muss es später ja auch selber verstehen und belegen können ... er wollte das ganze mit ner analogen recheneinheit machen, die nachweislich (testaufbau) nicht ganz unempfindlich gegen EMI und frequenzgang ist!

ausserdem ist er schon mit seinen leistungsteilern und kopplern genug geschädigt, da traue ich ihm einfach nicht zu das problem mit den ACU auch noch in den griff bekommt ... zumal meine datenauswertung von seinem output abhängig ist und wenn er selber die daten schon digital erfasst und auswertet, bruach cih sie einfach nurnoch per UART übertragen, statt eine möglicherweise schwingenden DC Pegel messen zu müssen