Fragen zum ATTiny13 --> Tachosignal

OP #4273713
Lesenswert?

Hallo in die Runde,

ich habe es mal vor ein paar Jahren geschafft, mit Bascom + Mega8 mir 
einen SPI-Sniffer zu basteln.
(sogar nur mit dem internen Oszillator ;-)

Da das aber schon so lange her ist und ich fast wieder als DAU da stehe, 
habe ich ein paar Grundsatzfragen....

Ich wollte mit einem ATTiny13 im Prinzip ein Fahrradtacho-Signal in der 
Geschwindigkeit reduzieren. (nicht einfach teilen)

28 Zoll Tacho <--> 20 Zoll Reifen
Verhältnis Takt bzw. Time IN:OUT 10:7

Hier die Eckdaten:
(grobe Werte, können später noch abweichen)

Puls-Pause Verhältnis --> 200:1
(Reedkontakt mit 1x Magnet)


Frequenz
  min  max
Input  0,5  10  Hz
Output  0,35  7  Hz

Zeiten
Puls  100  2000  ms
Pause  0,5  10  ms


Da der ATTiny13 nur einen Timer hat, kann ich Hardware PWM vergessen.

Ich dachte mir, den Timer mit <1ms laufen zu lassen und über einen 
externen Interrupt (steigende Flanke) einen Zähler(IN) zu starten, der 
die Timer-Überläufe mit zählt.
Beim nächsten Interrupt (fallende Flanke) wird der Zähler gestoppt und 
der Wert zur weiteren Verarbeitung zwischengespeichert.
Jetzt mit dem nächsten Interrupt (steigende Flanke) wieder Zähler(IN) 
bei Null starten.

So dachte ich mir die Erfassung vom Eingangssignal.

Ausgangssignal läuft mit einem anderen Zähler(OUT) über den gleichen 
Timer.
Max.Wert für den Zähler(OUT) wäre der wischengespeicherte Wert+43% für 
die Pulslänge.
Pulspause 0,5% der vorher durchlaufenden Pulslänge.
Max.Wert für den Zähler wird bei jeden Puls neu eingelesen.

Jetzt meine Fragen dazu:

Lässt sich das so in Bascom realisieren?

Geht das evtl. anders einfacher bzw. macht das so Sinn?

Kann ich innerhalb des Programmlaufs überhaupt das Interrupt-Register 
für steigende- / fallende Flanke umschalten?


Ich hoffe auf die eine oder andere Antwort oder einen Link, falls es das 
so schon geben sollte....DANKE


Gruß

Jens
Gast #4273961
Lesenswert?

Max D. schrieb:
> Also bei 10 Hz schläft der AVR ja ein....
> Einfach dem Timer laufen lassen und im Interrupt die Flanke lesen und
> evtl. den Ausgang umschalten....

Wie jetzt, ohne externen Interrupt und den Eingang pollen?

@ Joe F.

ich wollte es erst schreiben....aber JA, Tacho lässt sich NICHT 
umstellen (daher --> im Prinzip).


Gruß

Jens
Persönliche Seite #4274068
Lesenswert?

Jens T. schrieb:
> Fahrradtacho-Signal in der Geschwindigkeit reduzieren.

> 28 Zoll Tacho <--> 20 Zoll Reifen
> Verhältnis Takt bzw. Time IN:OUT 10:7

Jens Tester schrieb:
> aber JA, Tacho lässt sich NICHT
> umstellen (daher --> im Prinzip).

Teile und doch bitte die Marke von diesem Tacho mit
damit hier keiner auf die Idee kommt sich so ein Müll zukaufen.
Seit wann gibt so ein Schrott denn ? Schon die ersten E-Tachos
waren Flexibel zu Justieren.

Oder willst du dich vielleicht doch noch um entscheiden?

Deine Angaben + Tiny13 Wunsch hört sich nämlich eher
nach eBike Turing Chip an....
Gast #4274112
Lesenswert?

Marc D. schrieb:

> Deine Angaben + Tiny13 Wunsch hört sich nämlich eher
> nach eBike Turing Chip an....

Fast richtig, Antrieb soll in einem Liegerad verwendet werden und eine 
Anpassung auf 20" ist bei verschiedenen Antrieben nicht so ohne weiteres 
zu machen.

"eBike Tuning" wollte ich (eigentlich) nicht schreiben, ist damit zwar 
möglich aber nicht MEIN Ziel!
(auch wenn, ändert ja nichts an meinem Problem ;-)

Gruß

Jens
#4274124
Lesenswert?

Jens Tester schrieb:
> Fast richtig, Antrieb soll in einem Liegerad verwendet werden und eine
> Anpassung auf 20" ist bei verschiedenen Antrieben nicht so ohne weiteres
> zu machen.

Was? Ein Tacho, der vom Antrieb abhängt? Was ist das denn für ein 
Schrott? Ein Tacho sollte nur vom Rad abhängig sein, an dem er hängt und 
den Radumfang oder Raddurchmesser sollte man vorgeben können.
#4274265
Lesenswert?

Jens T. schrieb:
> Ich wollte mit einem ATTiny13 im Prinzip ein Fahrradtacho-Signal in der
> Geschwindigkeit reduzieren.

Jens Tester schrieb:
> @ Joe F.
>
> ich wollte es erst schreiben....aber JA, Tacho lässt sich NICHT
> umstellen (daher --> im Prinzip).

Jens Tester schrieb:
> Fast richtig, Antrieb soll in einem Liegerad verwendet werden und eine
> Anpassung auf 20" ist bei verschiedenen Antrieben nicht so ohne weiteres
> zu machen.
>
> "eBike Tuning" wollte ich (eigentlich) nicht schreiben, ist damit zwar
> möglich aber nicht MEIN Ziel!
> (auch wenn, ändert ja nichts an meinem Problem ;-)

Was denn nun?
Es macht echt keinen Spaß hier heiteres "um was geht es denn eigentlich" 
zu veranstalten.

Einen Fahrradtacho könnte man durch einfaches Weglassen von Pulsen 
"überlisten". Aber es handelt sich ja offenbar nicht um einen 
Fahrradtacho.
Trotzdem gibt es die Chance, dass auch dein Gerät durch einfaches 
Weglassen von Pulsen zufriedenstellend arbeitet.
Dies könnte man komplett ohne Mikrocontroller, durch einen einfachen 
Decade-Counter und einem Transistor realisieren.

Wo liegt denn dein Problem, einfach zu sagen, ich möchte an meinem 
E-Bike Antrieb Marke Soundso Modell Soundso, mit dem ich eh nur auf 
Privatgeländen unterwegs bin, rumbasteln.
Mit diesen Informationen wäre dir leichter zu helfen.
#4274408
Lesenswert?

Also mit 10 Hz und einem 1:200 Verhältnis hat man etwa 0,5 ms schmale 
pulse. Tastet man das mit 5 kHz ab ist man auf der sicheren Seite. Also 
timer so einstellen, dass er mit 5 kHz feuert. Dann über einen gewissen 
Zeitraum Flanken zählen und im nächsten Zeitsegment die reduzierte 
Frequenz abgeben.
Gast #4274411
Lesenswert?

@Joe F.

ich hätte auch schreiben können:

Ich habe einen Bosch Classic Pedelec Antrieb aus einem 28" Rad in einem 
20" Liegerad eingebaut.
Antrieb funktioniert und unterstützt lt. Tacho bis 25km/h.
Lt. GPS-Tacho fahre ich aber nur 18km/h.
Was kann ich jetzt machen ???

>Mit diesen Informationen wäre dir leichter zu helfen.

Da ich einen aus meiner Sicht passenden Lösungsansatz habe, hatte ich 
die dafür relevanten Eckdaten genannt !!!

Gruß

Jens
#4274850
Lesenswert?

Dadurch, dass man immer weniger sendet als empfängt könnte man sogar das 
ganze noch weiter eindampfen:
Solange kein Puls kam sendet man auch nichts.
Wenn man jetzt zwei Pulse hatte so bestimmt man die Zeit dazwischen (in 
Timerticks zählen, spart umrechnung) und gibt dann den ersten Puls auf 
den Ausgang und nach 0,7 * Zeit (evtl. mit fixedpoint-arithmetik 
optimieren) den nächsten. Dann gibt es zwei Möglichkeiten; Es gab in der 
Zwischenzeit noch einen Puls -> gut, man stellt die Zeit als neue Pause 
ein oder es gab keinen -> man wartet bis einer kommt (und noch etwas 
länger, man will ja längere Pausen).
Wenn der "Empfänger" dumm ist, dann kann die aktive Zeit in einem Puls 
immer gleichlang lassen und nur die Pausen anpassen, ansonsten muss man 
halt noch die Pausen mit strecken...
OP #4275125
Lesenswert?

Max D. schrieb:
> ....gibt dann den ersten Puls auf den Ausgang und nach 0,7 * Zeit.....den 
>nächsten.
Du meinst vermutlich 1,43 * Zeit ?

Ob das so leichter zu programmieren wäre?


>Wenn der "Empfänger" dumm ist, dann kann die aktive Zeit in einem Puls
>immer gleichlang lassen und nur die Pausen anpassen,....

So etwas ähnliches hatte ich mir auch schon überlegt, aber wenn ich 
schon die Pulslänge richtig hin bekomme, sollte eine angepasste 
Pausenzeit auch noch mit drin sein ;-)

Gruß

Jens
#4275175
Lesenswert?

Jens T. schrieb:

> So etwas ähnliches hatte ich mir auch schon überlegt, aber wenn ich
> schon die Pulslänge richtig hin bekomme, sollte eine angepasste
> Pausenzeit auch noch mit drin sein ;-)

Hast du es denn schon ausprobiert?

Ich würde fast darauf wetten, dass die Empfänger sich um die Pulszeit 
einen feuchten Kehrricht scheren. Die zählen einfach Pulse pro 
Zeiteinheit bzw. sie messen die Zeit zwischen 2 Pulsen, wobei da sehr 
wahrscheinlich noch eine Mittelwertbildung drinnen sein wird, die 
Ausreisser (falls aus irgendeinem Grund mal ein Puls fehlen sollte) 
nicht gleich ins Desaster führen. Aber mehr würde ich da als 
Arbeitshypothese nicht erwarten.

D.h. unter Umständen reicht es völlig aus, wenn du per Polling die Pulse 
erkennst, und dann einfach für 10 erkannte Pulse nur 7 weitergibst. Du 
lässt einfach zb jeden 3., 6. und 10. Puls unter den Tisch fallen.
Sowas ist schnell programmiert und ausgetestet. Wenn es nicht 
funktioniert, dann kann man immer noch etwas aufwändigeres machen. Aber 
erst mal den simplen Ansatz.
OP #4275215
Lesenswert?

@Joe F.

>Ab wann 'steht' das fahrrad, und rollt nicht mehr sehr langsam?

Unter 4km/h --> über 2s Pulslänge würde ich einfach kein Signal mehr aus 
geben.


@Karl Heinz

>Hast du es denn schon ausprobiert?

Nee, leider noch nicht....aber gute Idee, zum testen einfach jeden 3ten 
Puls unterdrücken und schauen, was passiert.

Das sollte ich die nächsten 1-2Wochen :-( hin bekommen.....

Gruß

Jens
#4275294
Lesenswert?

Jens T. schrieb:
> zum testen einfach jeden 3ten
> Puls unterdrücken und schauen, was passiert.

Ja, und wenn das funktioniert, dann in Alternativen denken.
3 von 10 Pulsen unterdrücken geht ebenfalls sehr einfach mit einem 
Decade Counter + 3 Dioden + Transistor (falls dir die 7 Magnete nicht 
gefallen, die das Ausgangssignal sehr gleichmäßig machen würden...).
Gast #4275470
Lesenswert?

Hallo,

ich hab heute vor der Arbeit mal kurz mit einem Magneten "per Hand" 
testen können:

links - l
rechts - r
pause - #

l-r-l-r-l-r-l-r-l-r- --> 15-16km/h
l-r-l-#-r-l-r-#-l-r-l-#-r-l-r- --> 10-13km/h

Werte zwischen 10-13km/h waren mehrmals für ca. 1-2s zu sehen und 
sprangen sonst zwischen 6 - 58km/h.

--> größere Schwankungen in der Pausenlänge werden anscheinend toleriert 
:-)

Daraus ergibt sich noch eine Möglichkeit:

Pulslänge aus der Wechselspannung von Nabendynamo ableiten

1. Zeit einer Halbwelle ermitteln und daraus Pulslänge errechnen
2. Puls ausgeben
3. nach Pulsende auf neue Halbwelle warten und mit 1. weiter

Vorteil:
(für mich) leichter zu programmieren
kein Reedkontakt/Magnet mehr nötig

Nachteil:
die Pulspause schwankt mit +- 1/2 der Periodendauer vom Dynamo 
(vermutlich Egal)
weiteres Kabel zum Dynamo
Schaltungsaufwand für ein passendes Signal zum AVR
evtl. Masse-/ Potentialprobleme


Gruß

Jens
Gast #4277394
Lesenswert?

@Sven,

per Hand getestet scheint es zu funktionieren :-)
(siehe weiter oben)

Guter Hinweis, so einfach "krumme" Teilungsverhältnisse erzeugen zu 
können.

Wenn ich mein altes SDK500 Board zum laufen bekommen sollte, kommt das 
mit auf meine ToDo-Liste.


Gruß

Jens
OP #4283241
Lesenswert?

Hallo,

als Dateianhang hier mein erster Versuch, ein Eingangssignal halbwegs 
unverändert einzulesen und wieder auszugeben.

Auf einem STK500-Board getestet, hat das blinken einer LED am Ausgang 
nicht wirklich viel mit den Schaltvorgängen an einen Taster zu tun. 
(ohne Entprellung) :-((

Heute ist schon etwas spät, ich schreibe morgen, wie ich mir das mit dem 
Programmablauf gedacht hatte.

Gruß

Jens
Angehängte Dateien:
Gast #4283416
Lesenswert?

Hallo,

ich habe noch mal über den Code nachgedacht...ich werde den Code noch 
mal anpassen und nur auf steigende Flanke auswerten.

Dann dürfte es vermutlich auch keine Probleme mit prellendem Taster 
geben.

Ich melde mich dann nochmal.

Gruß

Jens
Gast #4283772
Lesenswert?

Hab dasselbe gaubt um vom Ford Tachogeber auf Opel Senator digitaltacho 
zu kommen, auch mitm 2313.

Den Int/Timer für das Messen der Periodendauer verwendet, und in der 
Hauptschleife den Ausgang mit "waitms x" gesetzt, wobei X nen Wert ist 
der aus Periodendauer mal Faktor besteht.

Ca 10 Bascomzeilen, läuft 1A.
OP #4284417
Lesenswert?

Hallo,


DJShadowman schrieb:
> ....in der Hauptschleife den Ausgang mit "waitms x" gesetzt....

Ist hier für mich nicht brauchbar da "wait" die Interrupts blockiert!!!



Nach Umstellung auf steigende Flanke funktioniert es jetzt wie erwartet.

--> geänderter Code im Anhang

Ein paar Änderungen sind noch nötig, bis ich das im Pedelec testen kann.

Soweit der aktuelle Stand.....

Ich melde mich, wenn es wieder was neues gibt.

Gruß

Jens
Angehängte Dateien:
OP #4306766
Lesenswert?

Hallo,

ich musste den Code noch etwas anpassen und das Prellen vom Reedkontakt 
abfangen.

Jetzt funktioniert es wie vorgesehen, Danke an die eine oder andere 
Anregung.

Falls es jemand interessiert, die Zeit der Pulspause (Low-Signal) 
braucht nicht variabel sein, ich habe sie auf ca. 10ms fest eingestellt.


Gruß

Jens
Gast #4306978
Lesenswert?

Jens T. schrieb:
> Hallo,
>
> DJShadowman schrieb:
>> ....in der Hauptschleife den Ausgang mit "waitms x" gesetzt....
>
> Ist hier für mich nicht brauchbar da "wait" die Interrupts blockiert!!!
>

Ne wieso, wait ist auch nur ne reihe nops im generierten Code, der 
Intterupt läuft wunderbat weiter. Egal ob über Timer oder extern.

Habs ja selbst 1a am laufen bei ner Schaltung um nen Tacho für nen 6 
Zylinder an nem 4 Zylinder Motor zu betreiben.

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