Hallo Leute, Ich habe ein Problem. Ich habe mit vor 1-2 Monaten ein Altera board gekauft (Altera DE2) und wollte bischen Vhdl Programmieren. in c ist das irgendwie leichter g Mein erstes Projekt soll eine Ampel sein, das heist ich möchte LED1 ansteuern nach einer sekunde soll zusätzlich die LED2 angehen. nach einer sekunde soll diese ausgehen und die LED3 angehen. nach 5 sekunden soll die LED3 ausgehen und es soll die LED 2 wieder angehen und nach 1sekunde die ausgehen und LED1 wieder angehen. ich habe mal geschaut. die Wait anweisung kann ich soweit ich gelesen habe nicht anwenden und die while sollte man lieder vermeiden. habe es dann mit einer for schleife probiert aber da bin ich gescheitert. habe dann erstmal einen 1mhz frequenztakt block erstellt um die sekunden besser zählen zu können. dies hab ich mit einer if- schleife gemacht und habe diesen takt über eine LED ausgegeben um zusehen ob es auch funktioniert. das tut es sehr gut. Aber ich bekommen es einfach nicht hin zu sagen wenn LED1 an ist dann schalte LED2 nach so oder soviel sekunden dazu und dann nach einer stimmten zeit wieder aus und die LED3 an. Diese zeitspanne/ warte schleife verstehe ich nicht. hoffe ihr könnt mir da irgendwie weiter helfen. vielen dank schonmal =) Lg Robert
Robert schrieb: > while sollte man lieder vermeiden. habe es > dann mit einer for schleife probiert ;-))))
MIBes. schrieb: > Solange es IF-Schleifen gibt, gibt es nur eins: Lernen. Solche unqualifizierten Kommentare liebe ich. Das macht diese Forum so "lebendig"...... :-(
oder noch einfacher
1 | IF (Counter>0 AND counter<1000000)THEN |
2 | LED1<=1 |
3 | ELSE
|
4 | LED1<=0 |
5 | END IF; |
6 | IF ((Counter>1000000 AND counter<2000000) OR (Counter>7000000 AND counter<8000000 ))THEN |
7 | LED2<=1 |
8 | ELSE
|
9 | LED2<=0 |
10 | END IF; |
11 | IF (Counter>2000000 AND counter<7000000)THEN |
12 | LED3<=1 |
13 | ELSE
|
14 | LED3<=0 |
15 | END IF; |
wow das ist ja der hammer hier!!! so schnell antworten =D cool ;) MAD schrieb: > MIBes. schrieb: >> Solange es IF-Schleifen gibt, gibt es nur eins: Lernen. > Solche unqualifizierten Kommentare liebe ich. Das macht diese Forum so > "lebendig"...... :-( gut das du das auch so siehst g =) Böser Kommunist schrieb: > oder noch einfacher IF (Counter>0 AND counter<1000000)THEN > LED1<=1 > ELSE > LED1<=0 > END IF; > IF ((Counter>1000000 AND counter<2000000) OR (Counter>7000000 AND > counter<8000000 ))THEN > LED2<=1 > ELSE > LED2<=0 > END IF; > IF (Counter>2000000 AND counter<7000000)THEN > LED3<=1 > ELSE > LED3<=0 > END IF; ok das hab ich aufjedenfall verstanden =D wieso bin ich nicht auf so eine idee gekommen ? =) cool danke =D aber wie mache ich das mit dem counter. wann fange ich da wo an zu zählen? da mache ich um deinen quelltext noch eine if schleife in der ich vor deinem code den counter um 1 hoch setzte. somit zähle ich immer den counter hoch. liege ich da richtig oder denk ich da falsch? Lg Robert Ps: ich muss nochmal sagen das ich es super klasse finde wie einem hier geholfen wird!!!!! cool danke =D
>wollte bischen Vhdl Programmieren. in c ist das irgendwie leichter löse dich von "softwaredenke", VHDL beschreibt Hardware. Du brauchst für eine Ampel im Wesentlichen zwei Teile: 1) einen Counter um deinen Eingangstakt (einige MHz) auf Sekunden herunter zu teilen. sowas in etwa: http://www.vhdl.org/vhdlsynth/vhdlexamples/test_counter.vhdl 2) eine FSM um die Ampel zu steuern, hier ein Beispiel einer FSM: http://www.lothar-miller.de/s9y/categories/37-FSM Aber eventuell hilft es erst einmal ein wenig Lesen: http://www.mikrocontroller.net/articles/VHDL Ein Tutorial kann nicht schaden, hier sogar mit Ampel Beispiel: http://astro.uni-tuebingen.de/groups/electronics/VHDL.pdf Bücher sind auch Hilfreich z.B Buch R&S, VHDL Synthese
Na du hast ja 1Mhz Clock, also füge mmein quellcode in IF(clk'event adn clk='1')--statement And danach machst du sowas IF(couner<8000000)Then counter<=counter+1; ESLE couner<=0; END IF
bko schrieb: >>wollte bischen Vhdl Programmieren. in c ist das irgendwie > leichter > > löse dich von "softwaredenke", VHDL beschreibt Hardware. > Du brauchst für eine Ampel im Wesentlichen zwei Teile: >1...... cool danke. die pft ist ja sehr interessant! =) Böser Kommunist schrieb: > Na du hast ja 1Mhz Clock, also füge mmein quellcode in > IF(clk'event adn clk='1')--statement > > And danach machst du sowas > > IF(couner<8000000)Then > counter<=counter+1; > ESLE > couner<=0; > END IF cool danke. genau so hatte ich es mir gedacht =D werde das sofort ausprobieren =D der tag ist ja noch lang g;) supi vielen dank erstmal =D werde heute abend oder morgen weiteres einstellen und berichten wie es geklappt hat =)
Robert schrieb: > Mein erstes Projekt soll eine Ampel sein Schau mal da: https://www.mikrocontroller.net/search?query=ampel+vhdl&forums[]=9&max_age=-&sort_by_date=1 Robert schrieb: > habe dann erstmal einen 1mhz frequenztakt block erstellt um die sekunden > besser zählen zu können. Das ist 1. unnötig. Denn nicht du musst die Sekunden besser zählen, sondern das FPGA. Und dem ist es schnurzegal ob es Mikrosekunden oder Vierzigstelmikrosekunden oder Dreiunddreisigstelmikrosekunden zählen muss... Und 2. sehr wahrscheinlich falsch. Denn ich vermute stark, dass du dieses 1MHz Signal dann als Takt verwendet hast. Aber Takte werden in FPGAs anders erzeugt...
Böser Kommunist schrieb: > einen Counter, der bei (LED1='1' AND LED'EVENT) Können wir das nicht in den antiquitierten Lehrbüchern lassen?! Wenn man ein Flip-Flop baucht verwendet man
1 | rising_edge( clock) |
und der Code ist selbsterklärend. Duke
Böser Kommunist schrieb: > Mach mal einfach einen Counter, der bei (LED1='1' AND LED'EVENT) > startet... ... und wenn du dann am Ende dieser speziellen Sackgasse angekommen bist, dann helfen wir dir auch wieder heraus. @ Duke: Willst du da tatsächlich ein Stück mit reinfahren in die Sackgasse? ;-)
Hallo Leute =) wollte eigentlich schon am wochenende schreiben aber mein laptop meinte das er mal urlaub machen müsste. aber jetzt wieder alles ok. so mein jetztiger stand. ich bin meinem selbsterzeugen eines 1mhz taktes geblieben. haben 2 ampelsteuerungen erstellt die sich gegenseitig ansteuer und schön nacheinander anlaufen. dann habe ich als zusatz noch einen nachtmodus gemacht. ich habe mit einem schalter einen dämmerungsschalter simuliert und wenn ich diesen betätige dann läuft die angefangene ampelphase durch bis beide rot sind und dann schalten sie auf ein blinkendes gelb um. also soweit klappt alles schon mal =D jetzt kommt aber mein nächstes problem =( hoffe ich könnt mir da auch helfen. ich möchte eine Platine bauen wo eine kreuzung drauf ist wo die LED´s (rot, gelb, grüen,.....) aufgelöttet sind. so das ich nicht die LED´s auf dem altera board ansteuere sondern die auf der platine. da habe ich gedacht da kann ich ja an das GPIO1 gehen oder? hoffe habe es verständlich erklären können mit der Platine!? =) versteht ich wie ich meine ? =) das GIPO kann ich ja als ein und ausgänge nutzen. da kann ich ja dran gehen oder? wieviel spannung kommt an den I/O´s des GIPO´s an? Lg Robert
ja, du kannst GPIO nehmen. Aus der GPIO kommt 3.3 V , vllt brauchst du dann noch einen Vorwiederstand, ich weiß nicht wieviel Strom aus deiner FPGA kommt, ich denke aber nicht so viel...
grüß dich. ahhh ok.(keine ahnung wie viel aus der FPGA kommt) da nehme ich lieber noch einen verwiderstand. sicher ist sicher. aber mal ne dumme frage. welche pin namen/nummern nehme ich da? bei den LED´s und bei den schaltern steht es ja drunter/dran aber bei der GIPO stehen ein paar viele. hast du da eine ahnung? einen masse punkt hat die GIPO oder?
www.altera.com/education/univ/materials/boards/de2/unv-de2-board.html Im "Datasheets for DE2 ZIP" findest du die DE2_Schematic.pdf Seite 16 und 17 => GPIO_0 und GPIO_1 In Pin assignment sollst du die entsprechenden Namen finden. z.B GPIO_0[0] ist oben links,GPIO_0[1] ist oben rechts etc.
Lothar Miller schrieb: > Böser Kommunist schrieb: >> Mach mal einfach einen Counter, der bei (LED1='1' AND LED'EVENT) >> startet... > ... und wenn du dann am Ende dieser speziellen Sackgasse angekommen > bist, dann helfen wir dir auch wieder heraus. > > @ Duke: > Willst du da tatsächlich ein Stück mit reinfahren in die Sackgasse? ;-) Oh Mann, so einfach ist es nicht... Ich habe neulich einen 'eingekauften' Design in den Fingern gehabt. Urspruenglich von 'nem Uni-Prof gemacht (tja, da war bit und bit_vector noch state-of-the-art, also auch nix mit 'rising_edge(clk)' und so... Dann hat den Design ein 'modernerer' Kollege uebernommen. Strotzt nur so vor 'variable', wahrscheinlich weil das ja schick ist und es sich so anfuehlt wie 'lokale Variablen in C'... Mir tut immer noch der Arsch weh von diesem Aufschlag (als ich den Code gesehen habe). Das gehoert eigentlich komplett weggeschmissen und neu geschrieben... Achja, der Simulator (Modelsim und GHDL) ist einfach beim laden abgeschmiert... Welche Firma zahlt soviel Schmerzensgeld... Aber wir sind ja Exportnation Nummer 1!
ahh cool danke. in der PDF ist ja das GIPO bgebildet und da ist einmal ein 5Volt anschluss dran und ein 3.3Volt anschluss dran. ist das relevant? oder kommen an allein GIPO I/O´s 3.3Volt raus und die 5 Volt ist dauer spannung?
Robert schrieb: > oder kommen an allein GIPO I/O´s 3.3Volt raus und die 5 Volt ist dauer > spannung? Kein FPGA, das in der Zeit nach der Jahrtausendwende gefertigt wurde, kann mit 5V Hochspannung noch was anfangen. Wenn du da 5V anlegst, geht es einfach kaputt. Ob am IO-Pin 3,3V herauskommen, das hängt davon ab, wie die entsprechende BAnk versorgt ist. Einfach mal die Doku zum FPGA und EVAL-Board befragen. Und dann schauen, ob die Pegel der 5V-Logik und der 3V-Logik irgendwie zusammenpassen... Falls nicht: siehe Pegelwandler
Hallo Leute, so endlich ist es soweit. nach dem ich ein paar wochen nichts an dem programm machen konnte ist jetzt die Platine fertig und das programm auch. habe das programm auf dem Altera Board ausprobiert und hat super funktioniert. habe dann die Platine geätzt und zusammen gelötet. habe immer für 2 LED´s einen I/O von GPIO genommen. habe da programm auf gespielt, immer stück für stück und es hatte fast funktioniert. jetzt hab ihc aber ein komisches problem. Ich habe die beiden Fußgängerphasen vertauscht. das heißt ich habe auf der gerade wo die grüne ampelphase ist auch die grüne Fußgängerphase gebracht g also alle menschen würden umgefahren werden. habe es im programm einfach getauscht. aber jetzt kommt das problem. wen ich es tausche geht bei der einen Ampelphase die grünen LED´s nicht mehr. leuchtkraft nur noch um die 10% mehr aber auch nicht. aber warum? und was noch komisch ist das wenn alle ampeln rot sind oder auch gelb dann sind immer 2 fußgänerampeln gedimmt ( die beiden sind zusammen auf einem I/0 geklemmt). sobald aber von der ampel die grünphase kommt werden Sie hell. hmm was könnte das sein? ich weis nicht ob ich es gut rüberbringen konnte. wenn nicht sagt es mir da stelle ich ein bild oder vielleicht auch ein video rein =) danke =) Lg Robert
Robert schrieb: > a stelle ich ein bild oder vielleicht auch ein video rein Schaltplan wäre nützlicher. Warscheinlich hast Du die LEDs direkt an die Ausgänge geklemmt und diese ziehen zuviel Strom, sobald alle leuchten. Oder die Versorgung bricht zusammen.... Und bitte, beschreibe nicht die Ampel, sondern die Schaltung (Grüne LED leuchtet/leuchtet nicht).
Klaus Falser schrieb: > Robert schrieb: >> a stelle ich ein bild oder vielleicht auch ein video rein > > Schaltplan wäre nützlicher. > Warscheinlich hast Du die LEDs direkt an die Ausgänge geklemmt und diese > ziehen zuviel Strom, sobald alle leuchten. > Oder die Versorgung bricht zusammen.... > Und bitte, beschreibe nicht die Ampel, sondern die Schaltung (Grüne LED > leuchtet/leuchtet nicht). Hallo, ahh ok alles klar =) stehhe schaltplan so 15/16 uhr rein =) hab es gerade nicht dabei. ne zuviel Strom können die LED´s nicht ziehen. habe extra welche gekauft mit nur 2mA stromfluß so das ich an jedem ausgang 4mA strom ziehe. jedes LED paar habe ich mit einem 330 Ohm vorwiderstand abgesichert um auf nummer sicher zu gehen. aber bin ja noch dummer Student. ausfehlern lernt man =) aber vielen danke das ihr so lieb helfen tut =D also so 15-16 uhr ist das zeug drin. aber ich schaue nochmal schnell nach ob ich es irgendwie anders in die uni bekomm. Danke, Lg robert
nur so als Hinweis: LED-Vorwiderstand dient nicht der Absicherung sondern dazu den Strom einzustellen (LEDs sind Dioden, die haben einen ziemlich konstanten Spannungsabfall und benötigen einen eingestellten Strom, sonst brennen sie recht schnell durch).
muaaaa schrieb: > nur so als Hinweis: > > LED-Vorwiderstand dient nicht der Absicherung sondern dazu den Strom > einzustellen (LEDs sind Dioden, die haben einen ziemlich konstanten > Spannungsabfall und benötigen einen eingestellten Strom, sonst brennen > sie recht schnell durch). Hi, huch stimmt. da hab ich mich falsch ausgedrückt. Ich habe elektriker gelernt und da verwechel ich immer mal was g ne das ist richtig! du hast da voll kommen recht!!! hab das eigentlich auch so gemeint. meinte damit das ich die widerstände als absicherung gegen den Strom habe damit sie nicht durchbrennen. so aus sicherheitsgründen. hab mich aber ein bischen falsch ausgedrückt g =)
So habe den schaltplan gefunden. habe es im anhang mit rein getan. Mein problem ist das wenn ich es am Altera board simuliere dann funktioniert alles super. tuhe ich es aber auf die platine über das GPIO ( die verbindung zur platine musste ich selber bauen aus den beiden pfostensteckern und dem flachbandkabel, sollte aber richtig aufgepresst sein) dann funktioniert alles soweit. bloß wenn die ampel (1.Grün) angehen sollte geht sie nicht an. tausche ich aber die Fußgängerampeln (1.) mit den Fußgängerampeln (2.) dann geht es wieder. also wenn ich die beiden Fußgängerampelphasen tausche. bloß dann würde die Ampelstuerung kein sinn machen da alle leute überfahren werden würden g . was auch noch komisch ist das wenn das programm durch läuft die Rote Led der Fußgängerampel 1 nicht richtig leuchtet sondern glimmt/dimmt. also die (1. Rot Fuß X). wenn aber das programm an dem punkt ist wo die beiden Grünen LED ´s (1.Grün) angeht dann leuchtet die Rote Fußgängerampel (1. Rot Fuß X) normal Stark auf. aber nur solange die Grüne an ist. komisch das die mit der ( 1. Rot Fuß X) LED ja auch die (1. Rot Fuß) gleichzeitig geschaltet ist aber diese ganz normal leuchtet. komisch. Habe es bestimmt sehr kompliziert geschrieben. aber vielleicht kann mal es etwas herraus filtern g wenn nicht dann schreib ich es nochmal stück für stück auf um schritt für schritt vor zu gehen =)
Robert schrieb: > Ich habe elektriker > gelernt und da verwechel ich immer mal was g Diese Begründung kappier ich nicht, wenn du doch schon gelernter Elektriker bist, solltest du doch gerade dann sowas nicht verwechseln... Naja, zum Thema: Sind die Kathoden der LEDs direkt auf GND gelegt? Ich sehe in dem Schaltplan zwar dass alle Kathoden miteinander verbunden sind und auf Pin 12 der GPIOs geht, aber wie ist dieser Pin auf deinem Alteraboard angeschlossen?
:
Bearbeitet durch User
Hallo, naja Elektriker. also Strippenzieher! =)da hatten wir mit bauelementen sogut wie garnichts am hut =) ja sind alle genau auf das GND des AlteraBoard GPIO geklemmt. im anhang habe ich aus dem Datenblatt des Alterboards mal die GPIO raus kopiert.
Robert schrieb: > Diese zeitspanne/ warte > schleife verstehe ich nicht. hoffe ihr könnt mir da irgendwie weiter > helfen. Lesson 96 - Example 64: GCD Algorithm-2 - Datapath Control http://www.youtube.com/watch?v=IxPWTMEv5dI Hier ist das mit der while Schleife behandelt. Gruss Holger.
@ Robert (Gast) Fuer morgen schreibst du 100 mal "Jede LED bekommt ihren eigenen Vorwiderstand". Man kann LEDs nicht direkt parallelschalten. Wie oben schon mal erwaehnt wurde sind LEDs stromgesteuerte Bauelemente mit einer nichtlinearen Kennlinie. Wenn du die so wie in deinem Plan direkt parallelschaltest bekommt die eine mehr und die andere weniger Strom ab. Das Ergebnis kennst du. Abhilfe gibt es nur wenn jede LED ihren eignen Vorwiderstand bekommt.
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.