Drehimpulsgeber und 4046

Hi :)

Ich möchte einen Drehimpulsgeber an einen ATmega8 anschliessen, will aber nicht alles per Software erledigen - mir stehen in meinem Projekt nicht mehr so viele freie Pins zur Verfügung. Mir ist beim Studium der diversen Datenblätter und Infos im Inet die Idee gekommen, die Channels A und B der 2-Bit-Varianten den beiden Phasenkomparatoren im 4046 als Up/Down und CE (bzw. Clock oder INT) zu erzeugen. Ich habe mir zwar auch schon

formatting link
angeschaut und die Lösung mit einem EXOR des Typs 74xx86 in Betracht gezogen, aber irgendwie finde ich das mit einem 4046 sinnvoller. Der Phasenkomparator I würde den CE-Impuls erzeugen, der zweite dann die Drehrichtung signalisieren. Ist das überhaupt sinnvoll?

Gruß Udo

Reply to
Udo Neist
Loading thread data ...

Udo Neist schrieb:

Das wird nix rechtes, siehe dse-FAQ F.29.

Gruß Dieter

Reply to
Dieter Wiedmann

Mit nem 4046 wär mir das nicht geheuer.

Egal wie, Du brauchst immer 2 Eingänge, also das sollte für den uC egal sein.

Viele Wege führen nach Rom. Den ATmega8 kenne ich nicht. Keine Ahnung, was der als HW Zähler und flankengetriggerte Inputs und IR so bietet.

HW: Zählimpuls auf Counter, Richtung auch, am einfachsten. Aber ich glaube kaum, dass der uC einen up/dn counter hat.

HW & SW: Zählimpuls auf Counter, Richtung per SW und umsteuern des Counters...

SW: A/B auf flankengesteuerte IR, am besten jeweils auf beide Flanken

Falls die Frequenz zu hoch für uC/SW wird, dann musst Du halt noch einen externen up/dn counter vorsetzen und dessen up/dn carry auf 2 Eingänge geben. Die bits des Zählers musst Du dann aber noch über zusätzliche (bei knappe) Eingänge einlesen.

Oder die ganze Zählerei extern aufbauen und dann die Zählerstände seriell einlesen. Da brauchste mindesten zwei I/O Clock/Daten, also auch nix an pins gespart, es sei denn, Du hast eh einen seriellen BUS nach draussen.

Ansonsten achte auf eine vernüftige Störunterdrückung.

Saludos Wolfgang

--
Meine 7 Sinne:
Unsinn, Schwachsinn, Blödsinn, Wahnsinn, Stumpfsinn, Irrsinn, Lötzinn.
Wolfgang Allinger   Paraguay             reply Adresse gesetzt !
ca. 15h00..21h00 MEZ  SKYPE:wolfgang.allinger
Reply to
Wolfgang Allinger

Nur wenn er auch die Richtung erkennen möchte.

--
Frank Buss, fb@frank-buss.de
http://www.frank-buss.de, http://www.it4-systems.de
Reply to
Frank Buss

Ich will möglichst per Interrupt einfach nur die Drehrichtung auswerten. Mit dem Interrupt kann ich dann entscheiden, welche Quelle es war: falls durch ein internen, dann brauche ich den Pin nicht auszuwerten, ansonsten einfach L/H und ich sehe ob Up/Down. Der Eingang kann auch durch einen PCF8574 realisiert werden, der dann Eingangssignale per Interrupt an den ATmega8 signalisiert.

Per Software müsste ich eine periodische Abfrage mitsamt Auswertung einbauen. Warum Ressourchen verschwenden, wenn man manches auch extern erledigen kann?

Gruß Udo

Reply to
Udo Neist

Nimm' einfach einen ATmega168. Der hat dafür praktische Pinchange- Interrupts. Einfach beide Signale 'nen PCINT auslösen lassen, dann die Auswertungs-Tabelle aus der FAQ drauf anwenden.

Beim ATmega8 könnte man das sonst nur per Polling im Timer-Interrupt machen. Muss auch nicht schlecht sein - du musst nur vorher festlegen, wie hoch die maximale Drehzahl ist und dann mindestens doppelt so schnell samplen. Auch bei 1kHz sollte das den Controller kaum auslasten.

Weil man dann den falschen Microcontroller gewählt hat. Man sucht sich immer den aus, der mit dem wenigsten Gemüse drumrum auskommt.

--
"Zuse, Zuse" sprach die Tante, als das Rechenzimmer brannte
www.microsoft-hellhounds.de, www.bredobrothers.de
Reply to
Thomas Kindler

Moin Udo,

Udo Neist schrieb:

Also wenn Du eine Erkennung der Drehrichtung haben willst, benötigst Du doch so oder so zwei Pins... Softwaremässig ist das kein großer Akt, in BASCOM

formatting link
gibt es dazu sogar eine fertige und prima funktionierende Routine. Hier ein Beispiel:

Der Wert von E wird bei Rechtsdrehung um 2 je Raste erniedrigt, bei Linksdrehung um 2 erhöht, das alles im Bereich von 0 - 255. Gegen Prellen wird eine Pause von 1ms eingefügt.

### Subroutinen ###

Rechts: If E < 1 Then E = 0 Else E = E - 2 If E < 0 Then E = 0 End If End If Waitms 1 Return

Links: If E > 254 Then E = 255 Else E = E + 2 If E > 255 Then E = 255 End If End If Waitms 1 Return

### Im Hauptprogramm ###

Dim E As Integer Dim Enc As Byte

Enc = Encoder(pind.5 , Pind.6 , Links , Rechts , 0)

Dabei ist der Decoder an PinD5 und PinD6 angeschlossen (Mittelpin des Encoders gegen Masse, Pins D5 und D6 als Eingänge und Pullups im AVR aktiviert). Fertig ist die Laube...

HTH & Grüße

Kai

Reply to
Kai Ebersbach

Ich hab einen Encoder an einem Mega8 und taste den im Timerinterupt mit 35kHz ab. Nebenbei laeuft da noch ein Kaskadenregler fuer den Motor an dem der Encoder haengt, eine RS232 zum Hostrechner und eine Ausgabe auf ein LCD.

Und du machst dir ernsthaft Sorgen Resourcen zu verschwenden wenn du einen Encoder abfragt den du von Hand drehst?

Die IRQ-Methode hat auch keinen guten Ruf weil zu unzuverlaessig. Ueberabtastung ist besser weil dann falsche Flanken beim naechsten Zyklus richtig gestellt werden. Auch wenn das bei deiner Anwendung vermutlich egal ist wenn er mal falsch zaehlt.

Eine externe Hardware wuerde ich nur verwenden wenn die Impulse so haeufig kommen das der Controller da nicht mehr mithalten kann. Und wenn es dich gluecklich macht ein externes IC zu verwenden, dann programmier die Abfrage doch in einen Tiny15 oder R8C und frag dort die Position ueber I2C ab. :-) Es gibt speziell fuer diese Anwendung auch mal externe ICs zu Auswertung von HP. Ich weiss aber nicht ob man die noch bekommt.

Olaf

Reply to
Olaf Kaluza

Enventuell wird das Bedienteil um den Up/Down-Teil noch geändert, wenn es das Projekt erfordert. Für den Bedienkomfort möchte ich halt gerne einen Drehimpulsgeber einsetzen.

Klar, hätte ich machen können. In Sachen ATmega bin ich Einsteiger, Assembler kenne ich noch aus 6502-Zeiten. Ich hab mich für die ersten Tests halt für den ATmega8 entschieden und mein Testaufbau steht bereits (LCD, Analog-Eingänge, PWM, TWI wird gerade getestet, RS232 steht noch aus). Wenn ich das alles gebacken bekomme, dann schaue ich mir mal die anderen ATmega an.

Gruß Udo

Reply to
Udo Neist

Ich hab mir mein Projekt nochmal vorgeknüpft und gesehen, das ich mit ein oder zwei Änderungen am Layout es schaffe die Funktionen am Mega8 noch unterzubringen. Dann wäre aber auch alles untergebracht und den Rest läuft dann über TWI. ISP brauche ich derzeit noch für die Entwicklung. Wäre ja später für SPI frei, wenn ich mal soweit bin.

Das wäre ja Luxus ;-)

Ich hab Projekte gesehen, die eine alte PS/2-Maus schlachten und deren Encoder nutzen. Das hat mich auf die Idee mit dem 4046 gebracht. Eine Idee war ja auch, den Up/Down-Eingang zusammen mit Clock aus dem Encoder über ein PCF8574 einzubinden, da der bei Änderungen ja ein Interrupt erzeugen kann. Sind halt auch Spielereien, um den Mega8 kennen zu lernen.

Gruß Udo

Reply to
Udo Neist

Es ist kein Problem die Leitungen der Programmierschnittstelle auch fuer andere Sachen zu verwenden. Du musst nur darauf achten das die anderen Sachen beim programmieren nicht stoeren. Ich hab da z.B normalweise andere SPI-Sachen dran und achte darauf das der CS der anderen Sachen ueber einen Widerstand deaktiviert ist wenn der Prozessor im Programmiermodus ist.

Das ist auch ein Microcontroller. Meist PIC oder was von Zilog.

Die Abfrage im IRQ ist Unsinn. Was machst du wenn dein Drehgeber mal genau auf einer Kante steht und wild IRQs absondert? Steht dann dein Controller weil er nicht mehr nachkommt? Oder laeuft dann dein Bedieninterface ueber?

Wenn ich so drueber nachdenke, es koennte sein das man es bei Maeusen wirklich mit IRQ macht um Strom zu sparen da man ja an der RS232 nuckelt. Aber ich hab auch schon Maeuse gesehen wo der Mauszeige einfach von selber aus dem Bildschirm gelaufen ist weil die genau das typische Problem zeigten.

Olaf

Reply to
Olaf Kaluza

Dann mach mal eine neue Maus auf. Da sitzt als optoempfänger ein kleiner Dreibeiner der mit einer bidirektionalen Leitung die Daten an den controller sendet. Das Protokoll das ich mal gesehen hab sah so aus:

keine Bewegung: Controller zzzHLzzzzHLzzzzzzzzzzzzzzzzzzzzzzzz Empfänger zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

linktakt : Controller zzzHLzzzzHLzzzzzzzzzzzzzzzzzzzzzzzz Empfänger zzzzzHHHHHzzzzzzzzzzzzzzzzzzzzzzzzz

rechtstakt : Controller zzzHLzzzzHLzzzzzzzzzzzzzzzzzzzzzzzzHL Empfänger zzzzzzzzzzzHHHHHHHHHHHHHHHHHHHHHHHHHz

Ein Datenblatt für sowas hab ich aber noch nicht gesehen.

--
MFG Gernot
Reply to
Gernot Fink

Schrieb der OP doch, warum sollte er sonst das Geraffel mit Phasenvergleich etc. wollen...

Saludos Wolfgang

--
Meine 7 Sinne:
Unsinn, Schwachsinn, Blödsinn, Wahnsinn, Stumpfsinn, Irrsinn, Lötzinn.
Wolfgang Allinger   Paraguay             reply Adresse gesetzt !
ca. 15h00..21h00 MEZ  SKYPE:wolfgang.allinger
Reply to
Wolfgang Allinger

Udo Neist schrieb:

Der ATmega168 ist komplett Pin-kompatibel zum ATmega8, hat mehr Speicher und kann bis zu 20 MHz. Die meisten Programme benötigen nur minimale Änderungen um dann auch auf dem ATmega168 lauffähig zu sein. Du mußt also fast nur einen anderen Chip in den Sockel drücken.

Cheers, Jürgen

--
GPG key: 
http://pgp.mit.edu:11371/pks/lookup?search=J%FCrgen+Appel&op=get
Reply to
Jürgen Appel

Ich gugg mir den mal genauer an :)

Gruß Udo

Reply to
Udo Neist

Eine anloge PLL zur Drehgeberauswertung????

Wenn du damit einem Timer-interrupt meinst, ist das OK ;-)

So wirds richtig gemacht. Alles andere ist der =FCbliche Bastelmurks, der schon tausendfach diskutiert wurde.

formatting link

Weil dein Dekansatz falsch ist? Siehe Link oben.

MFG Falk

Reply to
falk.brunner

Etwas OT hier, aber ich hatte gerade das Problem und nach intensiver Web Suche fand ich keine guten SPICE Models, nur Leute mit dem gleichen Problem: Gibt es irgendwo ein gescheites SPICE Model vom 74HC4046 oder notfalls CD4046 von einem Hersteller? Moeglichst eines, dass den VCO beinhaltet? Das VCO Model in der Yahoo Group ist nicht so ganz der Hit.

--
Gruesse, Joerg

http://www.analogconsultants.com/

"gmail" domain blocked because of excessive spam.
Use another domain or send PM.
Reply to
Joerg

Hallo Udo,

Udo Neist schrieb:

also wenn Du extern mit 1 Bit die Drehrichtung an einer Doppellichtschranke wie bei einer Maus haben willst, so habe ich aus einem alten Übungsprojekt eine Schaltung, die in 1 GAL 16V8 passen müßte. Das in dem Link oben sieht mir nach dem Problem aus. Mit dem CD4046 sieht es mir auch nicht geheuer aus, habe mir den dortigen Phasendiskriminator aber nicht so genau in dieser Hinsicht angesehen. Aber bei Interesse kann ich die Schaltung mal posten.

mfg. Winfried

Reply to
Winfried Salomon

Hallo Joerg,

Joerg schrieb:

ich habe vor einiger Zeit mit Pspice ein Modell mit CD4046 erstellt, um eine komplette PLL damit zu simulieren. Der Phasendiskriminator ist der frequenzsensitive mit den 4 FFs. Der Knackpunkt ist hier der VCO, dafür habe ich vor langer Zeit mal ein Subcircuit entwickelt auf der Ebene der Knotenliste.

So gut wird das Modell nicht sein, ich habe nur ein Datenbuch von RCA von ´76 zur Verfügung gehabt, das mir ausführlich genug erschien, die charge pump zu modellieren. Es ging nur um einen groben funktionalen Test, wie die PLL einrastet und welche Störungen sie produziert.

mfg. Winfried

Reply to
Winfried Salomon

So aehnlich wollte ich das auch simulieren, muss aber phase-lock (Flankenrastung?) machen. Inzwischen ist es aber ziemlich gegessen, Design steht bis auf einige Stecker und so. Mich hatte es etwas gewundert, dass die Hersteller keine SPICE-Models dafuer hatten. Koennte aber sein, weil der Chip aus der Zeit der Lochkarten stammt, wo man an den IBM- und Juki-Klappermaxen Schlange stehen musste. Kennst Du wahrscheinlich auch noch.

--
Gruesse, Joerg

http://www.analogconsultants.com/

"gmail" domain blocked because of excessive spam.
Use another domain or send PM.
Reply to
Joerg

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.