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