- 3D-Druck Einstieg und Tipps         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 25

Thema: Mehrere TSic auslesen

  1. #11
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    31.05.2009
    Beiträge
    270
    Anzeige

    Powerstation Test
    ....kannst Du Dir hier einen Reim draus machen ?
    Ich werde das nochmal testen.
    Die passenden Temperaturen haben wir ja jetzt.

    - - - Aktualisiert - - -

    Bei mir läuft es prima.........

    Ich lese gerade im Datenblatt:
    RL >= 10KOhm !!!!

    Ich kann deinen Fehler nachstellen wenn ich den Ausgang mit den 6,8KOhm gegen 0V belaste (gegen +5V dagegen nicht).
    Der TSIC ist da wohl ein wenig schwach auf der Brust.

    Lass den Widerstand einfach weg wenn Du nur einen Sensor am Mega hast !

    Oder wenn du mehrere benutzt und die Leitungslänge nicht zu groß ist benutze den internen Pull-Up.
    mfG
    Willi

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    18.07.2010
    Beiträge
    11
    Hallo WL,

    toll das Du Dich so schnell gemeldet hast und noch mal dem Problem widmest.
    Ich habe nur einen Sensor an PIND.2 (INT0) , ohne jeglichen Widerstand dazwischen und auch nicht
    gegen Masse oder Plus. Signal direkt an PIND.2 .
    Der Portpin ist als Eingang deklariert und Pull-Up Widerstand ausgeschalten.

    Im Netz habe ich noch einen Hinweis gefunden:
    ... bei Temperaturen unter 0° ist das N-Flag durch die Subtraktion schon gesetzt. ...

    Was das zu bedeuten hat, kann ich nicht sagen, da ich doch eher uC-Anfänger bin.
    ... richtig, bei diesen Außentemperaturen kann man unter realen Bedingungen Testen.
    Werde ich jetzt auch noch einmal machen. Wider erwarten wird sich der Fehler aber
    nicht behoben haben.
    Den Code den ich benutze, ist der von Dir WL, für einen Sensor.

    Gruß
    berger38

  3. #13
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    31.05.2009
    Beiträge
    270
    Zitat Zitat von berger38 Beitrag anzeigen
    Im Netz habe ich noch einen Hinweis gefunden:
    ... bei Temperaturen unter 0° ist das N-Flag durch die Subtraktion schon gesetzt. ...
    ?????
    Das bezieht sich auf einen anderen Code ? Oder ist damit der resultierende (X °C) Wert gemeint ?
    Sicher ist dann bei negativen Temperaturen auch das N-Flag gesetzt.

    Der Sensor liefert in den 11 Bit Werte von 0 (-50°C) über 0x200 (0°C) bis 0x7FF (+150°C).
    Da ist in einer 16 Bit-Variable nichts negativ !

    Lass Dir die Var. "InRegister" mal ausgeben. Springen die Werte da auch ?
    Wenn ja, ist das Problem wohl eher in der Hardware zu suchen.
    mfG
    Willi

  4. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    18.07.2010
    Beiträge
    11
    Hallo WL,

    also, ich habe hier 2 Tsic306, der Eine steckt in einem Steckboard mit LCD-Display und Mega8.
    Der Andere hängt an einer 2m Strippe und ist an einer fertig aufgebauten Schaltung angeschlossen.
    Projekt LED-Thermometer, an dem ich nun schon einige Wochen sitze. Sollte höchstens 1 bis 2 Wochen dauern.
    Dieses LED-Thermom. hat einen SAA1064, vier etwas größere 7Segment-LEDs und einen tiny44 (wegen I2C).
    Weiterhin habe ich noch zwei Netzteile (ein 5V-Schaltnetzteil und ein Trafonetzteil mit 7805), die abwechselnd
    an beiden Schaltungen angeklemmt waren.
    Ich dachte schon das ich den Fehler gefunden habe, denn jedesmal wenn ich das Schaltnetzteil an das Steckboard
    angeschlossen habe, zeigte die LCD-Anz. springende Werte. Beim Trafonetzteil war das nicht so.
    Nun habe ich das Trafonetzteil an das LED-Therm. angeschlossen (weil hier sonst immer das Schaltnetzteil angelötet
    war) und dachte das jetzt alles funktioniert.
    Die Enttäuschung war groß, die Anzeige-Werte springen weiterhin. Am Netzteil liegt es jedenfalls beim LED-Therm. nicht.

    Die Variable "InRegister" beim LED-Therm. ausgeben lässt sich erstmal nicht realisieren.
    Am Besten ist, ich schicke hier mal den gesamten Code vom LED-Thermometer rüber.
    Vielleicht habe ich dort einen Fehler gemacht und Du kannst mir einen Tipp zur Verbesserung geben.
    O.k., die vielen If Then Anweisungen sind peinlich, aber als Anfänger wuste ich mir nicht anders zu helfen.

    Gruß
    berger38

    Code:
    '  LED_Thermometer.bas
    
    
    $regfile = "attiny44.dat"                                                ' ...............................................specify the used micro
    $crystal = 12000000                                                         ' ....................................................externer Quarz mit 12MHz
    $hwstack = 40                                                                        ' ...........................................................default use 40 for the hardware stack
    $swstack = 16                                                                        ' ...........................................................default use 10 for the SW stack
    $framesize = 32                                                                      ' ..........................................................default use 32 for the frame space
    
    Ddrb = &B0000
    Portb = &B0000
    Ddra = &B11111111
    Porta = &B10101111
    
    Config Sda = Porta.6
    Config Scl = Porta.4
    
    Config Int0 = Falling
    On Int0 Int0int
    Enable Int0
    
    Enable Interrupts
    
    Dim Inregister As Word
    Dim Bitzaehler As Byte , Parity1 As Byte , Parity2 As Byte
    Dim Parity_z1 As Byte , Parity_z2 As Byte , I As Byte
    Dim Parity_err As Byte , Messungok As Bit
    Dim Timeout As Word , Io As Byte
    Dim Zahl As Word
    Dim Ziffer1 As Integer , Ziffer2 As Integer , Ziffer3 As Integer
    Dim Rest1 As Integer
    Dim Hz1 As Integer , Hz2 As Integer
    Dim Temperatur As Single
    Dim Wert1 As Integer
    Dim Wert2 As Integer
    Dim Minus As Single
    Dim Digi1 As Byte , Digi2 As Byte , Digi3 As Byte , Digi4 As Byte
    
    Do
         Io = 1                                                                                                            '...............................................................wir nehmen mal an das alles gut wird
       Gosub Neuemessung                                                                     '............................................Neue Messung vorbereiten
    
       Do
          Waitms 1 : Incr Timeout
       Loop Until Messungok = 1 Or Timeout > 200                     '.............Telegramm abwarten / "MessungOK" wird in "Int0Int:"
       If Timeout > 200 Then                                                                                   '..........................................generiert
           Io = 0 : Temperatur = -99                                                                      '.....................................!!! FEHLER !!!
       End If
    
               Wert1 = Temperatur                                                                                 '.............................................Dezimalzahl in ganze Zahl umgewandelt
    
           If Wert1 >= 0 Then Minus = 0                                                            '.................................wird als 0.0 angezeigt
           If Wert1 <= -1 Then Minus = -                                                          '................................wird als -0.0 angezeigt
           If Wert1 >= 0 Then Wert2 = Wert1                                              '..........................positiver Wert bleibt positiv zum Rechnen
           If Wert1 <= -1 Then                                                                                       '.............................................zum Rechnen muss hier negativer Wert
              Wert2 = Abs(wert1)                                                                                    '..............................................in positiven Wert umgewandelt werden
           End If
    
                Zahl = Wert2                                                                                             '.......................................................Umwandlung in Word zum besseren Rechnen
    
             Ziffer1 = Zahl / 100                                                                               '..............................................Rechenzyklus um eine max. 3 stellige Zahl
                 Hz1 = Ziffer1 * 100                                                                            '..............................................in ihre einzelnen Ziffern zu zerlegen
               Rest1 = Zahl - Hz1
             Ziffer2 = Rest1 / 10
                 Hz2 = Ziffer2 * 10
             Ziffer3 = Rest1 - Hz2
             Waitms 200
    
    
             If Minus = - Then Digi1 = &H40
             If Minus = 0 Then Digi1 = &H00
             If Ziffer1 = 0 Then Digi2 = &H00
             If Ziffer1 = 1 Then Digi2 = &H06
             If Ziffer1 = 2 Then Digi2 = &H5B
             If Ziffer1 = 3 Then Digi2 = &H4F
             If Ziffer1 = 4 Then Digi2 = &H66
             If Ziffer1 = 5 Then Digi2 = &H6D
             If Ziffer1 = 6 Then Digi2 = &H7D
             If Ziffer1 = 7 Then Digi2 = &H07
             If Ziffer1 = 8 Then Digi2 = &H7F
             If Ziffer1 = 9 Then Digi2 = &H6F
    
    If Ziffer2 = 0 Then Digi3 = &H3F + 128
             If Ziffer2 = 1 Then Digi3 = &H06 + 128
             If Ziffer2 = 2 Then Digi3 = &H5B + 128
             If Ziffer2 = 3 Then Digi3 = &H4F + 128
             If Ziffer2 = 4 Then Digi3 = &H66 + 128
             If Ziffer2 = 5 Then Digi3 = &H6D + 128
             If Ziffer2 = 6 Then Digi3 = &H7D + 128
             If Ziffer2 = 7 Then Digi3 = &H07 + 128
             If Ziffer2 = 8 Then Digi3 = &H7F + 128
             If Ziffer2 = 9 Then Digi3 = &H6F + 128
    
             If Ziffer3 = 0 Then Digi4 = &H3F
             If Ziffer3 = 1 Then Digi4 = &H06
             If Ziffer3 = 2 Then Digi4 = &H5B
             If Ziffer3 = 3 Then Digi4 = &H4F
             If Ziffer3 = 4 Then Digi4 = &H66
             If Ziffer3 = 5 Then Digi4 = &H6D
             If Ziffer3 = 6 Then Digi4 = &H7D
             If Ziffer3 = 7 Then Digi4 = &H07
             If Ziffer3 = 8 Then Digi4 = &H7F
             If Ziffer3 = 9 Then Digi4 = &H6F
    
             I2cstart                                                                                                 '.................................................................I2c-Bus starten
             I2cwbyte &H70                                                                                  '.......................................................schreibe Empfangsadresse
             I2cwbyte &H00                                                                                  '.......................................................schreibe Register-Adresse
             I2cwbyte &H27                                                                                  '.......................................................schreibe Einstellungen, auch LED-Helligkeit
             I2cwbyte Digi1                                                                                 '........................................................Digit 1 =     ( z.B. Ziffer 2 )
             I2cwbyte Digi2                                                                                 '........................................................Digit 2 =     ( z.B. Ziffer 3 )
             I2cwbyte Digi3                                             '........................................................Digit 3 =     ( z.B. Ziffer 7 )
             I2cwbyte Digi4                                             '........................................................Digit 4 =     ( z.B. Ziffer 9 )
             I2cstop                                                                                                  '..................................................................Ende der Durchsage
    Loop
    
    Neuemessung:
    Timeout = 0
    Messungok = 0
    Parity_err = 0
    Inregister = 0
    Bitzaehler = 0
    Parity_z1 = 0
    Parity_z2 = 0
    Return
    
    Int0int:
    
    Incr Bitzaehler
    
    Select Case Bitzaehler
       Case 1                                                                                                               '...........................................................................Start-Bit MSB
    
       Case 2 To 9                                                                                                 '....................................................................Daten MSB
          Waitus 60                                                                                                   '.......................................................................ungefähr Mitte (gesamt-Bitbreite=125µs)
          Shift Inregister , Left
          If Pinb.2 = 1 Then                                            '............................................................Bit="1" ?
             Inregister = Inregister Or 1                                                    '................................................dann rein damit
             Incr Parity_z1                                                                                       '.................................................................."1"-Bits zählen
          End If
    
       Case 10                                                                                                              '..........................................................................Parity-Bit MSB
          Waitus 60
          Parity1 = Parity_z1 Mod 2                                                         '..................................................gerade ?
          If Pinb.2 = 1 And Parity1 = 0 Then
             Incr Parity_err                                                                                       '..................................................................FEHLER !
          End If
    
       Case 11                                                           '..........................................................................Start-Bit LSB
    
       Case 12 To 19                                                                                             '.................................................................Daten LSB
          Waitus 60                                                                                                   '.......................................................................ungefähr Mitte (gesamt-Bitbreite=125µs)
          Shift Inregister , Left
          If Pinb.2 = 1 Then                                                                               '............................................................Bit="1" ?
             Inregister = Inregister Or 1                                                      '................................................dann rein damit
             Incr Parity_z2                                                                                      '................................................................."1"-Bits zählen
          End If
       Case 20                                                                                                          '.........................................................................Parity-Bit LSB
          Waitus 60
          Parity2 = Parity_z2 Mod 2                                                       '.................................................gerade ?
          If Pinb.2 = 1 And Parity2 = 0 Then
             Incr Parity_err                                                                                     '.................................................................FEHLER !
          End If
    
          If Parity_err = 0 Then
             Temperatur = Inregister * 250
             Temperatur = Temperatur / 256
             Temperatur = Temperatur - 500            
             Temperatur = Temperatur
             Parity_err = 0
             Inregister = 0
             Bitzaehler = 0
             Parity_z1 = 0
             Parity_z2 = 0
             Messungok = 1
             Waitms 3
          Else
            Temperatur = -99
            Io = 0                                                                                                  '......................................................................Parity-Fehler
          End If
    
    End Select
    Return
    
    
    '.............so ist es etwas übersichtlicher !..................
    Geändert von 5Volt-Junkie (30.01.2013 um 07:36 Uhr)

  5. #15
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    31.05.2009
    Beiträge
    270
    Zitat Zitat von berger38 Beitrag anzeigen
    Die Variable "InRegister" beim LED-Therm. ausgeben lässt sich erstmal nicht realisieren.
    Bestimmt aber in der LCD-Version.

    Zitat Zitat von berger38 Beitrag anzeigen
    If Minus = - Then Digi1 = &H40
    Was der Compiler so alles schluckt !!!
    Sollte bestimmt "If Minus < 0" werden.

    Zitat Zitat von berger38 Beitrag anzeigen
    Wert1 = Temperatur '.............................................Dezi malzahl in ganze Zahl umgewandelt
    An dieser Stelle könntest Du mal Wert1 mit einer Variablen füttern die von z.B. -200 bis +200 (-20°C bis +20°C) läuft und damit deine Ausgabe auf die Anzeige überprüfen.

    Leider habe ich die nächsten Tage wenig Zeit um das alles nachzuvollziehen.

    Vielleicht hat aber jemand anderes.....................
    mfG
    Willi

  6. #16
    Neuer Benutzer Öfters hier
    Registriert seit
    18.07.2010
    Beiträge
    11
    Hallo an WL und an die Runde,

    habe Deinen Rat beherzigt und beim LED_Thermom. (mit ISP Interface) Wert1 mit einer Var.X durch Incr hochzählen und mit Decr wieder
    runterzählen lassen, öfters und in mehreren Geschwindigkeiten. Die Anzeige war immer ohne Störungen, auch mit Minus-Vorzeichen.
    Dann hab ich das LCD_Thermom. umgebaut, statt Mega8 jetzt mit tiny44 und den original zacwire-Code für 1 Sensor geladen.
    Den Sensor mit der 2m Strippe bei <-10°C aus dem Fenster gehängt und beobachtet.
    Auch hier lief alles reibungslos, keine zappelnden Werte, Minus-Anzeige in Ordnung.
    Nun nahm ich wieder das LED-Thermom., die 2m Strippe hier dran und siehe da, die Werte und Minus haben wieder fantasiert.
    Als nächstes tauschte ich mal die Sensoren, den vom Steckboard jetzt an die 2m Strippe (nur mal so zum testen).
    Auf einmal funktionierte das LED-Thermom., auch längere Zeit ohne zu mucken. Ich habe mich schon gefreut.
    Dann kam ich auf den Gedanken, den Sensor mal in das Gefrierfach vom Kühlschrank zu packen. Dort sollen ja mehr als
    -18°C sein. Gesagt, getan. Hier ging der Fall der Temperaturwerte zusehens schneller als am Fenster.
    Ich dachte ich seh nicht recht, ab -13°C fingen auch hier die Werte und das Minus an zu zappeln. Also, zu früh gefreut.
    Ergebnis: ein Sensor wird schon mal ab -4 bis -5°C instabiel und der Andere ab ca. -13°C . Ich bin erstmal bedient.
    Was ist denn hier los, ist das nun ein Software oder Hardware Problem. Bei Plustemperaturen funktioniert immer alles.
    Nach einer schöpferischen Pause, werde ich mal versuchen den Tsic auf anderem Wege auszulesen. Der Hersteller zeigt
    in seinem Datenblatt ja eine andere Variante. Aber ob ich das packe weiß ich nicht.
    Vor 25 oder 30 Jahren war Thermometer bauen noch einfach, ein A/D-Wandler, ein BCD-Decoder IC mit multiplex LED-Anzeige
    und fertig. Heute brauch man ein abgeschlossenes Hochschulstudium in Informatik und vor allem perfekte Englisch-Kenntnisse.
    Egal, bis hier her erst einmal recht herzlichen Dank WL für Deine Unterstützung.
    Sollte ich in dieser Sache (LED-Thermometer) irgendwann zu einem guten Ergebnis gekommen sein, melde ich mich hier.

    Mit besten Grüßen
    berger38

  7. #17
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    31.05.2009
    Beiträge
    270
    Hallo Berger38,

    Ich habe in anderen Beiträgen zum TSIC den Hinweis gefunden das die "Baudrate" sehr variabel sein soll (50-200% !!!).
    Ich habe die Bitbreite (125µs) bei Raumtemperatur ermittelt.

    Hast Du ein Oszilloskop um das Tastverhältnis (bei den kritischen Temperaturen) zu messen ?

    Wenn nicht, spiel mal an den Wait's:


    Code:
    Int0int:
    
    .
    .
    .
    .
    Case 2 To 9 '....................................................................Daten MSB
    Waitus 60 '.......................................................................ungefähr Mitte (gesamt-Bitbreite=125µs)
    Shift Inregister , Left
    If Pinb.2 = 1 Then '............................................................Bit="1" ?
    Inregister = Inregister Or 1 '................................................dann rein damit
    Incr Parity_z1 '.................................................................."1"-Bits zählen
    End If
    
    Case 10 '..........................................................................Parity-Bit MSB
    Waitus 60
    Parity1 = Parity_z1 Mod 2 '..................................................gerade ?
    If Pinb.2 = 1 And Parity1 = 0 Then
    Incr Parity_err '..................................................................FEHLER !
    End If
    
    Case 11 '..........................................................................Start-Bit LSB
    
    Case 12 To 19 '.................................................................Daten LSB
    Waitus 60 '.......................................................................ungefähr Mitte (gesamt-Bitbreite=125µs)
    Shift Inregister , Left
    If Pinb.2 = 1 Then '............................................................Bit="1" ?
    Inregister = Inregister Or 1 '................................................dann rein damit
    Incr Parity_z2 '................................................................."1"-Bits zählen
    End If
    Case 20 '.........................................................................Parity-Bit LSB
    Waitus 60
    Parity2 = Parity_z2 Mod 2 '.................................................gerade ?
    If Pinb.2 = 1 And Parity2 = 0 Then
    Incr Parity_err '.................................................................FEHLER !
    End If
    Sollte das nicht fruchten muß ich einen Timer bemühen............
    Geändert von 5Volt-Junkie (30.01.2013 um 07:35 Uhr)
    mfG
    Willi

  8. #18
    Neuer Benutzer Öfters hier
    Registriert seit
    18.07.2010
    Beiträge
    11
    .... Danke Willi für Dein Engagement, lass es gut sein. Bemühe Dich nicht weiter in dieser meinen Angelegenheit.
    Wenn es bei Dir gut funktioniert ist es doch o.k.. Ich gebe hier erst einmal auf.
    Seit ca. 30min hängt der Sensor im Tiefkühlfach, angeschlossen am LCD-Therm. mit original zacwire Code.
    Es zeigt -22,3°C und bis jetzt hat die Anzeige noch nicht gezappelt. Das wird schon alles Funktionieren, auch mit der
    Erfassung des 60us Zeitfensters.
    Der Fehler bei der LED-Variante wird wohl in meinen vielen Umrechnungs-u. Umbennenungsroutinen liegen.
    Ich glaube da passt irgendwas nicht.
    Ja, ich habe einen Oszi und ja ich hatte mir die letzten Tage mal das Signal vom Sensor angesehen.
    Konnte aber keinen Makel feststellen. Auch die Tastverhälnisse der einzelnen Bits konnte ich erkennen.
    Ist nämlich nicht ganz einfach gewesen. Der Oszi ist schon etwas altersschwach, EO211 von RFT (reicht fünf Tage).
    Direkt zum Messen kaum geeignet, aber zur Signalkontrolle reicht er noch.
    Da das Datenpaket alle 100ms (10Hz) vom Tsic ausgesendet wird, hat die Anzeige auf dem Oszi auch ganz schön
    geflackert. Der ist fast 30 Jahre alt und hat sich eher kaputt gestanden.
    Wie gesagt, ich klink mich hier erst mal aus und wünsche Dir und Euch ein angenehmes Wochenende.

    mfg
    Lutz

  9. #19
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    31.05.2009
    Beiträge
    270
    o.K. , ich bin schon still........................
    mfG
    Willi

  10. #20
    RN-Premium User Roboter Genie Avatar von 5Volt-Junkie
    Registriert seit
    06.03.2008
    Alter
    37
    Beiträge
    947
    Für Quellcode bitte den Button "[CODE]" (Raute Symbol) verwenden

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

12V Akku bauen