Forum: Mikrocontroller und Digitale Elektronik Rechtecksignal Frequenz manipulieren


von S.Hintsche (Gast)


Lesenswert?

Hallo!

Zuallererst muss ich sagen das für mich PICs und AVRs etwas neues sind,
kenne mich da noch nicht so aus...

Bevor ich mir die Zähne dran ausbeisse frag ich lieber hier ob mein
Problem so lösbar ist.

Mein gebraucht gekaufter Tacho (sehr schwierig aufzutreiben) geht
leider 9-10% vor. (Elektronische Codierung die sich nicht auf den
passenden Wert ändern lässt, sprich der Tacho meint ich hätte ein
anderes Getriebe drin)

Also, es geht darum das ich ein Rechtecksignal aus dem Getriebe meines
Autos bekomme. Das geht bei 0,xy Hz los und geht bis ca 260 Hz, je nach
gefahrener Geschwindigkeit. Nun müssten von der gemessenen Frequenz ca
10% abgezogen werden und damit ein Ausgang befeuert werden. Alles was
unter 1Hz liegt kann am Ausgang unter den Tisch fallen. Wer fährt schon
stundenlang 1km/h...

Zuerst wollten wir die Lowphase des Ausgangs länger ziehen, aber da
ändert sich ja nur das Tastverhältnis..
Das Tastverhältnis hat keine Auswirkung, nur die Frequenz der
>Masseimpulse< ist wichtig.

Nun könnte man Interrupts nutzen:
-einen am Eingang bei fallender Flanke, nen Zähler starten
-ebenso einen am Eingang bei steigender Flanke, Zähler stoppen und die
vergangen Takte,also Frequenz ausrechnen.

Nun müsste mit dem Ergebnis ein Ausgang beschickt werden. Auch wieder
mit einem Zähler.Wenn der aber abläuft löst er ja einen Interrupt aus
und das hat zur Folge das die Interrupts bei fallender/steigender
Flanke unter den Tisch fallen. (verschieden Frequenzen überschneiden
sich irgendwann mal, also während er den einen IR abarbeitet kommt von
woanders ein anderer der ingnoriert wird.

Wie ist das überhaupt wenn ich einen IR bei fallender Flanke auslösen
will, das aber nicht geht weil gerade ein anderer IR bearbeitet wird..
Fällt dem AVR dann nach abarbeitung auf: "Oh da habe ich was
übersehen" und löst dann gleich den anderen IR aus?

Bis jetzt habe ich zum probieren einen Atmega8 der mit 3,6864 Mhz
rennt. Für den Eingang hätte ich den 16bit Zähler genommen. Für den
Ausgang, erst recht bei 3,7 Mhz ist ein 8bit Zähler sehr knapp.. Er
müsste mehrfach überlaufen und das würde jedes mal das alles andere
unterbrechen. Im Prinzip muss meine Anwendung auf zwei Hochzeiten
tanzen.

Wäre PWM eine alternative? Nur wie ist das beim ändern der Frequenz,
gibt es da "Pausen/Sprünge"? Für meine Anwendung wäre wichtig das man
das Signal gleichmässig ändern können muss, sonst springt die
Tachonadel..

Ist mein Problem so mit einem Atmega8 lösbar? Müsste ich einen 162er
nehmen (hat 2 16-bit Zähler) oder bin ich total auf dem Holzweg? Hat
jemand eine Idee wie das zu lösen wäre?

danke

mfg, Steffen

von Sonic (Gast)


Lesenswert?

Zuerst mal haben die Interrupts (ATMEL) Prioritäten, nach denen sie
ausgelöst werden. Während der Ausführung eines Interruptes wird der
globale Interrupt gesperrt, es werden keine weiteren ausgelöst. Wenn
während der Ausführung eines INT ein anderer ausgelöst werden würde
bleibt dessen INT-Flag gesetzt und der INT wird nach Beenden des 1.
ausgeführt, vergessen wird keiner. Falls nun während der Ausführung
mehrere INT-Flags anstehen werden diese INTs nach Priorität
ausgeführt.
Du kannst die Frequenz am Eingang messen, 2 Möglichkeiten: 1. Torzeit
und Impulse zählen oder 2. bestimmte Anzahl Impulse zählen und Zeit
messen. Die Ausgabe kannst du mit dem Timer-Interrupt machen, indem du
mit Output-Compare-INT schaffst und den Wert nach der Eingangsfrequenz
berechnest. Dann hättest du am Ausgang wieder eine stabile Frequenz.

von Peter D. (peda)


Lesenswert?

PWM ist der falsche Ansatz, die ändert ja das Tastverhältnis.

Einen ATtiny2313 oder notfalls nen ATmega8 kann man nehmen.

Die Eingangsfrequenz geht auf den Capture-Eingang. Im Capture-Interrupt
liest man nun den Wert aus und bildet die Differenz zum vorherigen.
Damit hat man nun die Eingangsdauer und multipliziert mit dem
Korrekturwert.

Für die Ausgabe nimmt man nen "toggle on compare"-Pin. Im
Compare-Interrupt wird nun einfach immer der Ausgabewert zum
Compare-Register addiert.
Der Ausgabewert muß die halbe Periodendauer sein (im Korrekturwert
berücksichtigen).


Soll die Rechnung in float erfolgen, muß es doch ein ATmega8 sein, da
die float Library sehr Codefressend ist (>2kB).


Peter

von Thommi (Gast)


Lesenswert?

Hallo,

Da ich etwas ähnliches brauche häng ich mich hier mal an.
Was genau muß ich unter "toggle on compare"-Pin denn verstehen, Google 
spuckt mir dazu nichts gescheites aus?

@Peter, kannst du das anfängerfreundlich formulieren g

THX Tommi

von Lehrmann M. (ubimbo)


Lesenswert?

So Sorry dass es sein muss aber wir sollten dir das sagen:

Ist dir klar, dass wenn du das im Bereich der StVO einbaust und nicht 
eintragen lässt (was du nicht durchbekommst ohne Gutachten im k€ 
Bereich) die Betriebserlaubnis erlischt. Damit auch der 
Versicherungsschutz. Wenn du jetzt gegen einen Bus rammelst und weiß 
Gott ich wer und was kaputt  verletzt  tot ist dann kannst du das 
alles privat Bezahlen. IST DIR DAS KLAR ? Ist egal ob die Tachonadel 
jetzt mit dem Unfall zu tun hatte oder auch nicht. Manipuliert ist 
manipuliert!

Achja und solltest du auf die Idee kommen (ich will dir ja nicht's 
unterstellen) das dafür zu verwenden z.B. die Drossel bei so manch neuem 
Roller / Moped auszutricksen dann würde ich das auch mal schnell wieder 
vergessen.

Bitte sei mir nicht böse aber das sollte dir jemand gesagt haben.

Gruß

von Thommi (Gast)


Lesenswert?

Hehe,

keine Panic hier gibts nicht nur 16jährige Rollerfanatiker ;-)
Nein mir gehts um ne Importsache wo von Meilen auf Kilometer umgerüstet 
werden muß, und das wird abgenommen, sowas gibts schon 100fach.

Klar kann man sowas auch fertig kaufen...ich weiß...aber dabei lern ich 
nichts.

von spess53 (Gast)


Lesenswert?

Hi

>keine Panic hier gibts nicht nur 16jährige Rollerfanatiker ;-)

Mach dir nichts draus. Er muss wohl mit erhobenen Zeigefinger geboren 
worden sein.

>Was genau muß ich unter "toggle on compare"-Pin denn verstehen,

Bei AVRs nennt sich das CTC (Clear Timer on Compare Match). Praktisch 
heisst das, ein Timer hat einen einstellbare Obergrenze. Beim Erreichen 
dieses Wertes wird ein Pin umgeschaltet und der Timer beginnt wieder von 
Null. Damit lässt sich an dem Pin eine variable Frequenz erzeugen.

MfG Spess

von Achim M. (minifloat)


Lesenswert?

Alle Leute scheinen Controller zu verbauen wie Spaxschrauben :D

Das ist mit einem &-Gatter und einem Deziamlzählebaustein doch schnell 
zusammengetüdelt. Wenn man ein Schmitt-Trigger-&-Gatter hernimmt, macht 
man damit auch gleich die Signalkonditionierung mit.
mfg mf

von Thommi (Gast)


Lesenswert?

@spess, vielen Dank für den Hinweis, ich denk das hilft mir schon 
weiter.

@Joachim, sicher ginge es auch so wie du schreibst aber ein Mega8 kostet 
so gut wie nichts und ist nur ein einziger Baustein, für den man 
notfalls nichtmal eine Platine braucht.

Auch möchte ich mich in Sachen C weiter bilden da sind die AVR eben 
erste Wahl für mich.

von spess53 (Gast)


Lesenswert?

Hi

>aber ein Mega8 kostet so gut wie nichts und ist nur ein einziger Baustein, >für 
den man notfalls nichtmal eine Platine braucht.

Bitte unterschätze den Aufwand für einen störungsfreien Betrieb des 
Atmega in automotiver Umgebung nicht.

MfG Spess

von Thommi (Gast)


Lesenswert?

Ja das war jetzt eher generell gemeint und nicht direkt auf den 
automoviten Bereich bezogen.

von Etrick (Gast)


Lesenswert?

@spess

Lass ihn doch machen. Was er wirklich mit der Schaltung manipulieren 
will weiß eh keiner.

Gruß

von Master S. (snowman)


Lesenswert?

ist S.Hintsche = Thommi ? falls ja und das hier
http://www.kleiber.li/joomla/index.php?option=com_content&view=article&id=134&Itemid=54 
etwas für dich ist, kann ich dir den schaltplan und code geben.
aber achtung: es ist nicht bord-spannung geschützt etc. und ich habe 
keine ahnung, wie gut das teil bei deinen tiefen frequenzen läuft; ist 
halt eines meiner ersten uC-projekte, veraltet und nicht weiter gepflegt 
- funktioniert aber bei meiner Kawasaki wunderbar :-) mit den 
schalterchen gibst du auf 1% genau einen faktor ein, welcher dann im 
EEProm gespeichert wird, d.h. du kannst den faktor jederzeit ändern ohne 
den PIC neu programmieren zu müssen.

von Thommi (Gast)


Lesenswert?

Nein ich bin nicht der Themenersteller, hab mich hier nur reingehangen 
weil Google mich her führte ;-)

Deine Schaltung kommt der Sache verdammt nahe, einzig das ich eine feste 
Umrechnug Meilen>Kilometer/h benutzen will, dazu evtl. Reifengröße 
kompensieren aber das kann man ja in einem Faktor machen.

Leider hab ich jetzt von PIC´s wirklich keine Ahnung und benutze 
natürlich auch ein Pollinboard zum beschreiben der AVR´s, somit stünde 
neue Hardware ins Haus.

Muß ich mir überlegen ob sich das lohnt...

Zum Thema CTC hab ich jetzt Stunden gegoogelt und auch viel gefunden, 
dazu das Datenblatt Tiny13 aber so recht weiß ich noch nicht wies geht 
g bin eben doch auch nach 2 Jahren noch Leihe.
Zur Zeit komm ich auch an meine Hardware nicht ran und mein Oszi muß 
auch erstmal repariert werden...dauert also alles und viel testen kann 
ich so leider nicht.

So long Thommi

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.