-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: wieder einer mit dem Impulslängenproblem :-)

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    30.06.2004
    Beiträge
    50

    wieder einer mit dem Impulslängenproblem :-)

    Anzeige

    Hallo,

    ich möchte mit einem Empfänger die Pulslänge einer Sendediode bestimmen.
    Die Sendefrequenz liegt zwischen 2khz und 6 khz, PWM. Daher möchte ich nicht die Frequenz sondern die Pulslänge highsignal bestimmen.

    Da mehrere Versuche bisher nicht zuverlässig funktionierten, habe ich mal folgendes probiert:

    int0 auf steigende Flanke
    int1 auf fallende Flanke
    beide Interupt-Eingänge an den Empfänger angeschlossen,
    start timer1 bei int0
    stop timer1 bei int1

    aber ich erhalte immer den Wert 133 ?? Egal wie lange, kurz ich eine Testsendediode (nicht gepulst) an den Empfänger halte.

    Kann mir jemand sagen wo mein Fehler liegt? Habe hier schon mal andere Ideen angeschaut, aber warum geht meins nicht?
    Programm ist angefügt.

    Danke und Gruß
    Heinz
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.382
    kannst du nicht einfach während des interrupt die flankenempfindlichkeit von pin0 umdrehen ? also nachdem rising interrupt config int0 = Falling ?? oder kostet das zu viel zeit eventuell ? vielleicht liegt das problem darin das der impuls zu schwach ist ? ich musste meinem cmps03 modul einen transistor auf vcc spendieren damit das signal hoch genug für einen interrupt ist und der taktet bei 1-37ms taktbreite mit flankenabstand steigend 56ms

    EDIT: falls es am code liegt .... so sehr ich mich angestrengt habe ... so wenig konnte ich den code entziffern ... tut mir leid ich bevorzuge c >_< (nix persönliches ich verstehe es einfach nur besser)

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    30.06.2004
    Beiträge
    50
    Das mit der Flankenumkehr habe ich noch gar nicht probiert. Das ist natürlich besser als zwei Interrupts zu verbraten.
    Als Empfänger habe ich eine "normale" Fotodiode mit Tageslichtsperrfilter SFH205 in Reihe mit 50K als Spannungsteiler

    +Vcc .
    .
    .
    R
    .
    . ....... Int 0/ Int 1 Atmega8
    .
    .
    SFH205
    .
    .
    GND

    Das das Signal zu schwach ist könnte bei hohen Frequenzen vielleicht stimmen, aber das klappt ja auch bei einer hingehaltenen IR-LED schon nicht.

    Gruß

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.382
    irgendwie versteh ich an der stelle den spannungsteiler net ... müssten GND und vcc nicht andersrum sein ? ich weis es net sorry >_< ich hab naja ... einfach en pnp genommen, vcc zu C impulsleitung zu B und E zum eingang int0 und indirekt einen widerstand in form der statusLED zu gnd also im pinzip deine schaltung mit einem transistor da wo deine SFH sitzt und statt deines R eine LED mit vorwiderstand und VCC und GND genau anders herum als deins

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.08.2006
    Ort
    Budapest
    Alter
    30
    Beiträge
    563
    1. Bei den Atmega-s kann man die Interrupt Eingange so konfigurieren, dass bei jeder Änderung ein Interrupt auftritt.

    2. Weiters muss Du beachten, dass Du eine genügend hohe Abtastrate hast (Shannon'sches Abtastheorem). Ausserdem kommt bei Dir nur dann ein Interrupt an, falls die Impulslänge einen Mindestwert erreicht.

    3. Messe mal die Pegel, es kann gut sein, dass da was faul ist

    4. Wie ist die Taktfrequenz des Prozessors? Du musst sicherstellen, dass Deine Interruptfrequenz unter ALLEN Umständen schneller abgearbeitet wird, als dass ein neuer Interrupt auftreten kann.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.382
    ich geh mal davon aus das er mind. 1 MHz hat sicherlich aber 8, das sollte doch net das problem sein ...
    ich vermute eher das die pegel nicht ausreichen, wie es bei mir fer fall war ....
    obwohl wenn cih so drüber nachdenke ...
    WENN deine lowphasen zwischen 2 pulsen IMMER den gleich abstand haben, ist es absolut logisch das du bei deiner schaltung IMMER den gleichen wert erhälst ...
    WENN die flanke fällt (IR-signal fällt ab) dann steigt die spannung am port! wenn die IR-Flanke hochgeht, fällt der widerstand, die spannung am port nimmt ab !!!
    d.h. du misst den abstand zwischen 2 Impulsen und wenn der modulationsbedingt immer gleich ist, ist logisch das du immer denselben wert misst ... dreh mal die polung um, VCC und GND tauschen (auch den transistor umdrehen)...
    das wäre jetzt den elktrisch logische schluss für mich wenn es nicht der pegel ist der ein problem bereitet (ich merke hier an, dass ich in elektrotechnik keine wirkliche leuchte bin)

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    30.06.2004
    Beiträge
    50
    Das mit den Interrupts auf jede Änderung reagieren hatte ich noch nicht probiert. Ist natürlich eleganter als beide Int zu benutzen.
    Ich habe den Atmega mit 8Mhz laufen.
    Abtastrate müsste hinkommen (nicht berechnet) da der Controller nnichts anderes macht als auf die Int zu warten.
    Warum kommt bei mir nur ein Interrupt an wenn die Impulslänge einen Mindestwert hat? Vom Pegel liege ich zwischen 4,5V und 0,5V, sollte also gehen.
    Die Anmerkung zum Spannungsteiler stimmt natürlich. Habe durch meine Anordnung umgekehrte Logik, Sendesignal 1 -> Eingang 0 und umgekehrt.

    Aber: ich habe ja zum Testen eine IR-LED konstant mit Vcc versorgt und gehe damit über den Empfänger. Daher dürfte die Abtastrate ja auf alle Fälle reichen und ich habe ja eigentlich immer andere Werte (Impulslängen).

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    30.06.2004
    Beiträge
    50
    Hallo,

    man muss nur mal mit netten Leuten wie euch darüber reden. Natürlich passt der Spannungsteiler nicht mit der Interrupt-Abfrage 0/1/0 überein da ja in unbeleuchteten Zustand 1 anliegt. Änderung der Flankenerkennung auf 1/0/1 funktioniert jetzt mit der IR-LED die ich von Hand vorbeibewege. Immer andere Werte, so wie es sich gehört.

    Nur ein 3 Khz PWM Signal das ich ja erkennen will oder zum Test mal eine TV-Fernbedienung genommen zeigt als Wert immer 126 an.
    D.h. der Zähler zählt bis 126, bei 8MhZ Taktung und Timer Teiler 1
    --> 8MhZ = 0,125 uS pro Timerwert
    --> 0,125uS * 126 = 15,75 uS
    --> 63,492 KhZ
    sind aber nur 3Khz PWM mit 3:1 Puls-Pausenverhältnis und irgendwas anderes bei der TV-Fernbedienung

    Wo kommt jetzt der gemessene Wert her und warum ist das gleich wie bei der Fernbedienung?


    Der Zähler zählt bis 126, bei 8MhZ Taktung und Timer Teiler 1
    --> 8MhZ = 0,125 uS pro Timerwert
    --> 0,125uS * 126 = 15,75 uS
    --> 63,492 KhZ
    sind aber nur 3Khz PWM mit 3:1 Puls-Pausenverhältnis und irgendwas anderes bei der TV-Fernbedienung


    3 khz = 333,33 uS pro Periode
    Puls-Pausenverhältnis 3:1
    333,33uS für 4 Teile
    --> Pause 83,33uS Puls 250uS

    Puls von 250uS / 0,125uS pro Timerwert würde bedeuten das ein Wert von 2000 angezeigt werden müsste und nicht 126

    Oder?

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    03.01.2008
    Alter
    33
    Beiträge
    51
    bis wieviel zählt so nen timer? 255? kann das von sowas kommen?
    1+1=0

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    30.06.2004
    Beiträge
    50
    Timer0 ist ein 8bit Zähler und bis 255, Timer1 ein 16 Bit, aber habe beide ausprobiert, beide gleiches Ergebnis und ich habe auch einen Übertrag gespeichert.
    Stellt man den Teiler der Zähler auf 1/8 ein ist das Ergebnis auch nur 1/8 von 126. Also scheint das System zu haben. Nur woher kommt der Wert?
    Habe jetzt mal mit nur einem Interrupt das Progr. geschrieben also wie der Vorschlag war, aber gleicher Effekt nur das jetzt immer 139 anstelle von 126 erscheint.

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •