Hallo ich brauch mal eurere hilfe - ja ich hab hier schon viele themen zu meiner frage gelesen - nein ich hab leider noch keine passende information hier gefunden. - weshalb ich auch hier mein problem schildern möchte es geht um drehzahlmessung ich hab eine i2c platine mit der ich signale von einem reedkontakt abhole und dann eben sauber in meinem i2c-byte habe - klappt - passt. zur ermittlung der drehzahl habe ich dann bislang die uhrzeit-funktionen verwendet und nach jeder sekunde bearbeitet - alls blödsinn (war ja meine idee) - so jetzt die erleuchtung - ich mache das mit den Timern - nächste erkenntnis - für Timer kommt das Signal viel zu selten um halbwegs was vernünftiges zu berechnen (vielleicht so 1 x / sek) - also dann brauchen wir einen counter -her mit dem ding - aber ich komme einfach nicht weiter. im prinzip möchte ich die zeit (ich meine da jetzt tatsächlich zeit) zwischen zwei fallenden flanken ermitteln - und ich hab keinen blassen schimmer.. $regfile = "m2561def.dat" $crystal = 16000000 Dim I2C_Eingabe as Byte Config Timer1 = Counter , Edge = Falling Enable Timer1 ???? On Timer1 Isr_timer1 Enable Interrupts ODER Enable Timer1 ????? Do lesen i2c irgendwas ausgeben usw loop isr_timer1: ????? - da ist dann die nicht vorhandene weisheit im ganzen weg Das einzige was ich halbwegs überrissen habe - der oder die timer laufen parallel zur eigentlichen loop und irgendwann (keine ahnung wann - kann mir das vielleicht jemand erklären) geht das ganze in die On Timer - Routine - und daten die dort erzeugt wurden kann ich wiederum in meiner loop ganz normal verarbeiten .... stimmt wenigstens das???? Frage 1 - wie bringe ich dem Dinges bei den Counter hochzuzählen wenn I2C_Eingabe.3 da war Frage 2 - wo steht jetzt dann wieviel zeit vergangen ist verwenden würde ich gerne die Timer2 und höher (16Bit) - laut Datenblatt hat das Teil 2 x 8bit-Timer (0 und 1) und 4 x 16Bit toll wäre wenn jemand vielleicht das ganze sowohl für 8 und 16 bit versucht mir nahezubringen. ich hoffe jetzt mal das ich keine relevanten informationen für euch weggelassen (schlicht - vergessen) habe und ihr mir weiterhelfen könnt - Für euere unterstützung sag ich gleich mal jetzt DANKE ... hoffe ich langweile euch nun nicht zu sehr
Häng das Signal an den Int Pin (ext. Interrupt) und messe die Zeit zwischwen zwei Ereignissen mit einem Timer. Das ist der einzige saubere Weg.
> Enable Interrupts ODER Enable Timer1
DU brauchst Beides, einmal generell Interrupts aktivieren, einmal den
Timer selber.
Du brauchst folgendes, den Timer als Timer und nen externen Interrupt
auf falling.
Der Timer am Besten der Auflösung wegen mit 16 Bit laufen lassen,
Prescaller musst Du schaun wie schnell Deine Flanken kommen ...
Dann gehst Du nur noch hin und liest beim externen Interrupt-Event den
Timer-x aus und setzt ihn wieder auf null.
Timerwert, Taktfrequenz des µC und Prescaller ergeben den Messwert in Hz
-> nur noch umrechnen in RPM
Kederer schrieb: > für Timer kommt das Signal viel zu selten um > halbwegs was vernünftiges zu berechnen (vielleicht so 1 x / sek) "Vielleicht so" interessiert niemanden! Du mußt konkrete Zahlen ermitteln (min/max), sonst ist alles Quatsch. Kederer schrieb: > also > dann brauchen wir einen counter -her mit dem ding - aber ich komme > einfach nicht weiter. Dann nimm ne Variable als Counter. Setze den Timerinterrupt so, daß Du für die gewünschte Auflösung (welche?) eine genügende Anzahl Counts erhältst. Für 1% also >=100 Counts bei der höchsten Geschwindigkeit. Peter
erstmal danke für euere antworten ich möchte es mit einem counter machen mein atmel2561 verfügt da über eine ganze reihe von Timern - jedoch können davon nur 4 als Counter verwendet werden (wenn ich das alles richtig verstanden habe) so einem counter ist ja dann ein pin zugewiesen. z.B. Timer3/Counter3 ist der pin PE7. ich kann das signal jedoch leider nicht direkt auf den pin legen (oder weis zumindest nicht wie) da ich den reedkontakt über eine i2c-eingabekarte auslese. gibt es irgendeine möglichkeit entweder den counter3 direkt auf ein bit aus dem i2c-byte zu legen oder irgendeine elegante lösung den pin PE7 mit dem bit aus dem i2c-byte zu verbinden? danke
Peter schrieb: > da ich den reedkontakt über eine > i2c-eingabekarte auslese. Wenn Du eh Software brauchst, um das Signal zu lesen, dann ist das zusätzliche INC Variable nur Pillepalle. Ein HW-Counter wäre Blödsinn. Peter
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.