mikrocontroller.net

Forum: FPGA, VHDL & Co. JK-FlipFlop in GAL


Autor: Heiko Prinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

Ich möchte mit einem GAL einen Auf-/Abwärtszähler programmieren.
Diesen habe ich schon IC (74er) aufgebaut.
Nur fehlt mir jetzt der Ansatz, wie ich die JK-FF in dem GAL 
unterbringe, mittels der Ersatzschaltung???

Außerdem möchte ich den Zähler über einen Dreh-Encoder steuern.
Also CW-Drehung = Vorwärts, CCW = Rückwärts.

Laut Datenblatt (Panasonic EVEP) wären ja für die Richtung die Ausgänge 
A und B ausschlaggebend.

also wenn auf 00 10 folgt, dann vorwärts, wenn auf 00 01 folgt, dann 
rückwärts, hab ich das richtig interpretiert?

Außerdem brauche ich ja noch einen Takt, da nehme ich denke ich mal den 
Drehimpuls oder?
Also sobald ein Wechsel bei AB auftaucht = 1 Takt???


Vielen dank für die Hilfe

: Verschoben durch Moderator
Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe Drehgeber.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was willst du denn mit den alten Stromfressern?

>Nur fehlt mir jetzt der Ansatz, wie ich die JK-FF in dem GAL
>unterbringe, mittels der Ersatzschaltung???

GALs haben D-Flipflops in den OLMC. Mehr brauchst du auch nicht.
Deine Schaltung ergibt sich über die Syntax deines GAL Compilers.
Sprich: du gibts die Logikgleichungen ein. Für FF gibt es dann
eine entsprechende Syntax.

>Außerdem brauche ich ja noch einen Takt, da nehme ich denke ich mal den
>Drehimpuls oder?

GALs haben einen Takteingang für die FF in den OLMC. Da legst du
deinen Takt an. Wenn der schön langsam ist kannst du damit gleich
auch noch entprellen;) Der Takt kommt NICHT vom Drehgeber. Zur Not
tut es bei dir wohl ein NE555.

Autor: Heiko Prinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal danke für die Antworten.

>> Was will ich mit den alten Stromfressern?

Ganz einfach, lernen. Sicherlich werde ich für spätere Projekte andere 
Bausteine einsatzen, aber ich möchte das hier mit dem GAL verwirklichen.

>> FF in GAL

Das mit den D-FlipFlops ist gut, das hab ich garnicht bedacht, dass man 
die ja mitbenutzen kann. Somit wäre dieses Kapitel erledigt.

>> Takt

Also nochmal zum Verständnis: Ich möchte über einen HANDBETRIEBENEN 
Drehencoder den Zähler bedienen. Je nach Drehrichtung auf oder abwärts 
zählen lassen.

Somit brauche ich doch den Drehimpils des Drehencoders als Takt oder 
verstehe ich da was falsch?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Heiko Prinz (Gast)

>Also nochmal zum Verständnis: Ich möchte über einen HANDBETRIEBENEN
>Drehencoder den Zähler bedienen. Je nach Drehrichtung auf oder abwärts
>zählen lassen.

Schon klar.

>Somit brauche ich doch den Drehimpils des Drehencoders als Takt oder
>verstehe ich da was falsch?

Ja, das verstehst du falsch. Lies den Artikel Drehgeber, odrt ist 
ein Beispiel für deinen GAL in VHDL drin. Man braucht einen 
zusätzlichen, normalen Takt, bei dir so 1 kHz ode so.

Zum Lernen würde ich dir auch vom GAL abraten. Kauf dir lieber bei 
Pollin das CPLD Evalbaord.

http://www.pollin.de/shop/dt/MTM5OTgxOTk-/Bausaetz...

MFG
Falk

Autor: Heiko Prinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay.

Aber ich möchte das gern mit dem GAL lösen. Habe ja schon zwei 
einfachere Schaltungen mit dem GAL erstellt.
Jetzt halt mal ne Etage komplizierter.

Ich werd mich mal jetzt nochmal der Lektüre widmen.

Vielen Dank nochmal.

Autor: Heiko Prinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Frage noch:

Ich habe bereits einen Zähler (74LS93) und dazu einen Taktgeber (der 
bringt momentan so ca. 7kHz.

Könnte ich den Drehencoder dort anschließen und damit zählen, also quasi 
durch drehen?

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... Was willst du denn mit den alten Stromfressern? ...

Es gibt auch 'zero power' GAL - z. B. PALCE22V10Z.

Autor: Heiko Prinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Hinweise, da ich aber nur diesen zur Verfügung habe, will 
ich ihn auch benutzen.

Vielen Dank

Autor: Heiko Prinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So also die Schaltung in WinCUPL für den GAL hab ich soweit. War ja doch 
ganz einfach mit den D-FlipFlps.

Aber mein Problem ist immer noch der Takt.

Das was am Dateneingang anliegt, wird doch mit jedem 0 am Takt am 
Ausgang gespeichert.

Also muss ich ja prüfen, ob nach links oder rechts gedreht wurde, und 
wenn das der Fall ist, den Takt zum Flipflop durchlassen, oder?

Der VHDL-Code aus dem Tutorial ist verständlich, wie jedoch setze ich 
das mit WinCUPL um?

Vielen Dank

Autor: Stephan Henning (stephan-)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
+---+
 A -----|D Q|---+
      +-|T  | +-(---------- Clock
      | +---+ | |   +---+
      +-------+ +---|   |
      | +---+   |   |XOR|-- Forward Direction
 B ---(-|D Q|-+ | +-|   |
      +-|T  | | | | +---+
      | +---+ | | |
  +---(-------+ | | +---+
  | +-(-------(-+-(-|   |
  | | | +---+ |   | |XOR|-+ +---+
  | +-(-|D Q|-(---(-|   | +-|   |
  |   +-|T  | |   | +---+   |XOR|-- Clock Enable
  |   | +---+ |   | +---+ +-|   |
  |   |       +---(-|   | | +---+
  |   | +---+     | |XOR|-+
  +---(-|D Q|-----+-|   |
 T ---+-|T  |       +---+
        +---+


stammt aus: http://dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29

Autor: Heiko Prinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, das hilft schon mal sehr weiter. Danke

CLK und CLK-EN muss ich ja verknüpfen mit UND und das dann an den CLK 
des Zählers, oder?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Heiko Prinz (Gast)

>CLK und CLK-EN muss ich ja verknüpfen mit UND und das dann an den CLK
>des Zählers, oder?

NEIN! Clock Enable muss an das Clock Enable des Zählers. Die 
Und-Verknüpfung geht zu 99% schief! Siehe Taktung FPGA/CPLD.

MFg
Falk

Autor: Heiko Prinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber den Zähler realisiere ich ja auch mit dem GAL, wie mache ich das 
dort mit dem CLK_EN.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Heiko Prinz (Gast)

>Aber den Zähler realisiere ich ja auch mit dem GAL, wie mache ich das
>dort mit dem CLK_EN.

Einfach ein Zählersymbol mit CE-Eingang nutzen?

Autor: Heiko Prinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich bin jetzt mal auf den GAL22V10 gewechselt, sonst haut es nicht 
hin mit den FF.
Ich will jetzt also den Decoder für den Drehgeber und den Zähler in den 
einen GAL, jedoch finde ich nirgends im Datenblatt einen CE-Eingang bei 
den FF.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Heiko Prinz (Gast)

>einen GAL, jedoch finde ich nirgends im Datenblatt einen CE-Eingang bei
>den FF.

Den gibt es bei diesen ICs nicht direkt, der wird über die Produktterme 
nachgebildet. Im Abel erreicht man den über die Endung .CE

MFG
Falk

Autor: Heiko Prinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, danke für die Info. Wie kann ich das in dem GAL 22v10 realisieren? 
Was sind Produktterme? Sind doch disjunktive, also UND-Verknüpfungen, 
oder?
Was muss ich dann mit dem CE des Decoders UND-verknüpfen? Doch 
eigentlich den Takt, weil der steuert ja die Ausgabe der FF, also wenn 
CE = 1 und Takt = 1 dann sollen der Zähler zählen.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Heiko Prinz (Gast)

>Okay, danke für die Info. Wie kann ich das in dem GAL 22v10 realisieren?

Einfach die Logikgleichungen hinschreiben, den Rest macht die Software.

>Was sind Produktterme? Sind doch disjunktive, also UND-Verknüpfungen,
>oder?

Ja.

>Was muss ich dann mit dem CE des Decoders UND-verknüpfen?

Gar nichts! Aber das CE muss das Zählen des Zählers steuern.

>CE = 1 und Takt = 1 dann sollen der Zähler zählen.

Ja, aber richtig. Siehe Taktung FPGA/CPLD.

MfG
Falk

Autor: Heiko Prinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, also ich habe folgende Eingänge:

A und B vom Drehgeber
und clk von meinem externen Taktgeber

Die gehen zum Decoder.

Dort bekomme ich CE und Richtung.

Die gehen weiter zum Zähler,
Mit was muss ich das CE UND-verknüpfen? In dem Tutorial (Taktung FPGA) 
ist ja noch nen Zähler zwischen geschaltet.
Das verstehe ich in meinem Beispiel nicht, da ich ja nur möchte, dass 
gezählt wird, wenn der Drehgeber gedreht wird.

Autor: Heiko Prinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So also hier mal meine Schaltung:
                 _ _ _ 
CLK (ext) -----|1      24|------- VCC
A --------+----|         |------- OUT0
B ----+---)----|         |------- OUT1
RES---)---)----|         |------- OUT2
      |   |   -|         |------- OUT3
 10k |R| |R|  -|         |-
     |_| |_|  -|         |-
      |   |   -|         |-
       VCC    -|         |-
              -|         |-
              -|         |-
GND       -----|_  _  _|-

RES ist D/E vom Drehgeber

intern habe ich es wie folgt gelöst:
WINCUPL
Name     GAL_Counter ;
PartNo   00 ;
Date     28.05.2010 ;
Revision 01 ;
Designer Heiko Prinz ;
Company  privat ;
Assembly None ;
Location  ;
Device   g22v10 ;

/* *************** INPUT PINS *********************/
PIN 1     =      clk;
PIN 2     =      A_in;
PIN 3     =      B_in;
PIN 4     =      res;

/* *************** OUTPUT PINS *********************/
PIN 20    =      out3;
PIN 21    =      out2;
PIN 22    =      out1;
PIN 23    =      out0;

/* *************** INTERNAL SIGNALS ****************/ 
PIN 14    =      up_do; 
PIN 15    =      CE; 
PIN 16    =      A;
PIN 17    =      B;
PIN 18    =      A_del;
PIN 19    =      B_del;

A.D       = A_in;
B.D       = B_in;
A_del.D   = A;
B_del.D   = B;
up_do     = (A $ B_del);
CE        = (A $ A_del) $ (B $ B_del);

/* Definition */

FIELD count   = [out3..0];       /* Index = Bitposition! */

/* Logic Equations */

Sequenced count {
$Repeat i = [0..15]

Present 'd'{i}

if !res & up_do Next 'd'{(i+1)%16};

if !res & !up_do Next 'd'{(i-1)%16};

if res Next 'd'{0};

$Repend
}

Autor: Heiko Prinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das einzige womit ich nicht klar komme, ist der CE.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.