- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 26

Thema: MAX31855 via SPI ansprechen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von Crazy Harry
    Registriert seit
    15.01.2006
    Ort
    Raum Augsburg - Ulm
    Beiträge
    1.308
    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

  2. #2
    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 08:40 Uhr)
    Wenn das die Lösung sein soll...
    ...will ich mein Problem zurück !!!

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    31.05.2009
    Beiträge
    270

    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

  4. #4
    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 !!!

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

    Gemessen wurde die Ausgangstemperatur eines Turboladers.
    Ich programmiere mit AVRCo

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    31.05.2009
    Beiträge
    270
    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

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.07.2012
    Beiträge
    201
    Danke für eure Antworten...

    @Wl, darum soll es bei mir auch gehen... Kannst du mir bitte ein paar Eckdaten zu deinem Projekt nennen? Hast du auch den Brennofen selber gebaut?

    Erste Überlegungen sind:
    -Brennraum ca. 30x30x30cm
    -20m 1,2mm Kanthaldraht
    -SSRelais (PWM 100Hz)
    -MAX31855 mit K-Type Sensor

    Mit welcher Frequenz hast dein Relais (SSR?) angesteuert?

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

Ähnliche Themen

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

Stichworte

Berechtigungen

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

Labornetzteil AliExpress