Chipkarten programmierung?
-
Hi Leute
Bin neu hier, ich weiß nicht ob meine Frage in diese Kategorie gehört. Ich hoffe ich mache mir hier nicht direkt Feinde :).
Meine Frage:Ich muss ein Kartensystem programmieren. Als Karte habe ich mir I²C-Bus E²Prom-Speicherkarten gedacht mit dem Chipsatz für 256Byte ST14C02/X24026. Gibs bei Reichelt. Jetzt weiß ich nicht welches Programmiergerät ich nehmen soll und wie ich es am besten unter Windows programmieren kann. C/C++ Erfahrung habe ich und das Datenblatt von dem Chipsatz habe ich runtergeladen und komme auch mit zurecht. d.h. ich weiß welche Strings bzw. Bits ich setzten muss um die Karte zu beschreiben/auszulesen.
Ich würde mir am liebsten meinen eigenen Treiber/Schnittstelle basteln ohne dabei auf mit gelieferte Software zurückzugreifen zu müssen.
Ich hoffe sehr ihr könnt mir hier weiterhelfen.
Ich danke auch schon mal im vorraus
Gruß Soulfly
-
Tach Leute
so habe jetzt eine Möglichkeit gefunden. Ich bastel selber ein I²C-Bus Kartensystem - und muss diese dann nur mit dem Parallelport ansteuern. Das ist nun das nächste Problem - ich muss mit W2k/WXP den Parallelport ansteuern.
Wenn jemand da eine einfache Möglichkeit weiß dieses zu programmieren egal wie ob WinApi/MFC, sollte sie mir bitte sagen.Danke im vorraus!!
Gruß Soulfly
-
benutz mal die forensuche "parallelport" mit winapi und du wirst fündig
-
ich würde eher mal google nach CT-API fragen

-
Evtl. hilft dir das aus den FAQ: http://www.c-plusplus.net/forum/viewtopic.php?t=39403

-
Hi Leute erst mal danke für die Tipps
@CMatt habe mal deine Anweisung ausprobiert:
Läuft so:
C/C++ Code:
hCom = CreateFile( "LPT1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);WriteFile(hCom, lpByte, len, &dwBytesWritten, NULL);
ReadFile(hCom, lpByte, len, &dwBytesRecive, NULL);Leider stürzten das bei W2k ab und zwar bei WriteFile.
Habe auch in einem anderen Beitrag gelesen das ich nicht der einzige bin der da Probleme hat. Hat den einer noch einen anderen Tipp.Achja ich war sehr vorsichtig mit den Leuchtdioden habe 1K Wdst genommen.

Aber sie brennen aähmm leuchten.
Gruß Soulfly
-
Deine LEDs leuchten, obwohl er bei WriteFile abstürztz

Wie sieht denn das abstürzen ganau aus? Speicher-Zugriffsverletzung? Läuft es unter anderen Betriebssystemen ohne Absturz?
Verweist lpByte auch auf gültigen Speicher - sieht nämlich komisch aus
und hast du len richtig initialisiert?
-
Naja die LED´s leuchten immer - auch wenn ich den Computer neustarte - anders BSY habe ich jetzt leider im Moment nicht zum testen.
Beim debuggen bleibt das Prog bei WriteFile stehen und verharrt dort.Hier mein Quellcode der beim Buttonclick ausgeführt wird:
unsigned char lpByte = 0x4f; HANDLE hCom = CreateFile( "LPT1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL); WriteFile(hCom, &lpByte, 1, NULL, NULL); CloseHandle(hCom);Ich habe auch schon versucht als 4ten Parameter
unsigned char Data = 0xff; WriteFile(hCom, &lpByte, 1, Data, NULL);will aber nicht - es entsteht der gleiche Fehler.
Gruß Soulfly
-
Als 4. Parameter wird ein Zeiger auf ein DWORD erwartet, also versuch es mal so:
unsigned char cData = 0x4f; DWORD dwNumberOfBytesWritten = 0; HANDLE hCom = CreateFile( "LPT1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL); WriteFile(hCom, &cData, 1, &dwNumberOfBytesWritten, NULL);
-
Arrrgghh
sch.... spiegelverkehrt beschriftung
!!!
habe mir mal so ein tool zum testen runtergeladen und ich hatte die testDioden(3 Stück, hatte nicht mehr low current dioden) an die falschen Pins gelötet.
Jetzt gehts
Zumindest bei dem tool.
Mit der Programmierung bin ich noch nicht weiter.Gruß Soulfly
-
Bekommst du mit meinem Code immer noch einen Speicherzugriffs-Verletzungs-Fehler?
-
Ne leider nicht

Habe aber ne Lösung mit einer Hilfe von inpout32.dll gefunden.
Achja die Klasse an sich habe ich selber so geschrieben, sind noch nicht ganz fertig - mit dem abspeichern der letzten gesendeten/empfangen daten.
aber sonst läufst supi.ich kann ja mal meine Lösung hier präsentieren.
lpt_klassen_h#ifndef lpt_klassen_h #define lpt_klassen_h class lpt { private: int port; short last_rec; // zuletzt empfangenen Daten short last_sen; // zuletzt gesendete Daten public: lpt(); //LPT1 wird gesetzt NICHT empfehlenswert lpt(int pport); void set(int pport){port=pport;} bool send(short data); bool rec(short &data); }; #endiflpt_klassen.c:
// #include "stdafx.h" // vorkompilierte Header # include "lpt_klassen.h" # include <conio.h> # include <windows.h> typedef VOID (CALLBACK* LPFNDLLFUNC1)(INT,INT); typedef UINT (CALLBACK* LPFNDLLFUNC2)(INT); LPFNDLLFUNC1 oup32; // Function pointer LPFNDLLFUNC2 inp32; // Function pointer lpt::lpt() //LPT1 wird gesetzt NICHT empfehlenswert { port=0x378; last_rec=0; last_sen=0; } lpt::lpt(int pport) { port=pport; last_rec=0; last_sen=0; } // ---------- Zum daten senden ---------------- bool lpt::send(short data) { HINSTANCE hLib; hLib = LoadLibrary("inpout32.dll"); if (hLib == NULL) return FALSE; oup32 = (LPFNDLLFUNC1) GetProcAddress(hLib, "Out32"); if (oup32 == NULL) return FALSE; oup32(port,data); FreeLibrary(hLib); return TRUE; } // ---------- Zum daten empfangen ---------------- bool lpt::rec(short &data) { HINSTANCE hLib; hLib = LoadLibrary("inpout32.dll"); if (hLib == NULL) return FALSE; inp32 = (LPFNDLLFUNC2) GetProcAddress(hLib, "Inp32"); if (inp32 == NULL) return FALSE; data = (inp32)(port); FreeLibrary(hLib); return TRUE; }Läuft unter W2K und soll auch unter WXP laufen mit der .dll datei
wenn einer das komplette Projekt von mir haben will muss er bescheid sagen.Gruß Soulfly
-
Soulfly_2111 schrieb:
flenders schrieb:
Bekommst du mit meinem Code immer noch einen Speicherzugriffs-Verletzungs-Fehler?
Ne leider nicht

Wieso leider? Wenn es keinen Fehler mehr gibt ist doch alles ok

-
*hust* warum wollen die leute immer alles noch mal machen was schon x leute vor ihnen gemacht haben!? *hust*
Klick michFür diese card-terminals gibts ne fertige api. So nen kartenleser bekommst bei conrad fast nachgeschmissen... so nen terminal selbst zu bauen und per LPT nen I²C-Bus zu simulieren wäre irgendwie überflüssig... aber wenn du es unbedingt selbst bauen willst, nimm die steuerleitungen der COM. Du brauchst ja nicht mehr als 2 Outputs und 1 input, reicht also völlig aus und die Ansteuerung ist über EscapeCommFunction und GetCommModemStatus sehr einfach..
-
@flenders:
ne meinte leider funktioniert es nicht.
@CMatt:
Danke für den Hinweis, habs mir auch mal angeschaut. Aber irgendwie will ich das selber bauen und programmiern
weil, ich wollte schon immmer wissen wie ich lpt port ansteuere
!
Mein Schlappi hat leider kein COM Port :(.Ich bastel mir jetzt nen I²C Kartenlesegerät mit 2 WDST nur über den LPT Port und dann kommen noch 2 LED (grün,rot) als Status anzeige - natürlich brauchen die auch nen R. Selbst die Einspeisung von Vcc geht über den LPT da die Teile unter 10mA und nur im Schreib/Lesezyklus brauchen. Habe mich da auch schon informiert
. Ist nicht so schwierig - ich hoffe das klappt auch.
Muss ich mir das I²C-Protokoll nur als Softwarelösung basteln - sollte aber auch gehen.Danke an alle für die Tips
Gruß Soulfly