logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Odczyt danych z czujnika ciśnienia MPL115A1

lolor 18 Mar 2011 19:09 2115 1
REKLAMA
  • #1 9292655
    lolor
    Poziom 12  
    Witam
    Czujnik MPL115A1 jest czujnikiem ciśnienia absolutnego z magistralą SPI, próbuję go obsłużyć z poziomu Bascoma, ale niestety bez sukcesu. podstawowe dane dotyczące tego czujnika można znaleźć na stronie producenta http://cache.freescale.com/files/sensors/doc/app_note/AN3785.pdf?fpsp=1 Próbowałem w Bascomie różnych kombinacji z komendami Spiin Spiout, Spimove, próbowałem połączyć się z czujnikiem poprzez Spi=Hard jak i Spi=Soft, niestety bez rezultatu.
    Procesor jakiego używałem to Atmega16, clock 4Mhz
    Znalazłem kod w C na Atmege328, ale niestety nie znam tego języka aby przerobić to na Atmego16 z obsługa LCD.
    Jeżeli ktoś ma jakieś doświadczenia z obsługa tego czujnika przy pomocy Bascoma proszę o pomoc.
    Link do kodu w C http://www.sparkfun.com/datasheets/BreakoutBoards/MPL115A1-ATmega328Code-8-9-10.zip
    Przykładowy kod z Bascoma z instrukcją Spimove
    
    
    $regfile = "m16def.dat"                                     ' CPU clock
    
    $crystal = 4000000                                          '$sim
    
    '-----------------LCD--------------------------------
    Config Lcd = 24 * 2
    
    'Testowa
    Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.6 , Rs = Portc.7
    Config Lcd = 24 * 2
    
    Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 128 , Noss = 0
    
    Dim P1 As Bit
    
    Dim Phigh As Byte
    Dim Plow As Byte
    Dim Thigh As Byte
    Dim Tlow As Byte
    Dim Adres As Byte
    
    
    Dim Rb1 As Byte
    Dim Rb2 As Byte
    Dim Rb3 As Byte
    Dim Rb4 As Byte
    Dim Rb5 As Byte
    
    Config Portb.7 = Output                                     'CLOCK
            Portb.7 = 0
    Config Portb.6 = Output                                     'DOut
            Portb.6 = 0
    Config Pinb.5 = Input                                       'DIn
            Portb.5 = 0
    Config Portb.4 = Output                                     'Cs
            Portb.4 = 1
    
    Spiinit
    Cursor Off
    Cls
    Lcd "START"
    Wait 1
    
    
    Do
    Cls
    Reset Portb.4
    
    Adres = &H24
         Rb1 = Spimove(adres)
         Rb1 = Spimove(&H00)
    
    
    Waitms 10
    
    
    
    
            Phigh = Spimove(&H80)
            Rb2 = Spimove(&H00)
            Plow = Spimove(&H82)
            Rb3 = Spimove(&H00)
            Thigh = Spimove(&H84)
            Rb4 = Spimove(&H00)
            Tlow = Spimove(&H86)
            Rb1 = Spimove(&H00)
            Rb5 = Spimove(&H00)
    Set Portb.4
    
    Toggle P1
       If P1 = 0 Then
          Locate 2 , 23
          Lcd "*"
       End If
    
        If P1 = 1 Then
          Locate 2 , 23
          Lcd " "
       End If
    Home
    Lcd "Ph=" ; Phigh ; " Pl=" ; Plow ; " Rb1=" ; Rb1 ; " Rb2=" ; Rb2;
    Lowerline
    Lcd "Th=" ; Thigh ; " Tl=" ; Tlow ; " Rb3=" ; Rb3 ; " Rb4=" ; Rb4;
    Wait 2
    Loop
    
  • REKLAMA
  • #2 10890172
    jariko
    Poziom 17  
    Dwa dni temu kupiłem ten przetwornik bo był tani :) Szukałem w sieci jak to ruszyć w Bascomie. W tym języku napisałem kilka programików, ale bardziej były to przeróbki gotowych z sieci. Szukałem i znalazłem tylko ten temat. Trochę przerobiłem i udało mi się pogadać z tym przetwornikiem ale tylko na tyle że odczytałem rejestry temperatury i ciśnienia. tak zmodyfikowałem program:

    $regfile = "m16def.dat"
    $crystal = 16000000

    Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Postc.5

    Config Lcd = 16 * 2

    Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 1 , Clockrate = 4 , Noss = 1

    Dim P As Word
    Dim T As Word
    Dim Phigh As Byte
    Dim Plow As Byte
    Dim Thigh As Byte
    Dim Tlow As Byte
    Dim Adres As Byte

    Dim Rb1 As Byte
    Dim Rb2 As Byte
    Dim Rb3 As Byte
    Dim Rb4 As Byte
    Dim Rb5 As Byte
    Dim Rb6 As Byte
    Dim Rb7 As Byte

    Config Portb.7 = Output
    Portb.7 = 0
    Config Portb.6 = Output
    Portb.6 = 0
    Config Pinb.5 = Input
    Portb.5 = 0
    Config Portb.4 = Output
    Portb.4 = 1

    Spiinit
    Cursor Off
    Cls
    Lcd "START"
    Waitms 200

    Set Portb.4

    Do
    Reset Portb.4
    Waitms 10
    Rb1 = Spimove(&H24)
    Rb2 = Spimove(&H00)
    set Portb.4
    Waitms 100
    Reset Portb.4

    Waitms 10
    Rb3 = Spimove(&H80)
    Phigh = Spimove(&H00)
    Rb4 = Spimove(&H82)
    Plow = Spimove(&H00)
    Rb5 = Spimove(&H84)
    Thigh = Spimove(&H00)
    Rb6 = Spimove(&H86)
    Tlow = Spimove(&H00)
    Rb7 = Spimove(&H00)
    Waitms 10

    Set Portb.4

    P = Phigh
    P = P * 256
    P = P + Plow
    P = P / 64

    T = Thigh
    T = T * 256
    T = T + Tlow
    T = T / 64

    Home
    Cls
    Lcd ; "P = " ; P
    Lowerline
    Lcd ; "T = " ; T
    Waitms 500

    Loop
REKLAMA