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
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.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.