Servus, ich habe mich schon länger durch das Forum glesen und leider nichts gefunden was mir helfen könnte. Nun hoffe ich einer kann mir bei meinem Problem helfen. Problem: Das Problem ist folgendes. Und Zwar habe ich den CPLD "ispM4A5-64/32-10VC der Firma Lattice. Auf diesem ist ein "Zähler von 0-15" Programmiert der bei "0" stopt und mit dem Eingang "Start" startet (Start kommt von einem externen UND Logikgatter funktioniert auch). Der Takt für diesen Zähler kommt von einem NE555 und hat ca. 60 Hz. Der Takt wird über ein norgalen I/O Pin eingelesen nicht über den Speziellen CLOCK Eingang. Als zusatz gibt es nun noch ein Signal welches während der Zählerzahl 3 (0011b) ausgegeben wird, also nur ein Impuls. Meine Logikgatter auserhalb sind TTL und der CPLD ist ein CMOS aber 5V tollerant am Eingang und auch TTL Tollerangt am Ausgang. Nun ist es so, dass der Zähler zählt wenn der "Start-Impuls" kommt, dies funktioniert auch ganz gut. Mit dem Oszi gemessen kommt am besagten Pin an dem der Impuls bei Zahl 3 (0011b) anliegen soll auch der besagte Impuls. Schließe ich aber nun diesen Pin an meine externe TTL-Beschaltung an und starte dann den Zähler, fängt der Zähler an zu Spinnen. Erst hat er immer die Zahl 4,8 und 14 ausgelassen, indem er das LSB des Zählers nicht zurücksetzte. Als wir dann das Programm ein bisschen geändert haben, also die (Register) Makrozellen des Zählers nicht gleich auf einen Ausgang sondern zuerst über "node" intern und dann nach ausen an einen Pin geführt haben, hat er plötzlich nur noch gezählt wie er lust hatte, ich könnte es mir leider nicht erklären. Ich muss noch dazu sagen das ganze ist in Abel geschrieben. Da ich noch keine Kenntnisse über VHDL besitze. Ich hoffe ihr könnt mir irgend wie helfen. Ich Danke schon mal im Vorraus. MFG Frieder
> Der Takt für diesen Zähler kommt von einem NE555 und hat ca. 60 Hz.
Passt die Flankensteilheit?
Ist die Flanke monoton steigend bzw. fallend, oder hat sie
Einbrüche/Spikes?
Also die Flankensteilheit sollte eigentlich passen... Mit was für einem Baustein am besten Fertigbaustein könnte ich sie verbessern? Schmittriggerbaustein 5V oder so ? Oder reicht es wenn ich den Takt einfach durch eine Makrozelle laufen lass und dann intern erst an meine jetzige Logikverknüpfung? Danke Frieder
>Oder reicht es wenn ich den Takt einfach durch eine Makrozelle laufen >lass und dann intern erst an meine jetzige Logikverknüpfung? Nein, die Flanke muss bereits am Pin ordentlich sein. Ein Schmittrigger ist auf jeden Fall dein Freund ;-) Ist euer Design synchron? also werden alle Register im CPLD mit dem gleichen Takt versorgt? Kannst ja mal den Code posten
Hi Joschi Ja,das Design ist synchron. Alle Reg's werden synchron angesteuert soll ein synchron Zähler sein ;) . Also hier mal den Abel-Quellcode ************************************************************************ ** MODULE Zaehler declarations start pin 2; starts pin 8 istype'buffer,com'; takt pin 5; Q0..Q3 pin 44,41,37,34 istype'buffer,reg'; CNT = [Q3..Q0]; equations CNT.clk = takt; starts = Q0.q & Q1.q & !Q2.q & !Q3.q; Q0 := (!Q0 & start) # (!Q0 & Q3 & !start) # (!Q0 & Q2 & !start) # (!Q0 & Q1 & !Q2 & !start); Q1 := (!Q0 & Q1) # (Q0 & !Q1); Q2 := (!Q0 & Q2) # (!Q1 & Q2) # (Q0 & Q1 & !Q2); Q3 := (!Q0 & Q3) # (!Q1 & Q3) # (!Q2 & Q3) # (Q0 & Q1 & Q2 & !Q3); END ************************************************************************ * Wir haben nun herrausgefunden das es tatsächlich am Takt liegt (also so sieht es zumindest aus). Die steigende Flanke vom NE555 ist 500ns lang, was warscheinlich viel zu lange ist. Kennst du zufällig ein Baustein mit Schmitt-Trigger als IC am besten ein Single-Gate? Oder gibts zufällig direkt einen für Digitale Bausteine, welcher speziell für digitale Funktionen (um Flanken steiler zu machen) vorgesehen ist. **************** EDIT Kleine Änderung mein CPLD ist nun kein ispM4A5-64/32-10VC mehr sondern ein ispM4A5-32/32-10VC (Hat keine große bedeutung wollte es nur gesagt haben) **************** Danke und Gruß Frieder
Du fauler Hund! Schau im SAP nach, da stehen alle Schmitt-Trigger drin und dann dappst in´s Lager rüber und holst dir einen raus. (Aber Entnahmeschein nicht vergessen!) Tiny-Schmitt-Trigger (Single Gate) haben wir auch auf Lager ;-) Aber Obacht, Schmitt-Trigger invertieren, aber wenn dich das stört, dann kannst es ja im CPLD-Code rumdrehen! Am Donnerstag sind meine Überstunden abgebaut und ich bin wieder in der Firma und dann schau ich mal zu euch beiden rüber. Echt ein witziger Zufall, was?
Kannst dir natürlich auch nen Besen schnappen und unter´m Rüstplatz mal fegen. Da findest sicher den einen oder anderen Schmitt-Trigger. Ich mach nur Spass, gell? Kennst mich ja ;-) Sag mal bescheid, ob´s mit dem Trigger tut. Irgendwie find ich da lustig, wenn ich Gleitzeit mache, mit nem Bier und nem Leberkäsewecken hier sitz und du musst schaffen :-)
Ja ein sehr witziger Zufall, nur ich fang mit Joschi nix an? SAP ist eigentlich das erste was ich frag wenn ich n Baustein brauch aber leider find ich da nix. Wenn du mir sagen kannst was ich genau suchen muss dann schau ich gleich noch mal nach. Gruß Frieder
Na ich war doch neulich bei euch beiden in der Azubiwerkstatt, um euch die Software von Lattice zu installieren ;-) frag mich jetzt bitte nicht nach dem Transaktionscode von SAP Aber du suchst unter "Teile- Elektische Bauelemente - Digitale IC´s" und dann irgendwas mit "Standrad-Logik" oder sowas. Dann bei Funktion "Schmitt-Trigger" auswählen und das ganze noch über die Anzahl der Gatter pro IC eingrenzen.
AH okay Ding ding ding ding jetzt hats gschnaggelt. Treibsch du dich öfters im Forum hier rum... Wir wollten eigentlich genau zu dir mit dem Problem, haben dir auch ne Mail geschrieben aber da kam dann das du bis zum Do außer Haus bist. Dann ist das hier nun wirklich so n super Zufall! Den Schmitt-Trigger den haben wir nun gefunden. Werden den nachher noch auslagern. Und eventuell nachher noch ausprobieren aber spätestens morgen... Ich schreib dir dann morgen noch mal, zumindest hier im Forum. Dank dir Frieder ps: genies deine Gleittage noch und n Gruß von Vera
Ahh der Groschen ist gefallen ;-) Nee ich bin eher selten hier unterwegs, aber war grad am Stöbern, da ich nach was ganz anderem geschaut habe. Na dann hoff ich mal, dass es mit dem Schmitt-Trigger am Ende auch tut. Und wie gesagt, am Donnerstag bin ich ja wieder da. Wenn´s dann net tut, schau ich mal rüber zu euch beiden. Vielleicht schau ich ja aber auch morgen mal schnell hier im Forum, ob ihr weitergekommen seid. Dann hab nen schönen Feierabend und Grüße (auch an Vera)
Hey Joschi ich hab dir hier mal des Oszi-Bild von dem Zähler ohne den Schmitt-Trigger. Mit Schmitt-Trigger funktioniert der Zähler nun komischerweise garnicht mehr. Bild kommt
Das ist mit Schmitt-Trigger. Die Flanke ist nach dem Schmitt-Trigger eigentlich super wir können es uns auch nicht erklären.
Noch mal mit Schmitt-Trigger. Er macht nur was er will. Verzweiflung
Frieder S. schrieb: > Das ist mit Schmitt-Trigger. > > Die Flanke ist nach dem Schmitt-Trigger eigentlich super wir können es > uns auch nicht erklären. Wie kannst Du das beurteilen, wenn dein OSZI Anstiegszeiten von 20 ms zeigt, oder lese ich falsch. Zoomt das Ganze mal ein bischen auf, mit 10 ns/div oder so, dann kannst Du sehen ob Du Glitches oder Spikes drauf hast.
Nochmal das richtigere Bild0 Hallo Klaus das Bild hat nichts mit der Flanke zu tun es geht bei dem Bild nur um die Zählfolge unseres CPLD's mit und einmal ohne Schmitt-Trigger. Die Flanke ist schön sauber ansteigend beim Schmitt-Trigger und schwingt sich auch normal ein.
Aus der Zählfolge sieht man nichts, diese ist sowieso falsch. Versuch einmal, den Ausgang starts auch als Register zu definieren. Dann geht er zwar erst bei 4 auf High, aber das kannst Du später noch korrigieren. Es kann schon sein, dass Du den Ausgang zu stark belastet, das kann die Schaltung schon durcheinanderbringen. Wenn Du den Ausgang starts auch über ein FF führst, dann wird Ausgang und interne Logik entkoppelt.
Genau, die Zählerfolge ist falsch. Das ist unser Problem. Deshalb haben wir versucht die Flanken mit einem Schmitt-Trigger zu verbessern. Die Folge davon war nur schlimmer als zuvor/ geschweige denn, wir konnten es uns erklären. Danke für die Tipps, wir probieren es mal aus.
Hallo Klaus, wie meinst du das mit dem 'starts' auf ein FlipFlop legen? Könntest du einen kurzen Code zum Verständnis posten? Das wäre super, danke.
Soo, da bin ich mal kurz wieder ;-) Was mir aufgefallen ist: Das Signal start, mit dem ihr den Zähler loslaufen lasst, wird direkt in das Bit0 des Zählers verknüpft. Das start-signal ist aber so, wie es von aussen kommt, also nicht synchron zu eurem Takt. Das ist auf jeden Fall mal nicht sauber und ihr solltet ein Register einbauen, über das ihr das start-Signal einsynchronisiert. Dazu einfach das Start-Signal auf den Eingang eines Registers geben, welches mit dem gleichen Takt, wie der Zähler getaktet wird und den Ausgang dieses Registers als Startbedingung für euren Zähler verwenden. Natürlich setzt ihr jetzt kein externes Register, sondern beschreibt dieses Register auch im CPLD. Ob das die Ursache für euer Problem ist, kann ich nicht sicher sagen, aber es ist auf jeden Fall eine Stelle, die ein unsauber ist.
Frieder S. schrieb: > Ich muss noch dazu sagen das ganze ist in Abel geschrieben. Da ich noch > keine Kenntnisse über VHDL besitze. und > Hallo Klaus, > wie meinst du das mit dem 'starts' auf ein FlipFlop legen? > Könntest du einen kurzen Code zum Verständnis posten? > Das wäre super, danke. Naja, bei Abel scheint es auch zu hapern, ich kann (und will) mich aber auch nicht erinnern. So ähnlich wird's wohl gehen. starts pin 8 istype'buffer,reg'; starts.clk = takt
@Klaus: Stimmt, man will sich am Besten nicht mehr an Abel erinnern ;-) Aber dennoch auch hier der Code für das Eingangsregister (ich hoffe, das stimmt so): bei declarations das Register deklarieren: start_reg istype'reg'; dann bei equations: start_reg.clk = takt; und in der Zuweisung für Q0 alle "start" durch "start_reg" ersetzen
Also die Änderungen sind nun mal vorgenommen. Konnte es nur noch nicht probieren! Nur eine Frage @ Klaus könnte es nicht Probleme mit dem Signal "starts" geben, wenn der Takt für das Register "starts(reg)" zur selben Zeit oder ein paar ns vor der UND Verknüpfung der Zählerausgänge kommt? Da hätten wir doch die 0011b verpasst. Oder meintest du diesbezüglich, dass das Signal erst bei 4 kommt?
Frieder S. schrieb: > ur eine Frage > @ Klaus könnte es nicht Probleme mit dem Signal "starts" geben, wenn der > Takt für das Register "starts(reg)" zur selben Zeit oder ein paar ns vor > der UND Verknüpfung der Zählerausgänge kommt? Da hätten wir doch die > 0011b verpasst. Nein, kann es nicht. Der Takt für starts und die Q-Signale kommt "gleichzeitig". Interne Laufzeitunteschiede sind höchstens ein paar ps, aber das ist im Design des CPLDs berücksichtigt. Alle FF reagieren nur auf den Zustand der Eingänge VOR dem Takt und der Eingang von starts ist nur '1' nachdem der Zähler CNT oder Q[3:0] stabil auf 3 steht, d.h. nach der Taktflanke, bei der er von 2 auf 3 gesprungen ist. > Oder meintest du diesbezüglich, dass das Signal erst bei 4 kommt? Genau. Der Ausgang starts geht auf 1 an der Taktflanke, an der am Ausgang des Zählers 3 steht. An diese Taktflanke passiert dann folgendes : - Der Zähler geht von 3 auf 4 - Der Ausgang starts geht von 0 auf 1
Kurze auflösung des Problems... Ausgangspin wurde direkt von einem anderen Gatter auf Masse gezogen und wurde somit durch ein Kurzschluss zerstört... Neuer CPLD eingelötet und Kurzschluss entfernt --> Funktioniert. Danke an alle die geholfen haben. Frieder
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.