Hallo Zusammen, momentan komme ich bei einer Sache nicht weiter und würde um einen Ratschlag bitten. Ich arbeite mit einem Altera Cyclone 3 Board ohne ADC. Ich will die Zeit messen bis sich eine LED gegen GND geschaltet entladen hat. Dazu schalte ich den Output Pin kurz an um den Ledkondensator aufzuladen. Nach einer halben Sekunde setzte ich den Output auf 0. Nun will ich die Zeit messen bis mein Inputpin durch den Spannungsabfall auf Low fällt und die Zeit anhalten. Ich hatte zunächst versucht einen Bidir Pin zu definieren und mit einem oe zu arbeiten. Dies hat nicht funktioniert. Heute habe ich es mit einem Schmitt Trigger (diesen extern mit 5V versorgt) und einem Input Pin der auf abfallende Flanke reagiert versucht. Der Pin geht hinter dem Schmitt Trigger zwar auf Low aber dies ohne messbare Zeitverzögerung. Ich hab mal ein Bild von meinem Aufbau hochgeladen. Bin für jeden Ratschlag dankbar.
Musst mal googlen, da gibt es einiges im Netz oder schon hier auf der Seite. Ich glaube man nutzt einen Timer + Interrupt-Pin. Der Aufbau sieht abenteuerlich aus. Steht die Kapazität der LED und der Zuleitungen noch in einem brauchbarem Verhältis?
Ne sry, kein Interrupt-Pin. Einfach nach "LED als Sensor" googlen.
Ich denke, Du solltest mindestens den GND vom FPGA und den GND des 74'ers miteinander verbinden (ich kenne die Belegung Deines Steckboards nicht so genau, aber zurzeit schaut's nicht danach aus als die zwei zusammenhängen). Jetzt nochmals messen.
Was hat den nicht funktioniert? Wenn du nach dem laden des Kondensators den Ausgangspin wieder auf 0 setzt, dann entlädst du den Kondensator wieder. Das heisst du würdest immer eine 0 messen. Der Ansatz mit dem Bidirektionalen Pin macht für mich Sinn. Du musst den Ausgang aber auf 'Z' schalten und nicht auf 0.
f4lkon schrieb: > Ich will die Zeit messen bis sich eine LED gegen GND geschaltet entladen > hat. Dazu schalte ich den Output Pin kurz an um den Ledkondensator > aufzuladen. Häh? Was ist denn ein Ledkondensator? Was willst du eigentlich messen/feststellen/ermittlen? > Der Pin geht hinter dem Schmitt Trigger zwar auf Low aber dies > ohne messbare Zeitverzögerung. Wie hast du das festgestellt? Welche Zeit erwartest du denn überhaupt? Dir ist schon klar, dass in deinem Schaltplan der Eingang über einen Inverter einfach mit dem Ausgang verbunden ist. Dass da eine LED mit dranhängt ist Nebensache... > Ich hab mal ein Bild von meinem Aufbau hochgeladen. Ich schlage vor, einen Schaltplan zu posten, statt eines Bildes für das Reverse-Engineering.
Hallo, danke für einige Hinweise. Den Schaltplan reiche ich nach sobald ich aus der Uni raus bin. Was der Schmitt Trigger macht habe ich mir so angeschaut: test=IORD_ALTERA_AVALON_PIO_EDGE_CAP(EINGANG_BASE); printf( "test1: %i ", test ); IOWR_ALTERA_AVALON_PIO_DATA(GPIO0_D_BASE,0x01); usleep(100000); test=IORD_ALTERA_AVALON_PIO_EDGE_CAP(EINGANG_BASE); printf( "test2: %i ", test ); IOWR_ALTERA_AVALON_PIO_DATA(GPIO0_D_BASE,0x00); test=IORD_ALTERA_AVALON_PIO_EDGE_CAP(EINGANG_BASE); printf( "test3: %i ", test ); IOWR_ALTERA_AVALON_PIO_EDGE_CAP(EINGANG_BASE,1); @lkmiller: Ledkondensator gibt es nicht das war Käse. Halt eine Led die die sich als solche verhält. Ich will die Entladungszeit dieser Led messen. Mit dem Oszi habe ich 300ms gemessen. Wie meinst du das mit dem Inverter genau? Vielen Dank!
f4lkon schrieb: > Ich will die Entladungszeit dieser Led messen. > Mit dem Oszi habe ich 300ms gemessen. Da muss man gar nicht messen, da kann man ja mitzählen. Das hört sich für mich nach "Wer misst, misst Mist" an. Den Messaufbau möchte ich sehen, und auch, was dabei herausgekommen ist... > Mit dem Oszi habe ich 300ms gemessen. Bleibt noch diese Schlüsselfrage: >> Welche Zeit erwartest du denn überhaupt? Wenn da irgendwas mit ms herauskommt, dann liegst du da sicher um mindestens 4 Zehnerpotenzen zu hoch! Und dein Messaufbau gibt irgendwas im ns Bereich gar nicht her. > Ledkondensator gibt es nicht das war Käse. > Halt eine Led die die sich als solche verhält. Wieso sollte sich eine LED wie ein Kondensator verhalten? > Was der Schmitt Trigger macht habe ich mir so angeschaut: ... Was passiert da? Als Tipp: die Zeiten, die du ermitteln willst, wirst du mit Software und printf() dazwischen sicher nicht erfassen können. > Wie meinst du das mit dem Inverter genau? Vielen Dank! Zeichne einen Schaltplan und sieh dir das an. Die LED ist einfach nur eine Pegelanzeige und der Inverter invertiert nur das Signal, das vom Ausgang ausgegeben wird.
Lothar Miller schrieb: >> Halt eine Led die die sich als solche verhält. > Wieso sollte sich eine LED wie ein Kondensator verhalten? Nu enttäuschst Du mich aber, Lother ;-) Von der Sperrschichtkapazität hast Du sicher schonmal was gehört. Und bei einer LED ist die Sperrschichtkapazität auch von der Umgebungshelligkeit abhängig. So kann man ein LED verwenden um damit festzustellen, ob es hell oder dunkel ist. Ich vermute genau das möchte der Threadersteller machen. Duke
Duke Scarring schrieb: > Nu enttäuschst Du mich aber, Lother ;-) Schade um den schönen Tag... ;-) > Und bei einer LED ist die Sperrschichtkapazität auch von der > Umgebungshelligkeit abhängig. Und natürlich wie üblich von der anliegenden Sperrspannung... > Ich vermute genau das möchte der Threadersteller machen. Dann sollte er aber 1. die LED in Sperrrichtung betreiben und 2. definiert entladen und vor allem: schneller messen... Ich würde das ansatzweise so probieren:
1 | FPGA-pin --------o------. |
2 | | | |
3 | --> - - |
4 | --> ^ | | |
5 | | - |
6 | | | |
7 | GND --------o------' |
Und damit einen freischwingenden Oszillator aufbauen, und die Periodenzeit messen...
Duke Scarring schrieb: >> Wieso sollte sich eine LED wie ein Kondensator verhalten? > Nu enttäuschst Du mich aber, Lother ;-) > Von der Sperrschichtkapazität hast Du sicher schonmal was gehört. > Und bei einer LED ist die Sperrschichtkapazität auch von der > Umgebungshelligkeit abhängig. Ob sich eine LED wie ein Kondensator verhält, hängt in erster Line nur von einem ab: Nämliche welche Größenordnung der Kapazität man erwartet ;-) Wenn man Zeitkonstanten im Millisekundenbereich erwartet, verhält sich die LED ganz und gar nicht wie ein Kondensator. Wenn man Kapazitäten im pF Bereich erwartet, dann verhält sich alles wie ein Kondensator. ;-)
So vom Handy etwas umständlich aber ich glaube es liegt vllt daran, dass mein Z state vom Boardpin nicht hochohmig genug ist. Die Led betreibe ich schon in Sperrrichtung. Die 300ms als tau sind natürlich utopisch was aber am sehr hochen widerstand vom Oszi kommt. Meine led hab ich mit 4,6pf gemessen. Ich rechne bei der Schaltung so mit einem tau von ca 15ms. Das mit dem freischwingenden Oszillator klingt gut. Das müsste mein tau verlängern oder irre ich mich?
Passt es denn so mit der Schaltung? 5v | | vom_board_3.3Vttloutput-----|----------- | R | | | | | _|- | schmitttrigger LED |___| | | |+ | | | | | | | | vom_board_gnd---------------- | |minus | inputpin--------------------------------------| So hatte ich das gestern Nacht hingebastelt. Hoffe man kann das verstehen.
Dein Schmitt-Trigger wird mit 5 Volt und mit 3,3 Volt versorgt, oder wie?
f4lkon schrieb: > Meine led hab ich mit 4,6pf gemessen. > Ich rechne bei der Schaltung so mit einem tau von ca 15ms. Welchen Widerstand hast du da angenommen? Mit R = t/C = 15ms/4,6pF komme ich auf 3,26 Giga(!!!)Ohm. Lass dir aus der Praxis sagen: da stimmt was nicht am Gedankengang... Schon Widerstandswerte von feuchter Luft oder gar Kriechstrecken auf einer Leiterplatte sind deutlich niederohmiger. f4lkon schrieb: > Das mit dem freischwingenden Oszillator klingt gut. > Das müsste mein tau verlängern oder irre ich mich? Du müsstest den in Hardware bauen (also mit Verilog oder VHDL). In Software bist du garantiert zu langsam... > So hatte ich das gestern Nacht hingebastelt. Was ist R? > Hoffe man kann das verstehen. Du solltest auf jeden Fall auch den Minuspol deiner Versorgung und den GND-Anschluss des Inverters mit dem GND vom FPGA verbinden. Also so etwa:
1 | 5v |
2 | |
3 | | |
4 | | |
5 | vom_board_3.3Vttloutput-----o----------. | |
6 | | | | |
7 | R | | |
8 | | | | |
9 | - | schmitttrigger |
10 | ^ LED '---' | | |
11 | | | | |
12 | | | | |
13 | | | | |
14 | vom_board_gnd---------------o-----------------+---------o-- minus |
15 | | |
16 | inputpin--------------------------------------' |
Aber wie gesagt: in dieser Schaltung hat die LED eigentlich nichts zu sagen. Denn die sperrt ja und ist über R mit einem aktiven Ausgang verbunden. Daher wirst du bestenfalls die Laufzeit durch den Inverter messen. Tatsächlich wird deine Schaltung also so wirken:
1 | 5v |
2 | | |
3 | | |
4 | vom_board_3.3Vttloutput--------------. | |
5 | | | |
6 | | | |
7 | | | |
8 | | schmitttrigger |
9 | '---' | | |
10 | | | |
11 | vom_board_gnd-------------------------------+---------o-- minus |
12 | | |
13 | inputpin------------------------------------' |
Vielen Dank für deine Unterstützung! Ich hab den Schmitt Trigger jetzt mal rausgeworfen und die externe Versorgung auch. Ich hab es jetzt mit nem Tristate im Nios2 gemacht. Sprich Pin auf output und LED kurz aufladen. Danach pin in den Tristate 'Z' und per edge capture register auf low warten. Ich hatte in der Nacht keinen klaren Kopf und somit hab ich immer vergessen per ALTERA_AVALON_PIO_DIRECTION die Richtung, sprich Eingang/Ausgang, zu setzen.
Lothar Miller schrieb: > Du solltest auf jeden Fall auch den Minuspol deiner Versorgung und den > GND-Anschluss des Inverters mit dem GND vom FPGA verbinden. Sag' ich doch... ;-)
f4lkon schrieb: > Danach pin in den Tristate 'Z' und per edge capture register > auf low warten. Und wie gehts dann weiter? Wer sollte den "Kondensator" dann halbwegs definiert entladen? Oder soll er sich auf unerklärliche Art&Weise "selber" entladen?
Der Kondensator entlädt sich wegen dem hochohmigen Eingang selbst. Sobald die Spannung dabei unter 0.8V sinkt erkenne ich ihn als low.
f4lkon schrieb: > Der Kondensator entlädt sich wegen dem hochohmigen Eingang selbst. Hochohmig != Pull-Down Vielleicht entlädt er sich, vielleicht erst später, vielleicht auch erst sehr viel später, oder... Da würde ich den Rat des Pull-Downs beherzigen... ;-)
Hmm so im Tristate konnte ich schon mal verschiedene Zeiten messen was auch deine Aussage bestätigen würde;) Ich versuche es mal mit nem 3k Pulldown.
Peter K. schrieb: > f4lkon schrieb: >> Der Kondensator entlädt sich wegen dem hochohmigen Eingang selbst. > Vielleicht entlädt er sich, vielleicht erst später, vielleicht auch erst > sehr viel später, oder... Oder vielleicht lädt er sich auch. Wenn du so einen Eingang nämlich komplett unbeschaltet lässt, dann stellt sich im langjährigen Mittel etwa VCC/2 ein. Damit leiten dann beide Eingangstransistoren und der IO-Pin verbraucht unnötig Strom... f4lkon schrieb: > Ich versuche es mal mit nem 3k Pulldown. Und was erwartest du dann? Es ist mir klar, dass man ohne Erfahrung kein "Gefühl" für Bauteilwerte hat, aber rechnen kannst du doch: tau = R*C. Was ergibt das dann? tau = 4,6pF*3kOhm = 4,6E-12 * 3E3 = ca. 14ns Kannst du das prinzipiell auswerten? Ich behaupte: Nein! Vermutlich ist nicht mal deine Taktfrequenz hoch genug, um einen Zähler in dieser Zeit wenigstens um 1 hochzuzählen... :-o
Hmm ok danke für den Hinweis! Bei 50 MHz ist das echt Käse. Meinst ich sollte doch lieber den Schmitt Trigger oder ein anderes R nehmen. Ich hab hier noch 1Mohm damit dürfte ich ja ca 700 mal zählen.
Nimm mal den 1 MOhm Widerstand. Du wirst dann ja sehen, was sich tut. Probieren geht hier über Studieren... Allerdings sollte dir bewusst sein, dass schon der FPGA-Pin eine Kapazität hat. Das kannst du ja einfach mal messen, indem du nur den Widerstand an den Pin anschließt...
Lothar Miller schrieb: > tau = 4,6pF*3kOhm = 4,6E-12 * 3E3 = ca. 14ns > Kannst du das prinzipiell auswerten? Dafür kann man einen TDC im FPGA realisieren. Das ist dann aber recht akademisch (oder anders ausgedrückt mit Kanonen auf Spatzen...) Duke
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.