Hi zusammen, so langsam bin ich echt am Verzweifeln. Ich habe mir ein De0-Nano Board von Altera zugelegt und wollte damit eigentlich die Ausgänge verschiedener Sensoren zusammenschalten und damit ein bissel "rumspielen". Nun komm ich zum eigentlichen Problem: Ich scheitere schon an den einfachsten Sachen wie ich das so sehe. Zunächst möchte ich ganz einfach die Ausgänge zweier Sensoren (optischer Sensor) 24V Ausgangsspannung über einen Optokoppler der von 24V auf 3.3 V reduziert an zwei der GPIO PINS der 40 PINS anschließen. Die GPIO Eingänge habe ich via boolesche Algebra mit einem UND Baustein verbunden und den Ausgang des UND Baustein mit der LED0 verbunden. Nun das ganze kompiliert und danach die PINS definiert. Die beiden Eingangspins vom Expansion Headder lautet GPIO_024 und GPIO_026, der Ausgang geht auf A15 /LED0). Jetzt nochmal kompiliert und das ganze via Programmer auf den FPGA übertragen. Sobald das abgeschlossen ist stelle ich fest, dass 7 Dioden leicht glimmen und die Diode die ich eigentlich ansteuern möchte leuchtet hell auf obwohl beide Eingänge noch keine 3,3V Eingangsspannung liefern. Kann mir das mal einer erklären was ich hier grundsätzlich falsch mache? Muss ich hier noch extern ein Pull down Widerstand anschließen und die beiden Eingangspins auf Masse ziehen wenn der Sensor grad nicht schaltet? Oder soll och die beiden Eingänge via ADC in digitale Signale umwandeln und damit weitermachen? Falls ja wie mach ich das genau? Ich habe am ADC zwar 8 Eingänge aber nur einen Ausgang. Ich bin echt am verzweifeln und langweile euch sicher weil das ganze bestimmt trivial ist jedoch würde ich mich über qualifizierte Hilfe super riesig freuen. So ich hoffe nun, dass das Problem hier einigermaßen verständlich umschrieben ist und wünsche euch einen angenehmen Tag. viele Grüße
Hans Wurst schrieb: > Sobald das abgeschlossen ist stelle ich fest, dass 7 Dioden leicht > glimmen und die Diode die ich eigentlich ansteuern möchte leuchtet hell > auf obwohl beide Eingänge noch keine 3,3V Eingangsspannung liefern. > > Kann mir das mal einer erklären was ich hier grundsätzlich falsch mache? > Muss ich hier noch extern ein Pull down Widerstand anschließen und die > beiden Eingangspins auf Masse ziehen wenn der Sensor grad nicht > schaltet? Versuch doch erstmal die LED's per Taster/Dip-Switch anzusteuern. Damit kannst Du sicherstellen, das die Toolchain richtig läuft. Duke
Hans Wurst schrieb: > obwohl beide Eingänge noch keine 3,3V Eingangsspannung liefern. Sondern? Welche Pegel hast du an deinen Eingängen?
Stell doch einfach mal deine VHDL-Files und das QSF-File hier ins Forum ein. Dann kann man schon mal erste Fehler einkreisen bzw. ausschliessen.
Es gibt eine Einstellung für unused pins. Da kannst du zb einstellen "unused pins used as input with pull up" und dergleichen... LG
Hallo zusammen, vielen, vielen Dank für die ganzen Antworten, ich bin leider jetzt erst dazu gekommen das zu lesen. Ich habe gerade eben das Projekt erneut erstellt und die entsprechenden Files hier auch hochgeladen. Im Moment habe ich noch gar keine Ahnung vom VHDL Code, ich erzeuge meine Hardwarebeschreibung immer in der *.bdf Datei und erzeuge mir daraus die *.vhd Datei. Es ist jedenfalls wie gehabt, die 7 LED die ich nicht angesteuert habe glimmen und die eine die ich ansteuern möchte brennt hell wobei die beiden PINS (C9 und E11) nicht mit 3,3V angesteuert wurden. Bin echt ratlos. Bin für jede Hilfe dankbar. Schönen abend noch :-)
Hans Wurst schrieb: > Hallo zusammen, > > vielen, vielen Dank für die ganzen Antworten, ich bin leider jetzt erst > dazu gekommen das zu lesen. > > Ich habe gerade eben das Projekt erneut erstellt und die entsprechenden > Files hier auch hochgeladen. > > Im Moment habe ich noch gar keine Ahnung vom VHDL Code, ich erzeuge > meine Hardwarebeschreibung immer in der *.bdf Datei und erzeuge mir > daraus die *.vhd Datei. > > Es ist jedenfalls wie gehabt, die 7 LED die ich nicht angesteuert habe > glimmen und die eine die ich ansteuern möchte brennt hell wobei die > beiden PINS (C9 und E11) nicht mit 3,3V angesteuert wurden. Bin echt > ratlos. Bin für jede Hilfe dankbar. > > Schönen abend noch :-) Nachtrag: Ich habe jetzt anstelle der GPIO PINS (GPIO_024 und GPIO_026 des 40 poligen Headder) zwei Schalter auf dem Board angeschlossen, wie Duke vorab schon vorgeschlagen hat. Jetzt zeigt sich folgendes Bild. Die 7 LEDs die ich nicht ansteuern möchte glimmen ebenfalls. Die LED die ich schalten möchte ist allerdings aus und wird erst hell wenn beide Schalter auf 1 stehen. So wie gewünscht. Warum geht das aber nicht wenn ich extern an die entsprechenden PINs jeweils 3,3V anlege?
Du kannst keine LED direkt ansteuern, dazu ist der Strom zu gering an den GPIO. Ich glaube die haben ca nur Max 12mAH. Ich steuere meine LED über Transistoren an , die am GPIO-Pin von DE0-Board hängen. Auch die LED die nicht leuchten sollen , müssen einen Bezugspunkt in der VHDL haben. Gruss
Könnte es sein, dass die Eingänge, also deine GPIOs 024 und 026 pulldowns brauchen?...nicht daß sie schweben oder so... Klemm doch mal versuchsweise extern an die Pins je einen 1k oder 10k (was du eben da hast) widerstand gegen GND.
:
Bearbeitet durch User
peter schrieb: > Du kannst keine LED direkt ansteuern, dazu ist der Strom zu gering an > den GPIO. Ich glaube die haben ca nur Max 12mAH. Wenn schon, dann mA. Aber heutzutage kann man eine LED ganz gut sichtbar mit 1 mA leuchten lassen. Und das tun alle diese Eval-Boards... > Ich steuere meine LED über Transistoren an , die am GPIO-Pin von > DE0-Board hängen. Auch die LED die nicht leuchten sollen , müssen einen > Bezugspunkt in der VHDL haben. Das "Glimmen" der nicht benutzten LEDs deutet darauf hin, dass unbenutzte Pins mit einem Pullup ausgestattet werden, damit keine undefinierten Pegel an die Eingangstreiber kommen. Aber so etwas steht im Datenblatt des FPGAs. Das ist eine unglaublich interessante und vielseitige Lektüre, die man besonders dann, wenn man so einen Baustein in der Praxis einsetzen will, wenigsztens mal quergelesen haben MUSS. Hans Wurst schrieb: > So wie gewünscht. Warum geht das aber nicht wenn ich extern an die > entsprechenden PINs jeweils 3,3V anlege? Ich meine, das schon mal gefragt zu haben: hast du das gemessen? Und: legst du als Low-Pegel dann auch 0V /am FPGA-Pin/ an? Du musst sowohl bei High wie auch bei Low für definierte Pegel am FPGA-Pin sorgen.
:
Bearbeitet durch Moderator
Hallo Lothar, vielen Dank für die Hinweise. Ich habe ca. 1.3 V an den 'offenen' PINS gemessen. Ich werde wohl, so lange kein High Signal geliefert wird die PINS mittels Pulldown Widerstand auf Masse legen. Ich habe gehofft, dass das Board so etwas drauf hat. Pullup-Widerstände für die unbelegten PINS geht ja auch. Wenn ich alle freien PINS auf Masse lege ändert das auch nicht an am Resultat. Sollte das dann funktionieren komme ich zum nächsten Problem wo ich nicht weiß ich ich es angehen soll. Zukünftig würde ich gern zwei oder mehr Sensoren anschließen und ich möchte, dass die LED nur leuchtet wenn alle Sensoren entweder, zur gleichen Zeit oder wenn die Sensoren innerhalb einer Sekunde (beginnend ab dem ersten HIGH Signal eines der Sensoren), auf HIGH stehen, sprich 3,3V liefern. Nochmal anders gesagt: Der FPGA soll also prüfen sobald einer der Sensoren HIGH wird ob dann innerhalb einer Sekunde die anderen auch HIGH werden und dann die LED zum leuchten bringen, wenn nicht soll der Ausgangspegel des ersten Sensor wieder auf LOW gehen. Der ganze Prozess soll erst wieder in Takt gesetzt werden bis einer der Sensoren ein HIGH meldet. Ich hoffe es ist einigermaßen nachzuvollziehen was ich meine. Wo muss ich da ansetzen? Wie kann man das Ganze umsetzen? Muss ich dazu nun die Sensorausgänge mittels ADC in ein digitales Signal umwandeln um dann damit bitweise weiter zu arbeiten? Oder kann das ganze auch analog erledigt werden Viele Grüße und vielen Dank für die Hilfe schon mal.
Naja du brauchst wohl einen zurücksetzbaren Zähler, google: asynchron counter vhdl. Mit ein paar Berechnungen am schreibtisch und der quartz-frequenz kann man dann leicht ausrechnen, wie lange so ein Zähler zählen muss bis er eine Sekunde verblassen hat. Dazu einen kleinen Zustandsautomat der die Zustände (fang_neu_an, zählt, fertig) händelt und die Eingänge abklappert... das ist doch vollkommen easy... Gruß Jonas
jonas biensack schrieb: > Naja du brauchst wohl einen zurücksetzbaren Zähler, google: asynchron > counter vhdl. asynchron ist böse danach googelt man nicht! Ernsthaft, einen asynchronen Zähler verwendet man nicht in einem FPGA.
Zitat: ".. das ist doch vollkommen easy.." Na wenns denn so einfach wäre. Aber vielen Dank vorab für die Denkanstöße, dann weiß ich wenigstens schon mal wonach ich googlen muss. Viele Grüße
Aufpasser schrieb: > jonas biensack schrieb: >> Naja du brauchst wohl einen zurücksetzbaren Zähler, google: asynchron >> counter vhdl. > > asynchron ist böse danach googelt man nicht! > > Ernsthaft, einen asynchronen Zähler verwendet man nicht in einem FPGA. Worum sollte man keinen asynchronen Zähler verwenden? Dein Vorredner sieht das doch anders?!? Viele Grüße
jonas biensack schrieb: > Mit ein paar Berechnungen am schreibtisch und der quartz-frequenz kann > man dann leicht ausrechnen, wie lange so ein Zähler zählen muss bis er > eine Sekunde verblassen hat. Ich lasse das den Synthesizer rechnen. Da hängt schließlich ein Quadcore hinten dran... Hans Wurst schrieb: > Ich habe gehofft, dass das Board so etwas drauf hat. Du kannst üblicherweise im FPGA Pullups oder Pulldowns konfigurieren. > Wo muss ich da ansetzen? Wie kann man das Ganze umsetzen? Alles, was Zeiten sind, wird im FPGA über Zähler realisiert. > Der FPGA soll also prüfen sobald einer der Sensoren HIGH wird ob dann > innerhalb einer Sekunde die anderen auch HIGH werden und dann die LED > zum leuchten bringen, wenn nicht soll der Ausgangspegel des ersten > Sensor wieder auf LOW gehen. Wie lang soll die LED leuchten? Was soll passieren, wenn ein der zweite Sensor erst nach 1,2s aktiv wird? > Der ganze Prozess soll erst wieder in Takt gesetzt werden bis einer der > Sensoren ein HIGH meldet. Kannst du dazu mal ein Timingdiagramm oder ein Ablaufdiagramm mit ein paar der auftretenden Möglichkeiten zeichnen? > Worum sollte man keinen asynchronen Zähler verwenden? Man macht in einem FPGA (zumindest als Anfänger) NICHTS asynchron. Niemals! Sondern man verwendet einen Takt mit 50 oder 100MHz und macht alles synchron zu diesem. Externe Eingänge werden allesamt erst mal einsynchronisiert. Es gibt auch keinen asynchronen Reset, der einfach so von einem FPGA-Pin kommt. Such einfach mal hier im Forum nach "Postulate" und lies die Threads, wo ich die aufgestellt habe.
:
Bearbeitet durch Moderator
Hans Wurst schrieb: > Die LED die > ich schalten möchte ist allerdings aus und wird erst hell wenn beide > Schalter auf 1 stehen. So wie gewünscht Super! > Warum geht das aber nicht wenn > ich extern an die entsprechenden PINs jeweils 3,3V anlege? Hast Du auch die Masse verbunden oder nur die Signalleitung? Hans Wurst schrieb: > vielen Dank für die Hinweise. Ich habe ca. 1.3 V an den 'offenen' PINS > gemessen. Ich werde wohl, so lange kein High Signal geliefert wird die > PINS mittels Pulldown Widerstand auf Masse legen. Laut Schaltplan sind die LEDs mittels Vorwiderstand an GND angeschlossen. Die 1.3 V reichen offenbar aus, um sie glimmen zu lassen. Warum legst Du die Ausgänge an denen die LEDs nicht leuchten sollen nicht einfach auf '0':
1 | LED2 <= '0'; |
2 | LED3 <= '0'; |
3 | LED4 <= '0'; |
4 | LED5 <= '0'; |
5 | LED6 <= '0'; |
6 | LED7 <= '0'; |
Duke
Duke Scarring schrieb: > Hans Wurst schrieb: >> Die LED die >> ich schalten möchte ist allerdings aus und wird erst hell wenn beide >> Schalter auf 1 stehen. So wie gewünscht > Super! > >> Warum geht das aber nicht wenn >> ich extern an die entsprechenden PINs jeweils 3,3V anlege? > Hast Du auch die Masse verbunden oder nur die Signalleitung? Ich habe da im Moment nur die Signalleitung angeschlossen, sonst nichts! > > > Hans Wurst schrieb: >> vielen Dank für die Hinweise. Ich habe ca. 1.3 V an den 'offenen' PINS >> gemessen. Ich werde wohl, so lange kein High Signal geliefert wird die >> PINS mittels Pulldown Widerstand auf Masse legen. > > Laut Schaltplan sind die LEDs mittels Vorwiderstand an GND > angeschlossen. > Die 1.3 V reichen offenbar aus, um sie glimmen zu lassen. > > Warum legst Du die Ausgänge an denen die LEDs nicht leuchten sollen > nicht einfach auf '0': >
1 | > LED2 <= '0'; |
2 | > LED3 <= '0'; |
3 | > LED4 <= '0'; |
4 | > LED5 <= '0'; |
5 | > LED6 <= '0'; |
6 | > LED7 <= '0'; |
7 | >
|
Weil ich bisher nur mit der boolschen Algebra gearbeitet und noch keine code getippt habe. Das Wissen muss ich mir erst noch aneignen. Kann jemand ne schön leicht verdauliche Literatur zum einstiegt in die VHDL Programmierung mittels Quartus II empfehlen? Oder eine generelle Literatur zum Thema VHDL? Viele Grüße
Lothar Miller schrieb: > jonas biensack schrieb: >> Mit ein paar Berechnungen am schreibtisch und der quartz-frequenz kann >> man dann leicht ausrechnen, wie lange so ein Zähler zählen muss bis er >> eine Sekunde verblassen hat. > Ich lasse das den Synthesizer rechnen. Da hängt schließlich ein Quadcore > hinten dran... > > Hans Wurst schrieb: >> Ich habe gehofft, dass das Board so etwas drauf hat. > Du kannst üblicherweise im FPGA Pullups oder Pulldowns konfigurieren. Also an dem DE0-Nano und der Software Quartus II ist es mir nicht gelungen Pulldown Widerstände an PINS zu belegen. Pullup geht. > >> Wo muss ich da ansetzen? Wie kann man das Ganze umsetzen? > Alles, was Zeiten sind, wird im FPGA über Zähler realisiert. > >> Der FPGA soll also prüfen sobald einer der Sensoren HIGH wird ob dann >> innerhalb einer Sekunde die anderen auch HIGH werden und dann die LED >> zum leuchten bringen, wenn nicht soll der Ausgangspegel des ersten >> Sensor wieder auf LOW gehen. > Wie lang soll die LED leuchten? Was soll passieren, wenn ein der zweite > Sensor erst nach 1,2s aktiv wird? Die LED soll so lange leuchtet bis alle Sensoren für die dauer von einer Sekunde wieder LOW sind. >> Der ganze Prozess soll erst wieder in Takt gesetzt werden bis einer der >> Sensoren ein HIGH meldet. > Kannst du dazu mal ein Timingdiagramm oder ein Ablaufdiagramm mit ein > paar der auftretenden Möglichkeiten zeichnen? Das kann ich gern machen, allerdings bedarf es da ein wenig Gehirnschmalz was ich da reinstecken müsste da komm ich erst am WE zu. Reich ich aber gern nach. > >> Worum sollte man keinen asynchronen Zähler verwenden? > Man macht in einem FPGA (zumindest als Anfänger) NICHTS asynchron. > Niemals! Sondern man verwendet einen Takt mit 50 oder 100MHz und macht > alles synchron zu diesem. Externe Eingänge werden allesamt erst mal > einsynchronisiert. Es gibt auch keinen asynchronen Reset, der einfach so > von einem FPGA-Pin kommt. > Such einfach mal hier im Forum nach "Postulate" und lies die Threads, wo > ich die aufgestellt habe. Werd ich machen. Danke für die Tipps Viele Grüße
Hans Wurst schrieb: >>> Warum geht das aber nicht wenn >>> ich extern an die entsprechenden PINs jeweils 3,3V anlege? >> Hast Du auch die Masse verbunden oder nur die Signalleitung? > Ich habe da im Moment nur die Signalleitung angeschlossen, sonst nichts! Wie nochmal? 3,3V OHNE Masse sind irgendwas! Halte mal NUR die Plus-Leitung deines Messgeräts an die 3,3V. Was misst du? Und was misst du, wenn du auch die MASSE-Leitung mit dazunimmst?
Lothar Miller schrieb: > Hans Wurst schrieb: >>>> Warum geht das aber nicht wenn >>>> ich extern an die entsprechenden PINs jeweils 3,3V anlege? >>> Hast Du auch die Masse verbunden oder nur die Signalleitung? >> Ich habe da im Moment nur die Signalleitung angeschlossen, sonst nichts! > Wie nochmal? > 3,3V OHNE Masse sind irgendwas! Halte mal NUR die Plus-Leitung deines > Messgeräts an die 3,3V. Was misst du? Und was misst du, wenn du auch die > MASSE-Leitung mit dazunimmst? Hallo zusammen, ich habe nun die Schaltung ein wenig verändert. Diesmal habe die die GPIO Eingänge 024 und 026 als Eingang definiert und diese mit einem UND Baustein verknüpft. Der Ausgang vom UND geht auf alle 8 Dioden. Jetzt dachte ich habe ich die PINs 24 und 26 vom 40er Headder über einen pulldown widerstand an Masse angeschlossen. Dies Masse ist die vom Board. Nun wollte ich mit der Spannung vom PIN 30 an die beiden Widerstände gehen und quasi ein Signal simulieren. Nun zum Problem. Gebe ich die 3,3V Leitung auf den Widerstand an der Seite wo Masse ist resetet sich das Board, geh ich auf die andere Seite passiert nichts wenn ich beide Widerstände mit 3,3V vom PIN 29 verbinde. Alle 8 Dioden bleiben dunkel. Das muss doch aber gehen.
Hans Wurst schrieb: > Lothar Miller schrieb: >> Hans Wurst schrieb: >>>>> Warum geht das aber nicht wenn >>>>> ich extern an die entsprechenden PINs jeweils 3,3V anlege? >>>> Hast Du auch die Masse verbunden oder nur die Signalleitung? >>> Ich habe da im Moment nur die Signalleitung angeschlossen, sonst nichts! >> Wie nochmal? >> 3,3V OHNE Masse sind irgendwas! Halte mal NUR die Plus-Leitung deines >> Messgeräts an die 3,3V. Was misst du? Und was misst du, wenn du auch die >> MASSE-Leitung mit dazunimmst? > > Hallo zusammen, > > ich habe nun die Schaltung ein wenig verändert. Diesmal habe die die > GPIO Eingänge 024 und 026 als Eingang definiert und diese mit einem UND > Baustein verknüpft. Der Ausgang vom UND geht auf alle 8 Dioden. > > Jetzt dachte ich habe ich die PINs 24 und 26 vom 40er Headder über einen > pulldown widerstand an Masse angeschlossen. Dies Masse ist die vom > Board. > > Nun wollte ich mit der Spannung vom PIN 30 an die beiden Widerstände > gehen und quasi ein Signal simulieren. > > Nun zum Problem. Gebe ich die 3,3V Leitung auf den Widerstand an der > Seite wo Masse ist resetet sich das Board, geh ich auf die andere Seite > passiert nichts wenn ich beide Widerstände mit 3,3V vom PIN 29 verbinde. > > Alle 8 Dioden bleiben dunkel. > > > Das muss doch aber gehen. Nachtrag: Nun funktioniert das oben beschriebene, ich habe leider fälschlicherweise die Dioden mit einem Bus Kabel anstatt einem normalen in quartus II verbunden. Jetzt geht das schon mal, vielen dank an euch alle. Schönen Tag noch und sicherlich bis bald
Hans Wurst schrieb: > Gebe ich die 3,3V Leitung auf den Widerstand an der Seite wo Masse ist > resetet sich das Board Tja, das ist nach einem Kurzschluss einfach so. Nachvollziehbar...
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.