LS7166 Counter auslesen

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

Reply to
flar
Loading thread data ...

flar schrieb:

Moin!

Ein Mitstudent hatte auch Probleme mit dem Teil. Seine Lösung war eine

*funktionierende* Chip-Revision zu bestellen. Es gibt also wohl Revisionen, die nicht das tun, was das Datenblatt beschreibt!

Ich habe hier zwar noch 4 Stück von der vermutlich fehlerhaften Revision liegen (in irgendeiner dunklen Ecke :-)), aber für den Einsatz waren die Dinger dann doch zu blöd in der Kommunikation und der Preis ist auch eher abschreckend, so daß ich sie nie aus der Verpackung genommen habe.

Ciao Dschen

--
Dschen Reinecke

=== der mit dem Namen aus China ===

http://WWW.DSCHEN.DE mailto:usenet@dschen.de
Reply to
Dschen Reinecke

Danke erstmal für die Antwort,

das ist natürlich eher bescheiden, da kauft man sich so ein tolles Stück, was genau das machen soll, was man braucht, und dann gibt es davon auch nicht funktionstüchtige Exemplare. Hat jmd. eine Idee, woran man erkennt, ob man eine funktionierende Reversion hat? Hab meine von Farnell bezogen und es ist ein Logo drauf, welches ein durchgestrichenes "Pb" darstellt, nehme an für RoSH konform. Vielleicht ist auch die Initialisierung fehlerhaft.. ich weiß es langsam nicht mehr...

Viele Grüße Ralf

Dschen Reinecke schrieb:

Reply to
flar

flar schrieb:

Moin Ralf!

Ich hab mir erlaubt dein Tofu aufzuräumen. Den Lesern im Usenet und Leuten, die Dir antworten machst Du es leichter, wenn Du, wie alle anderen auch, inline zitierst.

Vermutlich am Herstellungsdatum.

In der oberen Zeile steht die Chipbezeichnung, unten zweistellig das Jahr und zweistellig die Herstellungswoche.

Vielleicht aber auch an den zusätzlichen Buchstaben und dem Aufdruck auf der Unterseite.

Dann sind Deine deutlich jünger als meine. Die sind von 2002, KW 32

Für so viel Energie, die Du mittlerweile da rein gesteckt hast (und den Chippreis) könntest Du einen einfachen ATMega oder PIC (oder irgendeinen anderen µC) die Zählung übernehmen lassen. Zum Quadraturzählen gibt es hier in der Gruppe genug Threads. Wichtig ist nur: keine IRQ triggern mit einem Flankenwechsel, sondern die Pegel regelmäßig (schneller als die maximale Inkrement-Änderung) überprüfen und die Zustandsänderungen auswerten. Es gibt dabei +, - und illegale Übergänge (dann hast Du eine Pegeländerung nicht mitbekommen).

Irgendwer hatte dazu mal so einen Zweizeiler gepostet, der auf einer zweidimensionalen Tabelle basierte.

Ciao Dschen

--
Dschen Reinecke

=== der mit dem Namen aus China ===

http://WWW.DSCHEN.DE mailto:usenet@dschen.de
Reply to
Dschen Reinecke

Hallo Ralf.

Vielleicht hilft Dir dieses kleine Pascal-Programm weiter:

QR =3D $C3; OCCR =3D $80; ICR =3D $49; ReadData =3D $03; MasterReset =3D $20;

var dataport : byte at p1;

ControlData : boolean at p3.2; WriteLine : boolean at p3.1; ReadLine : boolean at p3.0;

MotorCounter : array[$00..$02] of byte;

procedure SendCommandToCounter(command : byte); begin dataport :=3D command; ControlData :=3D true; ReadLine :=3D true; WriteLine :=3D false; WriteLine :=3D true; end;

procedure ReadDataFromCounter; var i : byte; begin SendCommandToCounter(ReadData); ControlData :=3D false; WriteLine :=3D true; for i :=3D 0 to 2 do begin dataport :=3D $FF; ReadLine :=3D false; MotorCounter[i] :=3D dataport; ReadLine :=3D true; end; end;

procedure Initialize; begin ControlData :=3D true; WriteLine :=3D true; ReadLine :=3D true; SendCommandToCounter(MasterReset); SendCommandToCounter(QR); SendCommandToCounter(OCCR); SendCommandToCounter(ICR); end;

Sorry, ich habe das damals nicht kommentiert, ist aber glaube ich=20 durchaus so verstaendlich.

Gruss, Karsten

Reply to
Karsten Busenbender

Dschen Reinecke schrieb:

mach ich doch glatt....

Also meine sind von 2005, Revision E ( der mittlere Buchstabe nach dem Herstellungsdatum; wer lesen kann, ist klar im Vorteil, steht nämlich im Datenblatt). Daher gehe ich davon aus, dass das die neuste Generation ist, und somit prinzipiell funktionieren sollte...

Naja, das Problem ist, ich habe keinen Programmer und auch keine Zeit mehr, noch einmal das ganze Projekt neu anzufangen. Irgendwie muss ich den Chip zum Laufen kriegen. Ich denke, dass das Problem bei dem Wechsel zwischen Input und Output Konfiguration der Ports der IO-Karte liegt. Mit dem Oszi betrachtet, erkennt man kurze Impulse, wo alle 4 Steuereingänge gleichzeitig aktiv werden. Ich werde das morgen mal ausprobieren, indem ich einen anderen Ausgabeport benutze, der nicht von dem Wechsel der Konfiguration beeinflusst wird.

Danke erstmal.. falls ich eine Lösung finde, werde ich sie posten.. falls noch jmd. eine Idee hat, hab ich dafür immer ein offenes Ohr...

MfG Ralf

Reply to
flar

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.