Hallo, ich möchte in einer optischen Maus erkennen, wenn sie bewegt wird - dazu möchte ich mir die LED zu Nutze machen, die vom IC der Maus gesteuert ihre Helligkeit bei Bewegungen erhöht. Die Versorgungsspannung der USB-Maus beträgt 5V, im Ruhezustand messe ich am LED-Ausgang des Controllers 1,55 V gegenüber GND, stupse ich die Maus an, so fällt die Spannung auf ca. 0,47V gegenüber GND (der Pin ist an der Kathode der LED angeschlossen). Wie kann ich diese Information am einfachsten wieder in saubere Signalpegel für einen ATmega wandeln? Meine ersten Versuche mit einem Transistor (BC337) verliefen mäßig, aber vielleicht habe ich da auch einfach nur einen simplen Denk- oder Handwerksfehler drin. Stromverstärkung brauche ich nicht, ich muss ja eigentlich nur die Spannung wandeln (0,47V -> 0V, 1,55V -> 5V). Welche Schaltung ist da am sinnvollsten?
Wie wäre es mit dem Analogeingang des uC? Diese Eingänge sind hochohmig, somit dürfte die Schaltung durch den ADC nicht beeinflusst werden. Wichtig: die ADC-Referenzmasse muss auch angeschlossen sein, damit ein Potentialunterschied gemessen werden kann.
Stefan Tomanek schrieb: > Meine ersten Versuche mit einem Transistor (BC337) verliefen mäßig, aber > vielleicht habe ich da auch einfach nur einen simplen Denk- oder > Handwerksfehler drin. Hast du. Was du da an Spannungen gemessen hast, ist nicht wirklich vorhanden. Es sind nur die Mittelwerte einer PWM, also einer Rechteckspannung. Die "gemessenen" Mittelwerte hat dein Multimeter gebildet. Wer mißt, mißt Mist. Und wer mit einem ungeeigneten Meßgerät mißt, mißt kompletten Mist. Mit einem Oszi wäre das nicht passiert... Im einfachsten Fall brauchst du also bezüglich der Ankopplung eines AVR überhaupt nichts besonderes zu unternehmen, sondern einfach nur einen Portpin anschließen, idealerweise den ICP-Pin. Dann kannst du zur Vermessung des Tastverhältnisses der Rechteckspannung nämlich die ICP-Funktionalität des Timers verwenden. In diesem Tastverhältnis stecken die von dir "gemessenen" Spannungen. Der Zusammenhang müßte ungefähr dieser sein: Zeit des High-Pegels des Rechtecks 5V * -------------------------------------- Gesamtzeit einer Periode des Rechtecks Tatsächlich wird das nicht ganz passen, weil da die Flußspannung der LED in diesem Ausdruck nicht berücksichtigt ist. Diese könnte allerdings, wenn hoch genug, dazu führen, daß der AVR über einen normalen Portpin überhaupt kein Rechteck sieht, sondern konstant Low. Wenn das der Fall sein sollte, dann mußt du statt eines normalen Portpin eben einen Pin des Analog-Komparators verwenden. Der AC läßt sich intern dann ebenfalls als Eingang für die ICP-Funktionalität des Timers verwenden. Die Referenzspannung des AC muß auf einen geeigneten Wert gebracht werden. Ungefähr auf (5V-Flußspannung der LED)/2. Entweder ist eine der verfügbaren internen Referenzspannungen dafür geeignet oder du muß den zweiten Pin des AC über einen Spannungsteiler auf eine geeignete Referenzspannung ziehen und diese verwenden.
Danke für die Tipps, PWM (oder zumindest eine gepulste Ansteuerung) hatte ich schon vermutet - ohne Oszilloskop war das leider nur mäßig überprüfbar. Glücklicherweise war die Frequenz so gering, dass ein angeklemmter Arduino noch problemlos die verschiedenen Werte anzeigen konnte. Ich habe dann das Signal einfach in einen Digital-Pin meines µCs gekippt und prüfe in einer Schleife, ob in einem definierten Zeitraum "High"-Pegel reinkommen oder nicht. Manchmal ist die Lösung einfacher als zunächst vermutet :-)
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.