Bittrain einlesen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Bittrain einlesen

      Moin,

      hat schon mal Jemand einen digital-Sensor mit "Bittrain-Ausgabe" eingelesen?
      Bin gerade am planen, den LMT01-Q1 von TI zu programmieren.
      Der gibt die Temp-Werte über eine Kette von Pulsen aus, die man dann zählt und mit einer einfachen Formel die vom Sensor ermittelte TEmp errechnet.

      Was meint Ihr: Die Pulse Über Timercounter oder doch besser per Interrupt und Timer zählen?

      Gruss
      Peer
    • über den Counter geht es sicher komfortabler zu zählen, die Pulse sind auch recht kurz.
      Ich würde Timer1 als Counter einrichten und vielleicht noch Timer0 als Pulserkennung, um die Pulse zu synchronisieren.
      Dann wird bei Einteffen der Synchronisation der Counter ausgelesen und gelöscht für das nächste mal.
      Der Rest, also die Berechnung läuft dann asynchron in der Hauptschleife.
    • OK, ein Timer ist zwar komplett belegt für PWM-Signal (liegt dauern an für 4 Lüfter und einen Servo).
      Aber ich habe ja je zwei 8 und 16bit timer im 1281...oder gibt es dabei irgendwelche Einschränkungen?

      Was genau meinst Du mit Timer0 als Pulserkennung/Syncronisierung?

      Ich hatte vor, über einen Port die Spannung zu schalten, dann quasi am counter-Pin einfach auf die erste fallende Flange zu warten, einen zweiten Timer zu resetten und Pulse zu zählen, bis die maximal notwendigen 100ms (also ca. 90ms zählen) für einen Ausgabevorgang vorüber sind.

      So richtig?


      gruss
      Peer
    • Peer Gehrmann schrieb:

      Aber ich habe ja je zwei 8 und 16bit timer im 1281...oder gibt es dabei irgendwelche Einschränkungen?
      der Counter-Timer kann nur über den Tx Eingang getaktet werden. (x = Timernummer)

      Peer Gehrmann schrieb:

      Was genau meinst Du mit Timer0 als Pulserkennung/Syncronisierung?
      naja, einfach einen 8Bit-Timer, der bei Eintreffen der Pulse zurückgesetzt wird und bei Ausbleiben überläuft. Damit wird dann der Zähler-Wert gesichert und der Zähler für die Pulse zurückgesetzt

      Peer Gehrmann schrieb:

      Ich hatte vor, über einen Port die Spannung zu schalten, dann quasi am counter-Pin einfach auf die erste fallende Flange zu warten, einen zweiten Timer zu resetten und Pulse zu zählen, bis die maximal notwendigen 100ms (also ca. 90ms zählen) für einen Ausgabevorgang vorüber sind.
      ja, vielleicht geht es auch so, schau halt mal mit dem Oszi, wie lange die Pause dauert.
    • @Peer Gehrmann ,
      die einfachste Methode meiner Meinung nach waere der 16-bit Counter Eingang (T1,3,4).
      Stromversorgung ueber einen Portpin.
      Counter auf null, dann pin auf "1" 95 msek. warten, pin auf "0", counter auslesen und die
      Temperatur berechnen. Fertig.
      Da die Pulse mit einer Frequenz von 88 KHz jede 100 msek. ausgegeben werden, hat der counter kein Problem.
      Der Sensor zaehlt theoretisch bis 200 Grad, hat aber eine Lebensbegraenzung bei zirka 155 Grad C.
      75 Millisekunden Fenster ist auch genug.
      Gruss Hubert
    • @Galahat,
      ja, die Initialisierung dauert zirka 54 msek. Bei einer Anwendung fuer normale Luft- oder Raumtemperatur
      kann man annehmen,dass der Chip nur maximal bis 50 grad Celsius zaehlen muss. Also von -50 bis +50 sind es
      zirka 1640 Zaehlpulse bei 88KHz. Das sind dann 18.6 Millisekunden. 54+18.6=72.6. Selbst wenn theoretisch bis 200 Grad Celsius
      gezaehlt wuerde, das sind dann 54+46.5=100.5. Diese Rechnung geht aber nicht auf, weil der Sensor inzwischen
      schon bei 155 Grad kaput gegangen ist. Fazit ein Fenster von 75 Millisekunden sollte fuer zirka 60 Grad Umgebungstemperatur
      ausreichend sein. Ein laengeres Fenster als 100 Millisekunden wuerde die Zaehler (Counter) mit der naechsten Messung erhoehen
      und somit verfaelschen.
      Gruss,
      Hubert
    • hubert, was denn jetzt?

      hubertg schrieb:

      Da die Pulse mit einer Frequenz von 88 KHz jede 100 msek. ausgegeben werden, hat der counter kein Problem.

      hubertg schrieb:

      Nach 105 Sekunden wuerde sich der Counter bestimmt einige male Ueberschlagen. :)
      HUBERT
      Ich meine, wenn je Messung doch deutlich weniger Pulse eingehen als der Timer1 als counter packen kann und der Beginn ja durch Freigabe über Portpins gegeben wird, verstehe ich nicht warum es zu einer Verfälschung kommen sollte.

      ...Vom Smartphone.... Schwierig schwierig
    • @'Galahat,
      wenn der Portpin nicht vor dem Ablauf von 100 Millisekunden abgeschaltet wird,
      dann wird automatisch vom Sensor eine neue Sequenz gestartet und Zaehlerpulse ausgegeben.
      Wenn der Counter inzwischen nicht gelesen und auf "0" gesetzt ist, dann werden die Pulse
      auf die alten Werte addiert. Deshalb das maximale 100 Millisekunden Fenster.
      Man kann natuerlich ein sogenanntes Oversampling z.B. 1 Sekunde und das Mittel errechnen.
      Was aber bei einer Genauigkeit von 0,1 Grad nicht unbedungt noetig ist.
      Wuerde aber eine Uberwachung der Pulspausen zur Einhaltung der Sequenzen noetig Machen,
      damit man den korrekten Divisionsfaktor bekommt.
      Gruss
      Hubert

      P.S. Wenn aus werden, warden wird, oder im und I'm, dann war das mein schlauer Englisch schreibender Computer.
      Bitte um Entschuldigung.
    • hubertg schrieb:

      wenn der Portpin nicht vor dem Ablauf von 100 Millisekunden abgeschaltet wird,

      Sagte ja schon 'freigabe über Portpins'.
      Gut, dann sehen wir ja doch in die gleiche Richtung.

      hubertg schrieb:

      P.S. Wenn aus werden, warden wird, oder im und I'm, dann war das mein schlauer Englisch schreibender Computer.
      Bitte um Entschuldigung.
      Ahhh, deswegen auch keine Ös und üs usw. Okay.


      Edit: Einen Überlauf des Zählers würde ich jedoch obendrein nicht befürchten, da zwischen jeder Wertausgabe eine Pause, gegeben durch die Umsetzung, besteht.
      Glaube das wurde auch schon oben irgendwo bemerkt.
    • Mein Vorgehen ist jetzt der folgende (auch aus all den Gründen, die Ihr vorbringt):

      0. in Sub springen für den Pulscount-Vorgang,
      1. Port_1: Ausgabeport auf 1 (Strom für Sensor, Messung beginnt)
      2. Port_2: Interruptkanal enablen als Zähler + Var puls-train-counter=0
      3. Timer starten mit 20ms bis Überlauf (um die 40-50ms am Ende des Pulstrain sauber zu finden)

      Do...

      4. timer isr: Timer neu starten, solange im Interrupt puls-train-counter=0

      5. Interrupt isr:
      6. Pulstrain hochzählen, solange Vorgang läuft (also der Interrupt enabled ist)
      7. Timer resetten bei jedem Puls

      8. Wenn timer isr auslöst und puls-train-counter >0 dann
      aus der loop springen (die Pause hinter dem Pulstrain ist erreicht)

      loop...

      9. Timer stoppen, Interrupt stoppen...disablen
      10. Temperatur ermitteln aus dem Puls-count...

      That's it.

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Peer Gehrmann ()