grübelgrübel ... das iss echt merkwürdig Q_Q versuch es mal mit nem dazwischengefrickelten pnp-transistor als verstärker EVENTUELL hilft das ... mehr als raten kann cih lleider auch nciht mehr an der stelle, tut mir leid
Druckbare Version
grübelgrübel ... das iss echt merkwürdig Q_Q versuch es mal mit nem dazwischengefrickelten pnp-transistor als verstärker EVENTUELL hilft das ... mehr als raten kann cih lleider auch nciht mehr an der stelle, tut mir leid
nimm den "icp1/icp-anschluss" zum puls-messen.
Zur genauen Pulsmessung sollte man wie gesagt den ICP Anschluss nehmen. Ablternativ geht auch der Komerator, wenn da signal klein ist. Aber die Signalstärke scheint ja schon geklärt.
Für die immer gleichen 15.75 us könnte ich 2 mögliche Erklärungen geben:
1) Störungen vom PC Monitor oder 100 HZ TV (31 kHz Horizontal, 1:1 Tastverhältnis -> ca- 16 us)
2) Der das Interrruptflag wurde nicht gelöscht, sodass sofort ein zweiter interrrupt ausgelöst wird. 16 us sind zwar eine recht lange Zeit für eine ISR routine aber in Basic könnte das schon mal passieren.
Habe das Programm mal mit 12MhZ ext.Quarz anstelle den 8Mhz internen Quarz laufen lassen. Gleiches Ergebnis. Liegt also nicht an einer Bearbeitungszeit, sonst wäre es unterschiedlich.
Habe jetzt mal die 3. Version probiert mit icp. Und ext. Quarz mit 12Mhz
Funktioniert zwar auch, aber die Werte passen immer noch nicht.
Vielleicht doch Störimpulse?
Oder habe ich den Sensor falsch, nicht optimal eingesetzt?
Was mich schon wundert das ich 50K Widerstand in Reihe zum SFH205 nehmen muss um ein brauchbares Signal (am SFH205 abgegriffen) zu bekommen. Passt nicht ganz mit dem Datenblatt überein.
Wenn ich das Signal verstärken wollte, wie müsste das mit den Widerständen aussehen um einen BC546B als Schalter zu verwenden?
Eine gut Verstärkerschaltung für Photodioden/Transtoren geht wie folgt:
NPN-Transistor (möglicht hohe Verstärkung) mit Emitter gegen Masse. Photodetektor von der Basis nach Masse. Widerstand von ca. 5 K bis 50 K vom Kollektor nach VCC. Ausgang ist der Kollektor. Und schließlich noch ein Widerstnd vom Kollektor zur Basis. Der Wert dieses letzten Widerstandes gibt die Empfindlichkeit vor. Bei einer Photodiode sollten das ca. 100K-10 MOhm sein, bei einem Phototransitor eher 1K-1 M. Je nach Stärke des Lichsignals und Empfänger noch etwas mehr oder weniger.
habe die Verstärkerschaltung mal aufgebaut mit 500K Poti zur Basis, verstärkt wirklich sehr gut, d.h. Senderabstand kann größer werden. Aber der Effekt bleibt. Jetzt habe ich mal das Sensorsignal mit einem Oszilloskope angesehen. Das Signal ändert sich in der Amplitude wenn man mit dem Sender näher an den Sensor kommt, was einleuchtet, aber es ändert sich auch die Periode, d.h. die Frequenz ändert sich. Kann natürlich nicht sein aber das liegt wohl an der Signalverarbeitung das sich die Schwellwerte für 1 und 0 bei verschiedenen Amplituden ändern.
Werde die Signalerkennung mal über den Analog/Digital laufen lassen und da feste Werte abfragen ab wo 0 und 1 sein sollen.
O:) O:)
ich habe das Problem gefunden. Oh mannnnn.
Habe, nachdem eigentlich alle Programmvarianten nichts gebracht haben folgendes Probiert.
Wenn IRSensor = 1 dann Aufgang x auf 1 sonst auf 0
Beide Signale an 2Kanal Oszi und gestaunt das der Ausgang nicht immer kommt und wenn dann nur etwa halb so lange wie er müsste.
Dann habe ich einfach mal in einer Programmschleife den Ausgang getoggelt und am Oszi geschaut und gestaunt.
12MhZ Quarz ergibt eine Freq des Ausgangs von....
18 Hz, kein Einheitenfehler !
Dann Analog-Digitalwandler Abfrage raus ..... 3300 Hz, schließlich meine Anzeige (LCD) raus ergibt 1 MHz. Immer noch sehr wenig finde ich bei 12MhZ Taktung, aber schneller gehts nicht, warum auch immer. Ist halt Basic....
Jetzt erkenne ich auch das 3kHz Signal was vorher bei 18Hz Abfrage nicht klappte
](*,) ](*,)
Übel oder
Grüße und danke für die Hilfe
Ich benutze zwar nicht Basic, sondern C, aber das kommt mir schon komisch vor. Nach Deiner Beschreibung könnte kein Code funktionieren, die in Bascom geschrieben worden ist, und zeitkritisch ist...
Gibts da im Compiler nicht irgendwelche Optimierungsstufen, die man einschalten muss?
Die Abfrage des AD Wandlers und das Ansprechen des LCD sind immer recht langsam (auch in C oder Assembler). Bei den LCDs wird bei jedem Übertragenem Byte auf die Bestätigung des LCD-Moduls gewartet und dass kann halt dauern. Beim AD Wandler gibt es nur relativ wenige Befehle, die entsprechend alle eventuelaitäten vorsehen müssen und entsprechend auch mal 2 Wandlungen abwarten müssen. Außerdem gint es beim AD Wandler noch einiges zu konfigurieren.
Einen Ausgabefrequenz von 1 MHz für eine Software Toogle-Schleife ist doch sogar gut, die Schleife ist also nur 6 Zyklen lang. In Assembler kommt man auch nur auf 2 Zyklen (3 MHz) und das auch nur ausnutzen der Spezillen toogle funktion der Ports. Ich glaube kaum dass GCC da besser sein wird, aber muss man mal testen.
Naja, etwas stimmt trotzdem nicht, die 18Hz sind extremst wenig...
Ich hab ein Durchflussmesssystem in der Firma entworfen, basierend auf einer Atmega8 mit 1Mhz internem Takt. Der rechnet die Uhrzeit für sich selber, misst eine Impulslänge vom Sensor, gibt alle Daten am LCD aus, und entscheidet über Alarmzustände. Das ganze ist in GCC, und ich hab keine Probleme.
Die Impulslängenabfrage und die Uhrzeitberechnung sind mit Interrupts implementiert, und in dem Fall ist es wurst, was man grad mit dem LCD macht. Den AD-Wandler kann man auch per Interrupt machen, dann muss man nicht immer alles abwarten.