Hallo,
vielleicht kann mir hier jmd. helfen. Ich habe hier einen Zähler von LSI/CSI (den gibts auch von USdigital) mit der Bezeichnung LS7166. Ziel ist es, die A/B Signale eines Incrementalwinkelgebers zu erfassen und zu Zählen, d.h. im Quadratur Modus. Die Ansteuerung des ICs soll über die DIO Schnittstelle einer Keithley DAS1601 erfolgen. Dazu habe ich ein kleines C-Programm geschrieben, welches eine Initalisierung vornimmt und anschließend die Zählerwerte auslesen soll. Ich glaube die Initialisierung funktioniert soweit, da wenn ich das OutputStatusRegister auslese auch sinnvolle Werte erhalte. Nur das Auslesen des Zählerstandes funktioniert nicht wirklich. Wenn ich das Preset Register in den Counter lade, und anschließend den Counter ins Output-Latch schiebe, erhalte ich beim Auslesen auch die entsprechenden Bytes, aber nicht in der richtigen Reihenfolge. Meine Frage ist daher, ob jmd. schon einmal Erfahrungen mit diesem Chip gemacht hat und eventl. ein Codeschnippsel zum Auslesen zur Verfügung hat, bzw. ob sich jmd. so gut mit dem Teil auskennt und mir sagen kann, wo mein Fehler liegt.
Die Belegung von Port C ist folgende: P0: CSq; P1: WRq; P2: RDq; P3: C/Dq Port A ist 1:1 mit den Anschlüssen D0..D7 verkabelt.
Ich verwende folgende Routine zum Auslesen:
WORD WINAPI __declspec(dllexport) GetCounter(float *Winkel, DWORD
*cntr_value, unsigned char *bytes) { unsigned char read[3]={0}; // buffer for cntr-value int i=0; _outp(Control,0x82); // define port A and port C for output _outp(PortC,0x0f); /*--- transfer CNTR to OL ---*/ _outp(PortC,0x0e); // CSq = 0 _outp(PortA,0x03); // control word for tranfer CNTR to OL -> write to MCR _outp(PortC,0x0c); // CSq,WRq = 0 Sleep(1); _outp(PortC,0x0f); // CSq, RDq, WRq, C = 1 /*---------------------------*/_outp(Control,0x92); // define port A as input and port C for output _outp(PortC,0x0f); /*--- Read OL ---*/ _outp(PortC,0x06); // CSq, Dq = 0 for(i=0; i