Forum: Mikrocontroller und Digitale Elektronik Inkrementalgeber Maus an ATTiny24 - Strom sparen


von Andreas F. (fied)


Lesenswert?

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
unsigned char level_old=0;
8
unsigned char level_new=0;
9
unsigned char counter=0;
10
11
void beep(void){        //Piezo-Element ansteuern
12
  
13
  int i = 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
int main(void){
27
  
28
  DDRB |= ((1<<PB1)|(1<<PB2));//PB1 und PB2 Ausgang Piezo-Element
29
  ACSR|=(1<<ACD);              //Komperator aus
30
  sei();                      //Interrupt freigeben
31
32
  while(1){
33
 
34
  GIMSK |= (1 << PCIE0);               //Interupt freigeben   
35
  PCMSK0 |= (1 << PCINT5);            //Maske PCINT5 freigeben
36
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);//Sleep Mode setzen
37
  sleep_mode();                       //Schlafen
38
  GIMSK &= ~(1 << PCIE1);              //Interrupt aus
39
40
    if (!(PINA & (1<<PA5))){          //PINA5 Inkrementalgeber einlesen
41
      level_new = 0;                   //low    
42
    } 
43
    else
44
    { 
45
      level_new=1;                    //high
46
    }
47
    if(level_new!=level_old){    //vergleiche alte und neuen Status
48
      counter++;                //Zähler erhöhen
49
        if(counter==25){        //Zähler 25 ?
50
          beep();  
51
          counter=0;            //Zähler zurücksetzen
52
        }
53
    }
54
  level_old=level_new;          //alter Status wird neuer Status
55
  }
56
}
57
58
ISR (PCINT0_vect){                    //Interrupt-Routine
59
60
}

von Jürgen (Gast)


Lesenswert?

Wenn du dein Konzept nicht änderst, wird das wohl nichts.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Andreas F. (fied)


Lesenswert?

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?

von Frank (Gast)


Lesenswert?

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...

von Andreas F. (fied)


Lesenswert?

Hallsensor ist eine gute Idee, manchmal hat man einfach eine Blockade im 
Hirn......

Danke für den Tip!

von Lurchi (Gast)


Lesenswert?

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.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Andreas F. (fied)


Lesenswert?

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!

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Andreas F. (fied)


Lesenswert?

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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Welches Datenblatt?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Welches Datenblatt?

Das DB des TLE4905, den der TE sich, wie oben erwähnt, als Hallsensor 
rausgesucht hatte.
http://www.datasheetcatalog.com/datasheets_pdf/T/L/E/4/TLE4905.shtml

Andreas Fiedler schrieb:
> Supply Current ist sozusagen der Strom, der immer fließt, sobald eine
> Spannung anliegt?

So isses. Der Hallsensor braucht einen kontinuierlichen Querstrom, um zu 
funktionieren, wird im DB auch kurz skizziert.

von Andreas F. (fied)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Welches Datenblatt?
Das vom TLE4905 Hall-Switch, siehe zwei weiter oben

von c-hater (Gast)


Lesenswert?

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...

von Andreas F. (fied)


Lesenswert?

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!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Steffen (Gast)


Lesenswert?

und das Rad der Maus mit ner Art Nockenwelle versehen und n Taster dran?

von c-hater (Gast)


Lesenswert?

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...

von Andreas F. (fied)


Angehängte Dateien:

Lesenswert?

c-hater schrieb:
> Und genau das ist auch alles, was du tun kannst...

verrätst du mir die Lösung?

von c-hater (Gast)


Lesenswert?

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.

von Frank (Gast)


Lesenswert?

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.

von Andreas F. (fied)


Lesenswert?

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?

von Randa L. (randaley)


Lesenswert?

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...

von Amateur (Gast)


Lesenswert?

Schau Dir mal:
STEC12E05 von "R" an.
Standby Stromaufnahme: Nix +/- Pull-Up.

von Sascha W. (sascha-w)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

warum eigentlich kein reed-kontakt und ein kleines Magnet.

Braucht 0mA und kann zuverlässig den Tiny aufwecken.

von Andreas F. (fied)


Lesenswert?

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?

von Blörb (Gast)


Lesenswert?

Wie wärs den mit der Kamera aus der Maus ?
Damit liese sich auch eine Bewegung erkennen.
Kurz aufwachen, schauen ob sich was tut, Pause, weiter..

von Sascha W. (sascha-w)


Angehängte Dateien:

Lesenswert?

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

von Andreas F. (fied)


Lesenswert?

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

: Bearbeitet durch User
von Sascha W. (sascha-w)


Lesenswert?

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

von Andreas F. (fied)


Lesenswert?

@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

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.