Hallo Forum,
ich möchte zur Bewegungserkennung einen Inkrementalgeber aus einer Maus
verwenden. Da das Gerät batteriebetrieben sein soll, versetze ich den
Tiny in den Sleep-Mode und lasse ihn durch den Interrupt am
Inkrementalgeber erwachen. Das Problem ist die Led im Inkrementalgeber,
die ständig 18 mA zieht. Die würde ich gerne über einen Pin am Tiny
ausschalten und erst wieder bei Bedarf einschalten, habe hier aber das
typische Henne-Ei-Problem,
ohne Led kein Interrupt... ich habe einfach keine Idee, wie ich das
lösen könnte.
bisheriger Code:
1
#include<avr/io.h>
2
#include<avr/interrupt.h>
3
#include<avr/sleep.h>
4
#define F_CPU 800000UL
5
#include<util/delay.h>
6
7
unsignedcharlevel_old=0;
8
unsignedcharlevel_new=0;
9
unsignedcharcounter=0;
10
11
voidbeep(void){//Piezo-Element ansteuern
12
13
inti=0;
14
for(i=1;i<50;i++){
15
16
PORTB|=(1<<PB1);// setze PB1 high
17
PORTB&=~(1<<PB2);// setze PB2 low
18
_delay_us(190);
19
PORTB&=~(1<<PB1);// setze PB1 low
20
PORTB|=(1<<PB2);// setze PB2 high
21
_delay_us(190);
22
23
}
24
}
25
26
intmain(void){
27
28
DDRB|=((1<<PB1)|(1<<PB2));//PB1 und PB2 Ausgang Piezo-Element
Andreas Fiedler schrieb:> ich habe einfach keine Idee, wie ich das> lösen könnte.
Nö, wie auch? Geht nun mal nicht. Du könntest die LED takten, aber
dadurch erzeugst du auch ohne Radbewegung eine Flanke. Das einzige was
dir bleibt, ist, eine low current LED zu versuchen und das
Umgebungslicht völlig auszuschalten.
Ich versuche die Bewegung einer Schnur mit Hilfe einer Rolle und dem
besagten Inkrementalgeber zu erkennen. Gibt es so etwas evtl. auch als
mechanische Variante, um die LED einsparen zu können und den
Flankenwechsel auszuwerten? Es darf nur nicht zu viel Kraft kosten um
die Mechanik zu bewegen.
Kennt jemand vielleicht was in der Richtung?
Evtl Magnetisch über Hallswitches?
Oder einen Singleturn/Multiturn-Magnetsensor?
Bei Singleturn musst du dann immer nur so oft einschalten das du bei
maximaler Verfahrgeschwindigkeit mindestens eine Umdrehung mitbekommt...
Die LEDs kann man schon Takten. Die Abfrage direkt über die
Interruptsist so oder so nicht gut für Incrementalgeber. Da ist Polling
mit einer nicht zu hohen Geschwindigkeit schon in Ordnung: also etwa
alle 500 µs die LEDs einschalten, nach vielleicht 20 µs wieder
auschalten und dann sehen was am Pin ankommt. Bei der Auswertung muss
man ggf. sehen das die schnell genug wird - die Reaktion auf Licht an
ist ja zum Glück die schnellere. Ggf. braucht man den Komparator Eingang
für etwas mehr Empfindlichkeit.
Die maximale Geschwindigkeit ist dann halt begrenzt, auf z.B. 1000
Schritte je Sekunde.
Andreas Fiedler schrieb:> Hallsensor ist eine gute Idee, manchmal hat man einfach eine Blockade im> Hirn......>> Danke für den Tip!
Allerdings benötigt auch ein Hallsensor einen Querstrom, damit er
funktioniert. Mit ein bisschen Glück findest du aber welche, die mit
deutlich weniger als 18mA auskommen. Alte mechanische Mäuse hatten auch
mal mechanische Encoder, die sich leicht drehen, und es könnte dir auch
gelingen, aus einem normalen Drehgeber die Rastung zu entfernen.
Hab mir gerade mal das Datenblatt vom TLE4905 G (Siemens)
Unipolar-Hall-Switch angesehen, dort steht Output leakage current 10uA
bei 18 Volt Versorgung, das klingt doch schon recht gut, ich hoffe ich
hab das richtig interpretiert. Ich werde die Schaltung mal aufbauen und
messen.
Vielleicht findet sich in meiner Ersatzteilkiste auch noch eine alte
Maus, mit mechanischem Geber, die ich evtl. ausschlachten kann.
Die Auswertegeschwindigkeit muss gar nicht so hoch sein, es muss nur
erkannt werden, ob sich die Schnur bewegt, die Richtung und
Geschwindigkeit sind nicht so wichtig.
Danke für die guten Anregungen!
Andreas Fiedler schrieb:> dort steht Output leakage current 10uA> bei 18 Volt Versorgung, das klingt doch schon recht gut,
Für dich ist allerdings 'Supply Current' interessanter, das sind typ.
3mA beim TLE4905, max. 8mA.
Es sollte auch LEDs geben, die für die Inkrementalgebervariante taugen,
und mit erheblich weniger als 18 mA auskommen.
Hier geht es ja nicht um Raumbeleuchtung, sondern nur um zwei banale
Lichtschranken.
Oh, das klingt schon wieder nicht so gut. Ich bin mit den Begriffen im
Datenblatt nicht so bewandert, bin nicht vom Fach.
Supply Current ist sozusagen der Strom, der immer fließt, sobald eine
Spannung anliegt?
Andreas Fiedler schrieb:> ich habe einfach keine Idee, wie ich das> lösen könnte.
Mein Gott: Genauso wie die Maus-Hersteller natürlich, deren Produkte
müssen ja auch sparsam mit den Batterien umgehen.
War wohl zu naheliegend...
Kurzfassung: Du brauchst eine zweite WakeUp-Quelle, irgendwas
timerartiges...
Die
c-hater schrieb:> Mein Gott: Genauso wie die Maus-Hersteller natürlich..
die haben aber den Vorteil, dass jemand auf die Taste drückt, sobald er
weitermachen will, genau der fehlt mir!
Matthias Sch. schrieb:> Rufus Τ. Firefly schrieb:>> Welches Datenblatt?>> Das DB des TLE4905,
Ah. Ich hatte befürchtet, daß es noch um die LED aus der
Mäuselichtschranke ginge.
Andreas Fiedler schrieb:> die haben aber den Vorteil, dass jemand auf die Taste drückt, sobald er> weitermachen will, genau der fehlt mir!
Den nutzen sie aber erst bei langen Zeiten der Inaktivität, vorher
machen sie noch was anderes...
Und genau das ist auch alles, was du tun kannst. Eben weil dir das
Knöpfchen fehlt...
Andreas Fiedler schrieb:> c-hater schrieb:>> Und genau das ist auch alles, was du tun kannst...>> verrätst du mir die Lösung?
Das tat ich bereits im ersten Posting...
Wie man das dann nutzt, kannt du dir an einer Maus anschauen. Hebe sie
einfach vom Mauspad hoch und beobachte, was die LED tut.
Er kann ja die LED ausschalten. Muss aber mindestens in einem Raster
Wiedereinschalten, das er bei der schnellsten Bewegung keine Impulse
verliert.
Den Sprung durch das einschalten muss er halt ignorieren.
Bei einer Maus ist es auch egal wenn man beim Wiedereinschalten erst mal
1000 Impulse verliert.
Dass das passiert merkt man auch ab und zu, wenn man die Maus los
schiebt und der Zeiger kurz hakelt.
Keine Ahnung ob das für seine Anwendung reicht. Das muss er selbst
entscheiden.
Ich habe eine Maus mit mechanischem Geber gefunden, das würde ich gerne
mal testen.
Ist ein pull-down am Pin des AVR strommäßig günstiger oder ein pull-up?
wie waers denn mit nem billigen beschleunigungssensor?
http://www.analog.com/media/en/technical-documentation/data-sheets/ADXL345.pdf
das feine, das ding kann mit interrupt auf aktivitaet/inaktivitaet
reagieren und hat nen verbrauch von nur 23uA, der durch standby etc
auchnoch ordentlich gesenkt werden kann. musst dir quasi nurnoch
gedanken ueber den mechanischen aufbau machen...
Andreas Fiedler schrieb:> Ich habe eine Maus mit mechanischem Geber gefunden, das würde ich gerne> mal testen.
Wie oft und wie viel wird denn das Teil bewegt? Da sollte man den
Verschleiß im Auge behalten!
> Ist ein pull-down am Pin des AVR strommäßig günstiger oder ein pull-up?
der Strom ist der gleiche, egal ob Pullup oder Pulldown - das Problem
ist eher das in der Ruhestellung mit großer Warscheinlichkeit wenigstens
einer der beiden Schalter geschlossen ist und somit über den Pullup/down
immer Strom fließt. Also so hochohmig wie möglich machen.
Sascha
Randa L. schrieb:> wie waers denn mit nem billigen beschleunigungssensor?
Gute Idee, das Datenblatt muss ich aber erstmal verdauen, wie gesagt,
ich bin ein elektronischer Laie.
Amateur schrieb:> Schau Dir mal:> STEC12E05 von "R" an.
wie sieht es mit der "Schwergängigkeit" des Teils aus? Allzuviel Kraft
habe ich nicht zur Verfügung, da die Welle nur von einer lose
aufgelegten Schnur bewegt wird.
Peter II schrieb:> warum eigentlich kein reed-kontakt und ein kleines Magnet.>> Braucht 0mA und kann zuverlässig den Tiny aufwecken.
hier braucht man doch aber auch eine Pull-up/down, oder liege ich da
falsch?
Ist meine Rechnung korrekt, dass bei 5 V Betriebsspannung und 10 k
Pull-up/down ca. 0,5 mA Strom fließen?
Andreas Fiedler schrieb:> Peter II schrieb:>> warum eigentlich kein reed-kontakt und ein kleines Magnet.>> Braucht 0mA und kann zuverlässig den Tiny aufwecken.> hier braucht man doch aber auch eine Pull-up/down, oder liege ich da> falsch?
ja den brauchst du, Strom fließt aber nur wenn er Magnet gerade am
Kontakt ist.
> Ist meine Rechnung korrekt, dass bei 5 V Betriebsspannung und 10 k> Pull-up/down ca. 0,5 mA Strom fließen?
Ja, du kannst den Pullup aber auch größer machen - es sei denn du willst
zwischen Sensor und μC noch eine größere Entfernung mit Kabel
überbrücken.
Oder wie in meinem Bild mit 2 Reedkontakten die bei 0° und 180°
positioniert werden müssten.
Der eine lädt den C und erzeugt einen pos. Impuls, der zweite entlädt
ihn wieder. Im Ruhezustand kann kein Strom fließen.
Sascha
Sascha Weber schrieb:> Oder wie in meinem Bild mit 2 Reedkontakten die bei 0° und 180°> positioniert werden müssten.> Der eine lädt den C und erzeugt einen pos. Impuls, der zweite entlädt> ihn wieder. Im Ruhezustand kann kein Strom fließen.
Ich glaube, das gefällt mir sehr gut, das kann ich auch fachlich noch
nachvollziehen und basteln.
> es sei denn du willst> zwischen Sensor und μC noch eine größere Entfernung mit Kabel> überbrücken.
Nein, Sensor und µC sitzen im selben Gehäuse nebeneinander, kein langer
Weg. Wie wäre denn der größtmögliche Wert des Widerstandes und welche
Kapazität sollte der Kondensator haben? Der Schaltvorgang sollte max
20-30 mal pro Sekunde erfolgen.
Danke Andreas
Hallo,
die Werte würde ich jetzt einfach mal durch probieren ermitteln und mit
100nF und 10k anfangen. Bei meiner Schaltung oben sollte allerdings noch
eine Diode am μC Eingang rein (K an den Eingang) sonst hast du dort beim
entladen des C eine negative Spannung. Ein kleiner R von 100Ohm in Reihe
zum unteren REED-Kontakt sollte zur Begrenzung des Entladestroms noch
mit rein.
30Hz sollten mit einem REED-Kontakt gerade noch gehen.
Sascha
@Sascha
Danke für die ausführlichen Informationen, ich werde das so testen
und an alle vielen Dank für die Geduld und die Vorschläge zur Lösung
meines Problems.
Andreas