Dienstag, 7. Juni 2016

Nachdem die ursprüngliche Tastaturvariante seit zwei Jahren fehlerfrei im Einsatz ist, wurde die Schaltung auch in einer kleineren Version mit dem ATTINY 10 aufgebaut.
Diese muss erst mittels eines Magneten aktiviert werden.
Bei meinem Platinenlayout passte der Reset-Pin als Ausgang am besten.
Da eine Umprogrammierung ohnehin nicht vorgesehen ist, habe ich den auch genommen.


Das ginge auch noch kleiner, zumal man als Hallsensor auch ein Modell kleinerer Bauart wählen könnte. (z.B.: TLV4906K) 

Wenn man sich Mühe gibt, verschwindet die Schaltung - zumindest bei meinem Tastaturmodell - nach dem Zusammenbau komplett unter dem Tastaturcontroller.

Mein Tiny10-Programmieradapter erfordert zwar etwas Geschick beim Positionieren des Controllers, hat sich aber für meine Kleinmengen bewährt und noch keinen Ausschuss produziert.




Mittwoch, 29. Oktober 2014

Lösung 1

Sie bauen sich den auf der Internetseite http://macetech.com/blog/?q=node/46 vorgestellten USB-Tastatur-Stick mit dem Atmel-Microcontroller Tiny45-20 oder Tiny85-20 nach und programmieren statt der Taste Caps Lock (0x39) die Taste Scroll Lock (0x47) und geben ein festes Zeitintervall vor. Den Quellcode finden Sie auf der verlinkten Seite.
Bei mir drückt das Gerät alle paar Minuten doppelt die Scroll Lock Taste und der Bildschirmschoner ist Geschichte. Dies hat übrigens keinen Einfluss auf die sonstige Nutzung des Rechners.
Gleichzeitig habe ich programmiert, dass Caps Lock immer aus und Num Lock immer an ist. Diese Tasten drücke ich höchstens irrtümlich und zumindest bei Caps Lock passiert mir das häufig. Man merkt es immer erst, wenn das Passwort nicht akzeptiert wird oder man bereits viel falschen Text getippt hat. Diese Zusatzfunktion ist wohl mit Apple-Geräten nicht kompatibel.
Testen konnte ich meine Sticks allerdings nur an PCs und Notebooks mit dem Betriebssystem Windows.
Schaltplan für den Stick. Die beiden Z-Dioden fehlen im Projekt der verlinkten Seite.

Meine ersten beiden Hardwareversionen. (Das kann ja noch besser werden.)
Nachdem ich seit Jahren keinen Lötkolben mehr genutzt habe, war dies übrigens mein erster Kontakt mit der Programmierung von Mikrocontrollern. Das hat mir Spaß gemacht und kaum zwei Wochen nach der Idee zur Adaption des Sticks war mein erster Prototyp funktionsbereit. Zum Programmieren habe ich die Software Atmel Studio 6.2 in Verbindung mit dem  ATeVal Evaluationsboard (http://ateval.eHaJo.de) genutzt. Dieses Board ist sehr praktisch, weil man den Chip zum Programmieren einfach in eine Fassung stecken kann. Inzwischen weiß ich aber auch, wie man ein ISP-Kabel nutzt.


Screenshot aus Atmel Studio mit den Fuse-Einstellungen im Auslieferungszustand des Mikrocontrollers
Die richtigen Einstellungen der Fuses für den Stick.

Lösung 2

Sie bauen einen elektronischen "Zeitschalter" direkt in die Tastatur ein. Dies ist allerdings mit einem höheren Aufwand verbunden als der Nachbau des Sticks, bietet aber die gleiche Funktionalität und ist garantiert virenfrei. Die Schaltung wertet hierfür die Caps Lock LED und die Num Lock LED aus. Das kann man natürlich auch weglassen, wenn es nur um den Bildschirmschoner geht.


Schaltplan für die Tastaturvariante
Um die Tasten abzugreifen habe ich fertig gekaufte 1mm breite Kupferfolie verwendet. Mit Hilfe eines Computerausdruckes wurde diese richtig positioniert und in Laminierfolie eingelegt. Die obere der beiden Folien habe ich zudem dort gelocht, wo später die Kabel angelötet werden.
Hier sind die Kupferfolien bereits fertig einlaminiert und es passt schon ganz gut auf die richtigen Originalkontakte.
Die Programmierung des Controllers gestaltet sich nicht sehr professionell aber das geht schon mal so. Da meine Tastatur in der Höhe wenig Platz ließ, wurden die Bauelemente in SO- bzw. SMD-Bauweise gewählt.

Die fertige Platine beim Funktionstest. Diese ist übrigens erst meine zweite selbst belichtete Platine. Früher habe ich die Leiterbahnen vor dem Ätzen mit dem Pinsel aufgemalt.


der fertige Einbau

 Quellcode


#define F_CPU 1000000UL     /* 1MHz */
#include <avr/io.h>
#include <util/delay.h>
#include <stdint.h>
#define SCROLL (1<<PB0)
#define CAPS (1<<PB1)
#define NUM (1<<PB2)
#define CAPS_IN (1<<PB4)
#define NUM_IN (1<<PB3)
void long_delay(uint16_t ms)
{
    for(; ms>0; ms--)
    _delay_ms(1);
}
int main(void)
{
    DDRB |= SCROLL | CAPS | NUM;   // PB0, PB1 und PB2 als Ausgang
    DDRB &= ~ NUM_IN | CAPS_IN ;   // PB3 und PB4 als Eingänge
    PORTB |= ( NUM_IN | CAPS_IN ); // Pullups bei der Optokoppler-Variante einschalten
    PORTB &= ~ SCROLL ; // Loslassen
    PORTB &= ~ CAPS ;   // Loslassen
    PORTB &= ~ NUM ;    // Loslassen
    unsigned int tastdauer=50;   // Dauer, wie lange eine Taste gedrückt wird in Millisekunden.
    unsigned int leuchtdauer=10; // Dauer, wie lange die Scroll Lock LED aufleuchtet in Millisekunden.
    unsigned long x=0;           // Variable zum Hochzählen
    unsigned long intervall=240; // Zeitspanne bis zum Drücken der Scroll Taste in Sekunden.
    intervall*=1000;
    while(1)
    {
        long_delay(1);
        x++;
        // Falls an, Caps Lock ausschalten.
        if ( !(PINB & CAPS_IN) )
        {
            PORTB |= CAPS ;   // Drücken
            long_delay(tastdauer);
            PORTB &= ~ CAPS ; // Loslassen
        }

        // Falls aus, Num Lock einschalten.
        if ( PINB & NUM_IN )
        {
            PORTB |= NUM ;    // Drücken
            long_delay(tastdauer);
            PORTB &= ~ NUM ;  // Loslassen
        }

        //Regelmäßig die Scroll Lock Taste doppelt drücken
        if(x==intervall)
        {
            x=0;
            PORTB |= SCROLL ;   // An
            long_delay(tastdauer);
            PORTB &= ~ SCROLL ; // Aus
            long_delay(tastdauer);
            long_delay(leuchtdauer);
            PORTB |= SCROLL ;   // An
            long_delay(tastdauer);
            PORTB &= ~ SCROLL ; // Aus
        }
    }
    return 0;
}

Lösung 3

Wenn Sie über eine optische Maus verfügen, können Sie es mit einem Analogwecker mit Sekundenzeiger versuchen. Legen Sie die Maus in Pausen dann einfach auf das Ziffernblatt.

Lösung 4

Sie legen die Maus auf eine Ablage, die regelmäßig von einem Vibromotor gerüttelt wird. Das sollte dann auch mit einer alten Kugelmaus funktionieren aber wer hat so was schon noch.

Oder man baut den Vibomotor direkt in die Maus ein.
Ich habe meine Schaltung mit drei (Magnet-) Hallsensoren ausgestattet. Dadurch ist der Umbau äußerlich nicht sichtbar. Mit einem Magnet kann die Vibrationsfunktion an- und ausgeschaltet und die Intervalldauer im Minutentakt erhöht oder vermindert werden.

Die genutzte Maus ist eine Ergomaus, die es derzeit bei Amazon von verschiedenen Anbietern gibt. Sie ist mit zwei Metallplatten ausgestattet, zwischen die man den Motor hervorragend anschrauben kann.

Da der Motor für 3 Volt ausgelegt ist, wurde die Diode zum Senken der Spannung eingebaut. Wegen der Hallsensoren muss diese aber bei mindestens 3,7 Volt liegen. Oder man hätte die Sensoren vor der Diode anschließen müssen.

Schaltplan


Platine


spätere Position der Platine


Motor und Einbauposition


Weitere Lösungen

Was haben Sie für Ideen?