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
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.
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?
@ 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-/Bausaetze/Diverse/Bausatz_CPLD_Evaluation_Board.html MFG Falk
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.
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?
... Was willst du denn mit den alten Stromfressern? ... Es gibt auch 'zero power' GAL - z. B. PALCE22V10Z.
Danke für die Hinweise, da ich aber nur diesen zur Verfügung habe, will ich ihn auch benutzen. Vielen Dank
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
+---+ 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
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?
@ 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
Aber den Zähler realisiere ich ja auch mit dem GAL, wie mache ich das dort mit dem CLK_EN.
@ 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?
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.
@ 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
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.
@ 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
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.
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
1 | Name GAL_Counter ; |
2 | PartNo 00 ; |
3 | Date 28.05.2010 ; |
4 | Revision 01 ; |
5 | Designer Heiko Prinz ; |
6 | Company privat ; |
7 | Assembly None ; |
8 | Location ; |
9 | Device g22v10 ; |
10 | |
11 | /* *************** INPUT PINS *********************/
|
12 | PIN 1 = clk; |
13 | PIN 2 = A_in; |
14 | PIN 3 = B_in; |
15 | PIN 4 = res; |
16 | |
17 | /* *************** OUTPUT PINS *********************/
|
18 | PIN 20 = out3; |
19 | PIN 21 = out2; |
20 | PIN 22 = out1; |
21 | PIN 23 = out0; |
22 | |
23 | /* *************** INTERNAL SIGNALS ****************/
|
24 | PIN 14 = up_do; |
25 | PIN 15 = CE; |
26 | PIN 16 = A; |
27 | PIN 17 = B; |
28 | PIN 18 = A_del; |
29 | PIN 19 = B_del; |
30 | |
31 | A.D = A_in; |
32 | B.D = B_in; |
33 | A_del.D = A; |
34 | B_del.D = B; |
35 | up_do = (A $ B_del); |
36 | CE = (A $ A_del) $ (B $ B_del); |
37 | |
38 | /* Definition */
|
39 | |
40 | FIELD count = [out3..0]; /* Index = Bitposition! */ |
41 | |
42 | /* Logic Equations */
|
43 | |
44 | Sequenced count { |
45 | $Repeat i = [0..15] |
46 | |
47 | Present 'd'{i} |
48 | |
49 | if !res & up_do Next 'd'{(i+1)%16}; |
50 | |
51 | if !res & !up_do Next 'd'{(i-1)%16}; |
52 | |
53 | if res Next 'd'{0}; |
54 | |
55 | $Repend |
56 | }
|
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.