Forum: Mikrocontroller und Digitale Elektronik LS7166


von Carol (Gast)


Lesenswert?

Hi,

ich habe folgendes Problem. Und zwar habe ich einen Motor mit Encoder 
(2-Kanal Winkelschrittgeber) dessen Position ich bestimmen und regeln 
möchte. Ich mache das ganze in C am Computer, dazu verwende ich eine 
Messkarte (16 Analog In, 2 Analog Out, 16Bit Digital In, 16Bit Digital 
Out). Im Programm rufe ich dann periodisch eine DLL auf, die mir dann 
die Position übergeben soll. Daraus lässt sich dann auch die 
Geschwindigkeit errechnen. Um den Encoder auszuwerten habe ich mir einen 
24-Bit Quadrature Counter LS7166 besorgt. Dieser hat aber einen Datenbus 
der gelesen UND geschrieben werden muss. Meine Messkarte hat aber 
getrennte
Digitale IO Ports, also nur lesen oder nur schreiben. Was kann ich da 
machen?

1. Gibt es eine Möglichkeit die getrennten IO Ports extern so zu 
beschalten das ich die Datenrichtung wechseln kann?

2. Ich habe auch schon mal etwas mit Microcontrollern gemacht, einen 
ATmega8 habe ich hier. Ist es damit möglich, einen Datenbus zu 
realisieren. Ich könnte mir dann den Wert seriell oder so abholen. Einen 
Uart hat der ja schon eingebaut. Wie würde die externe Beschaltung dort 
aussehen.

Schäut euch nicht vor C-Code(ein kurzes Bsp. wäre nett), nur mit der 
Beschaltung von IO Ports kenn ich mich nicht aus wenn es in zwei 
Richtungen geht.

Dankesehr

Carol

von F. K. (freddy436)


Lesenswert?

Also bei der PC IO Karte würde ich einfach zwei Ports extern zusammen 
klemmen, eventuell bei dem Ausgang noch eine Diode dazwischen klemmen 
(damit beim lesen am Ausgang keine Spannung anliegt).

Bei einem µC würde ich einfach nur das DDRX Register ändern (je nachdem 
ob gelesen oder geschrieben werden soll entsprechend auf Eingang/Ausgang 
setzen.

von Carol (Gast)


Lesenswert?

Hallo,

ich möchte das erstmal mit dem Microcontroller probieren. Der kostet nur 
1,65 €, bevor ich da etwas kaputt mache.
Ok ich mal hier ein das AVR-GCC Tutorial etwas gelesen. Da steht etwas 
von Pullup Widerständen die beim lesen benutzt werden. Brauche ich 
diese? Oder kann ich das in der Art einfach anschliessen?


Portb.0(Controller) <-->  D.0 (LS7166)
Portb.1(Controller) <-->  D.1 (LS7166)
Portb.2(Controller) <-->  D.2 (LS7166)
Portb.3(Controller) <-->  D.3 (LS7166)
Portb.4(Controller) <-->  D.4 (LS7166)
Portb.5(Controller) <-->  D.5 (LS7166)
Portb.6(Controller) <-->  D.6 (LS7166)
Portb.7(Controller) <-->  D.7 (LS7166)

<--> entspricht einer Drahtbrücke

Und dann für das lesen des LS7166 Registers:
DDRB=0x00
variable=PORTB

Und für das schreiben des LS7166 Registers:
DDRB=0xFF
PORTB=variable

Oder?

Danke














von F. K. (freddy436)


Lesenswert?

Nicht ganz, beim lesen ist der Status in PINB gespeichert, PORTB wird 
beim Schalten als Eingang dazu benutzt um die internen Pull Up 
Widerstände  zu (de-)aktivieren. Ich kenne den LS7166 nicht, es wird 
vermutlich auch ohne Pull Ups gehen, aber schaden können die auch nicht, 
manchmal kann es aber auch zu Problemen kommen. Ich würde es sowohl mit 
als auch ohne den internen Pull Ups versuchen. Eventuell steht dazu ja 
auch was im Datenblatt.

Siehe auch:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_Ports

von Carol (Gast)


Lesenswert?

Hallo,

leider steht dazu nichts im Datenblatt, dort wird der Bus als grosser 
Pfeil mit zwei Richtungen gezeichnet. Aber das mit PINB ist ein guter 
Tip. Ich probier das mal so. Danke.

Gruss

Carol

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.