Stoppt die Vorratsdatenspeicherung! Jetzt klicken && handeln!Willst du auch bei der Aktion teilnehmen? Hier findest du alle relevanten Infos und Materialien:
 
Fluffy-Highlight
von Plapperkatze am 16.August 2006 um 14:23
zurück zur Kategorie "Tutorials"

Wer wie ich viel Zeit im IRC verbringt, benutzt häufig eine Highlight-Funktion. Das bedeutet, sobald jemand meinen Nickname schreibt, bekomme ich ein akustisches Signal. In diesem Tutorial werde ich euch eine etwas andere Art von Highlight vorstellen, das Fluffy-Highlight.

Fluffy ist mein "fur real friend": eine Spielzeugkatze, die mit dem Kopf wackeln und maunzen kann.



Zuerst muss das Fluffy zerlegt werden, also dem Ding vorsichtig das Fell abziehen und das Gehäuse öffnen. Ein Zahnrad fällt hierbei meistens heraus und muss später wieder an seinen Platz gebracht werden. Auf der darin befindlichen Platine ist ein Druckschalter angebracht. An dessen Pins müssen nun 2 Drähte gelötet werden, mit denen man später von aussen den Schalter überbrücken kann.

Soweit so gut, danach das Fluffy wieder zusammenbauen und testen, ob soweit noch alles funktioniert. (Wackelt das Fluffy ewig mit seinem Kopf, sitzt wahrscheinlich das Zahnrad am Kontaktgeber nicht richtig.)

Nun benötigt man eine kleine Schaltung, aufgebaut aus einem NPN Transistor (jeder Standardtyp ist ok, ich habe einen BC546A benutzt) und einem 4,7kOhm Widerstand (hier habe ich einen 6,6kOhm verwendet, war nix anderes greifbar). Weiterhin benötigt man einen Sub-D 25 Pol Stecker, also etwas, was in den Druckerport/Parallelport passt. Und Kabelmaterial.



Parallelports gehen sehr schnell vor die Hunde, wenn man falsch anschliesst! also seid hier bitte vorsichtig, lieber 3x geguckt..


Nun fehlt noch die Software.

Mit win32 kann man den Parallelport (LPT) nicht mehr ohne weiteres direkt ansteuern, deshalb ist hier etwas mehr Aufwand nötig.

Ich habe mir die "Inpout32.dll" von http://www.logix4u.net/inpout32.htm besorgt.

Nun öffnet euren bevorzugten editor und schreibt:
//------------------------------------------
// fluffy code for bcc32
// direct parallel I/O using Inpout32.dll
// done by plapperkatz 16.8.2006
//------------------------------------------
#include <windows.h>

int main()
{

   typedef UINT (CALLBACK* LPFNDLLFUNC1)(INT,INT);
   typedef UINT (CALLBACK* LPFNDLLFUNC2)(INT); // fuer Input, hier nicht verwendet
   HINSTANCE hDLL;
   LPFNDLLFUNC1 Output;
   LPFNDLLFUNC2 Input; // fuer Input, hier nicht verwendet
   INT Addr=0x378;
   INT Value;
   hDLL = LoadLibrary("Inpout32");
   if (hDLL != NULL)
   {
     Output = (LPFNDLLFUNC1)GetProcAddress(hDLL,"Out32");
     Input = (LPFNDLLFUNC2)GetProcAddress(hDLL,"Inp32"); // fuer Input, hier nicht verwendet
     if (!Output || !Input)
     {
        exit(1);  
     }
   }

   // der 3tte eingangs-pin soll geschaltet werden, das ist pin 4 am Sub D Stecker

   // Wert 4 an LPT senden, damit ist pin 4 auf HIGH
   Value = 4;
   Output(Addr, Value);

   // warten (denn das fluffy braucht bisschen zeit)
   Sleep(100);

   // Wert 0 an LPT senden, damit sind alle pins auf LOW
   Value = 0;
   Output(Addr, Value);

   // fertig, fluffy maunzt
   return 0;
}

Wenn ihr diesen Code compiliert und ausführt, sollte das Fluffy maunzen (getestet unter Windows XP + bcc32). Sleep(100) ist nötig, damit Fluffy das Signal detektiert. Hier taugen auch andere Werte.

Nun fehlt noch das IRC-Script, das in meinem Gamers-IRC unter Remote-Scripts eingetragen wird:
on 1:TEXT:*katze*:#:/run "J:\fluffy.exe"

J:\fluffy.exe ist der Pfad zum Executable. katze ist das Highlight, das heisst, wenn dieses Wort gefunden wird, wird die fluffy.exe ausgeführt.

Fertig ist das etwas nervenaufreibende Highlight! :)
Wenn jemand Fragen hat, einfach diesen Eintrag kommentieren.

gruesse, eure plapperkatz

zurück zur Kategorie "Tutorials"
[12 Kommentare]

poli (Gast) schrieb am 21. September 2006 um 20:40
kannst du bitte ne skizze machen wie dus genau anschließt???

und noch was soll ich immer wenn ich was schalten will so machen wie dus gezeigt hast?? also über ein transistor??

plapperkatz schrieb am 1. Oktober 2006 um 11:51
wovon brauchst du eine skizze? vom inneren des fluffies? habe davon leider keine bilder gemacht, und habe keine lust, es nochmal aufzuschrauben. aber eine einfache skizze mach ich später mal, ok? der rest sollte ja klar sein anhand des schaltplans.

ideal wäre, die schaltkreise mit einem IC (74HC244) zu entkoppeln, denke ich. die pins dürfen jedenfalls nur minimal belastet werden (I<5mA würde ich schätzen). ob das die "beste lösung" ist, mit dem transistor, kann ich nicht mit sicherheit sagen.

gruesse von der katze

ponc (Gast) schrieb am 2. Oktober 2006 um 20:32
ok dake erstmla!!! nur noch ne kleine frage warum haust du 5 massen ran?? und nicht nur eine?

plapperkatz schrieb am 3. Oktober 2006 um 11:16
ich dachte es schadet nicht, es sollte aber egal sein, da die letzten 8 pins alle auf masse führen. ich habe es aber in vielen schaltungen so gesehen.

folgende seite fand ich ganz interessant:
http://www.doc.ic.ac.uk/~ih/doc/par/

gruesse von der katz

manu (Gast) schrieb am 19. Juni 2007 um 17:23
wie kann ich jetzt nur einen bestimmten pin auf low setzen? also z.b. nur 4??? geht das?

plapperkatz schrieb am 20. Juni 2007 um 15:14
man würde den zustand des ports lesen mit

unsigned char i=Input(Addr);

dann wird das 3te bit auf low gesetzt, die anderen bleiben wie sie sind:

i&=~(1<<3);

dann mit Output(Addr,i); den neuen wert in den port zurückschreiben.

zur erklärung:

der 4te pin am stecker ist ja der 3tte datenpin (gut sichtbar in der zeichnung auf http://www.doc.ic.ac.uk/~ih/doc/par/ ), deshalb soll das 3tte bit gelöscht werden (1<<3). mit &= werden die bits &-verknüpft.

beispiel:
10110110 wird &-verknüpft mit
00000100 ergibt dann
------------------------
00000100

alle bits werden also low, ausser das 3tte. du wolltest aber genau das gegenteil, alle sollen bleiben wie sie sind, ausser das 3tte bit. deshalb die tilde (~) im obigen beispiel, die (1<<3) invertiert: aus 00000100 (dezimal 4) wird 11111011 (dezimal 251).

10110110 wird &-verknüpft mit
11111011 ergibt dann
------------------------
10110010

ich glaube, ich werde das tutorial demnächst mal überarbeiten. frag ruhig, wenn etwas unklar ist.

gruesse

manu (Gast) schrieb am 20. Juni 2007 um 16:25
hi... sry habs net ganz so mit den bit reihen (oder wie man das nennt) wie bekomme ich die andresse der jeweiligen pins raus... und muss ich das zum auschalten damm immer mit 11111011  verknüpfen?

sven (Gast) schrieb am 21. Juni 2007 um 12:17
hi,... hab das gleiche problem/frage wie manu!
ich brauch schnelle antwort!
muss das am montag nächste woche abgeben!

PwNeR (Gast) schrieb am 7. August 2007 um 15:42
hey plapperkatz,
ich hatte die selbe idee, ich würde sie nur gerne für icq und msn umsetzten... hab jedoch nicht so ne ahnung von programmieren, kenn mich nur mit qbasic aus ... damit komme ich bei dem problem aber denk ich mal nicht weiter -.-
wäre nett wenn du mich mal in icq (340-583-375) adden würdest :)
mfg PwNeR

stef (Gast) schrieb am 12. Februar 2008 um 17:48
ich hab noch ne frage ...
was für addressen hab die einzelene pins ...
also ich mein im stiel von 0101010 das ich die verknüpfen kann

mööp (Gast) schrieb am 8. März 2008 um 18:13
hi,..
bei mir ist so das die ersten 3 leds immer leuchten (bei 2 rechnern getestet) ....
wie kann ich das abstellen?
programm fehler hab ich net ... schaltung stimmt aucgh ...
die 3 leds leuchten schon beim hochfahren :(

hat jmd. ne idee? ist relativ wichtig bitte antworten

plapperkatz schrieb am 15. Mai 2008 um 21:10
hallo,
ich habe eine weile nicht reingeguckt, aber scheinbar ist das fluffy sehr gefragt, bzw. der parallelport und wie man ihn ansteuert. deshalb hier noch einmal eine zusammenfassung der wichtigsten punkte ohne anspruch auf vollständigkeit oder richtigkeit.

I. Anschlussbelegung
seht euch unbedingt das bild auf http://www.doc.ic.ac.uk/~ih/doc/par/ an, das erklärt schon vieles. pin 2 ist der erste datenpin, der sich mit der inpout32.dll unter xp ansteuern lässt (wie man die 4 control-pins ansteuert weiss ich selbst nicht, also lassen wir die mal beiseite). dass man die pins von der falschen seite aus zählt ist auch eine beliebte fehlerquelle.

die pins 2-9 am stecker sind also die datenleitungen 1-8.

II.Ansteuerung
PIN DATENLEITUNG BINÄRWERT HEXWERT DEZIMALWERT
2   1            00000001  0x01      1
3   2            00000010  0x02      2
4   3            00000100  0x04      4
5   4            00001000  0x08      8
6   5            00010000  0x10     16
7   6            00100000  0x20     32
8   7            01000000  0x40     64
9   8            10000000  0x80    128

um also die pins 3,4 und 5 einzuschalten, die anderen aus, muss man dezimal 2~~5>5~~8=14 an dem parallelport ausgeben. binär wäre das dann 00001110, in hexa ist das 0xE.
binärwerte kann man nicht direkt in das register schreiben, zumindest mein compiler kann das nicht! Output(0x378,0001110); wird sich also nicht wie gewünscht verhalten, sondern wird als dezimal 1110 interpretiert!


@mööp:
ich weiss nicht so recht, wo man den fehler vermuten soll. es gibt eine bios-einstellung für bidirektionalen modus, aber das dürfte damit nichts zu tun haben. leuchten die leds auch nach einem Output(0x378,0); (vorausgesetzt dein LPT-Port liegt an dieser Addresse)? während dem bootvorgang "flattern" die pins bei mir, das ist aber wohl von mainboard zu mainboard verschieden. wenn man den port auf 0 setzt, sollten aber alle leds aus sein, sonst stimmt etwas mit dem parallelport nicht, oder das programm tut nicht wie gewünscht. ich würde übrigens dazu raten, low-current leds zu verwenden (mit stromaufnahme unter 10mA), auch wenn hier http://www.o-bizz.de/qbtuts/parport/index.htm steht, dass die datenleitungen kurzschlussfest sein sollten.

gruesse von der katze

Name


Kommentar




Bitte abtippen


 
(C) 2006-20012 Plapperkatze - 215314 Besucher seit dem 23.01.2012 Login