Forum: FPGA, VHDL & Co. verzweifelung bei warte schleife!


von Robert (Gast)


Lesenswert?

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

von MIBes. (Gast)


Lesenswert?

Solange es IF-Schleifen gibt, gibt es nur eins: Lernen.

von GS (chromosoma)


Lesenswert?

Mach mal einfach einen Counter, der bei (LED1='1' AND LED'EVENT) 
startet...

von Grendel (Gast)


Lesenswert?

Robert schrieb:
> while sollte man lieder vermeiden. habe es
> dann mit einer for schleife probiert

;-))))

von MAD (Gast)


Lesenswert?

MIBes. schrieb:
> Solange es IF-Schleifen gibt, gibt es nur eins: Lernen.
Solche unqualifizierten Kommentare liebe ich. Das macht diese Forum so 
"lebendig"......   :-(

von GS (chromosoma)


Lesenswert?

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;

von Robert (Gast)


Lesenswert?

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

von bko (Gast)


Lesenswert?

>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

von GS (chromosoma)


Lesenswert?

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

von Robert (Gast)


Lesenswert?

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 =)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Duke Scarring (Gast)


Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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?  ;-)

von Robert (Gast)


Lesenswert?

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

von GS (chromosoma)


Lesenswert?

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...

von Robert (Gast)


Lesenswert?

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?

von GS (chromosoma)


Lesenswert?

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.

von berndl (Gast)


Lesenswert?

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!

von Robert (Gast)


Lesenswert?

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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von Robert (Gast)


Lesenswert?

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

von Klaus F. (kfalser)


Lesenswert?

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).

von Robert (Gast)


Lesenswert?

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

von muaaaa (Gast)


Lesenswert?

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).

von Robert (Gast)


Lesenswert?

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 
=)

von Robert (Gast)


Angehängte Dateien:

Lesenswert?

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 =)

von M. D. (wpmd)


Lesenswert?

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
von Robert (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Holger H. (holger-h-hennef) Benutzerseite


Lesenswert?

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.

von Helmut L. (helmi1)


Lesenswert?

@ 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
Noch kein Account? Hier anmelden.