-         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 26

Thema: MAX31855 via SPI ansprechen

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.07.2012
    Beiträge
    201

    MAX31855 via SPI ansprechen

    Anzeige

    Hallo,

    ich habe mir den MAX31855K bestellt um höhere Temperaturen messen zu können.

    Ich habe dazu relativ wenig im Netz gefunden.

    Evtl. hat jemand Erfahrungen oder ein Bascom Code schnipsel für mich.

    Vielen Dank

    mfG
    Mario

    https://datasheets.maximintegrated.c...s/MAX31855.pdf
    Wenn das die Lösung sein soll...
    ...will ich mein Problem zurück !!!

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.090
    Codeschnipsel hab Ich jetzt nicht aber im Prinzip sollte das so machbar sein:

    Letzlich ist die /CS Leitung auf 0 zu setzen ( ein Portpin auf 0 ) und die SPI muss 4 Bytes auslesen MSB first.
    Die SPI zu konfigurieren sollte mit Bascom kein Problem sein.
    Welches Bit hier welche Funktion hat steht in deinem Datenblatt auf Seite 10.

    Die einzelnen Bytes kannst Du ja entweder in zwei 16Bit Variablen oder eine 32 Bit Variable reintun.
    Beispiel 32Bit:
    /CS auf 0 setzen
    32 Bit Variable mit dem Wert 0 laden.
    Erstes Byte Lesen in die 32 Bit Variable reintun um 8Bit nach Links verschieben.
    Nächstes Byte mit einer Oder Verknüpfung mit der 32Bit Variablen verknüpfen und 8 Bit nach links verschieben.
    usw. bis das letze Byte gelesen und eingefügt wurde.
    Nach dem letzten Byte darf natürlich nicht mehr geschoben werden.
    /CS wieder auf 1 setzen.

    Die benötigten Daten dann mit Filtern und Verschieben ( UND Verknüpfung ) rausfiltern und umrechnen.

    Das sollte es gewesen sein.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.07.2012
    Beiträge
    201
    Hallo,

    Danke für deine Antwort.

    Ich hab ne weile nichts mehr mit MC´s gemacht, muss mich erstmal wieder rein finden. Das Modul hab ich noch nicht, kann also noch nichts testen.

    Was mir noch nicht klar ist, was ich mit den "Table 4. Thermocouple Temperature Data Format" und "Table 5. Reference Junction Temperature Data Format" (Seite 10.) mache. Müssen die miteinander verechnet werden, oder sind die Daten aus Tabelle 4 schon die Temperaturen am Messfühler.

    Vielen Dank

    mfG
    Mario
    Wenn das die Lösung sein soll...
    ...will ich mein Problem zurück !!!

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.090
    Ich meine es muss vererchnet werden:
    For a K-type thermocouple, the voltage changes by about 41μV/°C, which approximates the thermocouple characteristic with the following linear equation:VOUT = (41.276μV/°C) x (TR - TAMB)where VOUT is the thermocouple output voltage (μV), TRis the temperature of the remote thermocouple junction (°C), and TAMB is the temperature of the device (°C).

    Also vom Messwert des PT100 den Messwert des internen Temperatursesors abziehen und dann verrechnen.

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von Crazy Harry
    Registriert seit
    15.01.2006
    Ort
    Raum Augsburg - Ulm
    Beiträge
    1.260
    Vielleicht kannst du ja damit was anfangen:
    Code:
    Procedure ReadAT;
      Var Error       : Integer;
          JT          : Word;                             // Chip-Temperatur
          B1,B2,B3,B4 : Byte;
          Dummy       : Byte;
      Begin
        For Dummy:=0 to 1 do
          Excl(PortC,5+Dummy);
          SDelay(200);
          B1:=SPIInpByte1;
          B2:=SPIInpByte1;
          B3:=SPIInpByte1;
          B4:=SPIInpByte1;
          Error:=((256*Integer(B3))+Integer(B4)) and $0007;
          If Error>0
            then
              ATError[Dummy]:=Error;
            else
              ATError[Dummy]:=0;
            EndIf;
          JT:=((Word(B3)*256)+Word(B4)) SHR 8;
          If (B1 and $80)=$80
            then
              AT[Dummy]:=(-1*((((not((256*Integer(B1))+Integer(B2))) and $0FFF)+1) SHR 4))-JT+20;
            else
              AT[Dummy]:=(((256*Integer(B1))+Integer(B2)) SHR 4)-JT + 21;  // Temperatur-Korrektur
            EndIf;
          Incl(PortC,5+Dummy);
          EndFor;
      End ReadAT;
    PortC,5 und6 sind die /CS der beiden MAX (ich hatte 2 in der Schaltung).

    Harry
    Ich programmiere mit AVRCo

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.07.2012
    Beiträge
    201
    Danke, euch beiden...

    @crazy Harry, ich hab keine Ahnung... das ist PASCAL, oder?

    Ok, die 32Bit werden in 4 Bytes übertragen.

    Ich versuche das mal zu entschlüsseln, vorallem die Rechnung da unten...
    Leider ist das Modul noch nicht da, deswegen mach ich erst mal paar "Trockenübungen".

    mfG
    Mario
    Geändert von dj_cyborg (13.08.2020 um 07:40 Uhr)
    Wenn das die Lösung sein soll...
    ...will ich mein Problem zurück !!!

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    31.05.2009
    Beiträge
    267

    Idee

    Dieser kurze Code ist für einen MAX31855SA geschrieben:

    '************************************************* ******************************
    ' Test Display ST7565 128x64
    ' Hardware: EA DOGxL128-6
    '
    ' Display works with 3,3V Level
    '
    ' use 1024 Byte Daten Buffer
    '
    ' Date:22.05.2014
    ' By Hkipnik
    ' © Copyright by H.Kipnik 2012
    ' Date 14.01.2015
    ' Email: Hkipnik@aol.com
    '
    '************************************************* ******************************

    '************************************************* ******************************
    'MAX 31855SA
    '2016 by WL
    '************************************************* ******************************


    $regfile = "m328pdef.dat"
    $crystal = 16000000
    $hwstack = 150
    $swstack = 150
    $framesize = 200

    '************************************************* ******************************

    Config Portd.3 = Output 'DISPLAY_CS
    Lcd_cs Alias Portd.3

    Config Portc.2 = Output 'DISPLAY_A0
    Lcd_rs Alias Portc.2

    Config Portc.0 = Output 'DISPLAY_SI
    Data_out Alias Portc.0

    Config Portc.1 = Output 'DISPLAY_SCK
    Lcd_clk Alias Portc.1

    Config Portc.3 = Output 'DISPLAY_Reset
    Lcd_rst Alias Portc.3

    'Config Graphlcd = 128 * 64eadogm , Cs1 = Portd.3 , A0 = Portc.2 , Si = Portc.0 , Sclk = Portc.1 , Rst = Portc.3

    Config Spi = Hard , Interrupt = Off , Data_order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 16 , Noss = 1

    Spiinit

    Config Portb.2 = Output
    Max_cs Alias Portb.2
    Max_cs = 1

    $include "Eadog128declaration.inc" 'Declaration SUB

    Call Lcd_init() 'Init Display

    '************************************************* ******************************

    'use for Demo

    Dim Text11 As String * 40
    Dim Temp_s As Single

    Dim Element As Integer
    Dim Element_l As Byte At Element Overlay
    Dim Element_h As Byte At Element + 1 Overlay
    Dim Referenz As Integer
    Dim Referenz_l As Byte At Referenz Overlay
    Dim Referenz_h As Byte At Referenz + 1 Overlay

    Call Lcd_clear(white)

    Do

    Max_cs = 0
    Spiin Element_h , 1
    Spiin Element_l , 1
    Spiin Referenz_h , 1
    Spiin Referenz_l , 1
    Max_cs = 1


    Text11 = Bin(referenz)
    Call Lcd_text(text11 , 0 , 25 , 1)

    Text11 = Bin(element)
    Call Lcd_text(text11 , 0 , 35 , 1)

    Shift Referenz , Right , 4
    Temp_s = Referenz \ 16
    'Text11 = Str(temp_s)
    Text11 = Fusing(temp_s , "#.#")
    Call Lcd_text(text11 , 10 , 5 , 2)

    Shift Element , Right , 2
    Temp_s = Element \ 4
    'Text11 = Str(temp_s)
    Text11 = Fusing(temp_s , "#.#")
    Call Lcd_text(text11 , 10 , 45 , 2)

    Call Lcd_show()
    Waitms 500


    Loop

    End
    $include "Eadog128-6.inc"
    'include used fonts
    $include "Font\font8x8.font"
    $include "Font\font16x16.font"
    $include "Font\My12_16.font"

    Die Ausgabe (EADOG-LCD) musst Du dir weg denken.
    Dann bleibt nicht mehr viel übrig............
    mfG
    Willi

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.07.2012
    Beiträge
    201
    tausend Dank...

    schade das ich´s noch nicht testen kann...

    Welche Temperaturen habt ihr damit so gemessen? Ich hatte vor, Temperaturen von über 1000°C zu messen gibt dazu evtl. Erfahrungen/Hinweise? (z.B.: Genauigkeit , müssen die werte noch geglättet /gefiltert werden?, Korrekturfaktoren?)

    mfG
    Mario
    Wenn das die Lösung sein soll...
    ...will ich mein Problem zurück !!!

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von Crazy Harry
    Registriert seit
    15.01.2006
    Ort
    Raum Augsburg - Ulm
    Beiträge
    1.260
    @Mario: Ja das ist Pascal

    Gemessen wurde die Ausgangstemperatur eines Turboladers.
    Ich programmiere mit AVRCo

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    31.05.2009
    Beiträge
    267
    Das ganze ist letztendlich eine Steuerung/Regelung für einen Keramik-Brennofen (1280°C) geworden.
    Ein entsprechender Filter ist vorteilhaft.
    Zur Genauigkeit kann ich nichts sagen.
    Kommt im Keramikbereich auch nicht auf 1° an.
    Mit der Referenztemperatur die Raumtemperatur kompensieren und gut ist.
    mfG
    Willi

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. LCD über I2C ansprechen
    Von Reissdorf im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 30.12.2012, 19:48
  2. RFM ansprechen
    Von runner02 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 11.03.2012, 11:01
  3. PCF 8474 ansprechen ?
    Von Goliath im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 23.03.2008, 14:17
  4. USB Ansprechen
    Von DHigh im Forum Software, Algorithmen und KI
    Antworten: 8
    Letzter Beitrag: 05.10.2006, 20:37
  5. RS232 ansprechen
    Von Goblin im Forum Software, Algorithmen und KI
    Antworten: 3
    Letzter Beitrag: 25.04.2005, 08:24

Stichworte

Berechtigungen

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