I can fell it won't validate...
Eur, before you leave, please fix it !

Seb

2010/4/8 <[email protected]>

> Revision: 1896
> Author: eur.van.andel
> Date: Thu Apr  8 06:07:41 2010
> Log: added MCP3424 18 bits, four cahnnel delta-sigma I2C AD converter
> sample will follow with type K thermocouple and MCP9800 cold-juction
> compensation
>
> http://code.google.com/p/jallib/source/detail?r=1896
>
> Added:
>  /trunk/include/external/adc
>  /trunk/include/external/adc/mcp3424.jal
>
> =======================================
> --- /dev/null
> +++ /trunk/include/external/adc/mcp3424.jal     Thu Apr  8 06:07:41 2010
> @@ -0,0 +1,168 @@
> +-- Title: mcp342, 18-bit, multi-channel delta-sigma AD converter with I2C
> output
> +-- Author: Eur van Andel, [email protected] Copyright (c) 2010
> +-- Compiler: =2.4m
> +--
> +-- This file is part of jallib (http://jallib.googlecode.com)
> +-- Released under the ZLIB license (
> http://www.opensource.org/licenses/zlib-license.html)
> +--
> +-- Description: this library works with the MCP3424 AD converter from
> Microchip with up to 18 bits accuracy
> +-- Datasheet: DS22088B
> +
> +-- Declare this in main program:
> +
> +-- if you want to use more than one MCP3424, use the address pins:
> +-- const byte mcp3424_1_addr  = 0b1101_0000  -- both ADR0 and ADR1 tied to
> Vss
> +-- const byte mcp3424_2_addr  = 0b1101_1000  -- ADR0 tied to Vdd, ADR1
> tied to Vss
> +-- i2c setup
> +-- const word _i2c_bus_speed = 1 ; * 100kHz
> +-- const bit _i2c_level = true   ; i2c levels (not SMB)
> +-- include i2c_hardware
> +-- i2c_initialize()
> +
> +-- var byte i2c_tx_buffer[10]
> +-- var byte i2c_rx_buffer[10]
> +-- include i2c_level1            -- send_receive functions
> +
> +var byte config_reg
> +var bit _RDY   at config_reg : 7 = 1
> +var bit C1     at config_reg : 6 = 0
> +var bit C0     at config_reg : 5 = 0
> +var bit _O     at config_reg : 4 = 1
> +var bit S1     at config_reg : 3 = 0
> +var bit S0     at config_reg : 2 = 0
> +var bit G1     at config_reg : 1 = 0
> +var bit G0     at config_reg : 0 = 0
> +
> +
> +function mcp3424_set18bits(byte in address) return bit is
> +   var bit tx_ok
> +   S0 = true
> +   S1 = true
> +                   i2c_start()
> +   tx_ok =         i2c_transmit_byte(address)
> +   tx_ok = tx_ok & i2c_transmit_byte(config_reg)
> +                   i2c_stop()
> +   return tx_ok
> +end function
> +
> +
> +-- channel should be 1 .. 4, as per datasheet DS22088B page 18
> +-- if channel = 0, 1 is assumed. If channel is > 4, 4 is assumed
> +function mcp3424_set_channel(byte in address, byte in channel) return bit
> is
> +   var bit tx_ok
> +   var bit CH0    at channel : 0
> +   var bit CH1    at channel : 1
> +
> +   if channel > 4 then
> +      channel = 4
> +   elsif channel == 0 then
> +      channel = 1
> +   end if
> +   channel = channel - 1      -- scale from 0..3
> +
> +   C0 = CH0
> +   C1 = CH1
> +                   i2c_start()
> +   tx_ok =         i2c_transmit_byte(address)
> +   tx_ok = tx_ok & i2c_transmit_byte(config_reg)     -- config register
> address
> +                   i2c_stop()
> +   return tx_ok
> +end function
> +
> +
> +-- gain should be 1, 2, 4, 8, as per datasheet DS22088B page 18
> +-- gain = 0,1 -> 1 / 2 -> 2, 3,4 -> 4 / 5..255 -> 8
> +function mcp3424_set_gain(byte in address, byte in gain) return bit is
> +   var bit tx_ok
> +   if    gain < 2 then
> +      G0 = 0              -- gain = 1
> +      G1 = 0
> +   elsif gain < 3 then
> +      G0 = 1               -- gain = 2
> +      G1 = 0
> +   elsif gain < 5 then
> +      G0 = 0               -- gain = 4
> +      G1 = 1
> +   else
> +      G0 = 1               -- gain = 8
> +      G1 = 1
> +   end if
> +                   i2c_start()
> +   tx_ok =         i2c_transmit_byte(address)
> +   tx_ok = tx_ok & i2c_transmit_byte(config_reg)     -- config register
> address
> +                   i2c_stop()
> +   return tx_ok
> +end function
> +
> +
> +function mcp3424_get_16(byte in address) return word is
> +   var word temp
> +   var bit tx_ok
> +   tx_ok = i2c_send_receive(address, 0, 2)
> +   temp = word(i2c_rx_buffer[0]) << 8 + i2c_rx_buffer[1]
> +   return temp
> +end function
> +
> +
> +function mcp3424_get_18(byte in address) return sdword is
> +   var sdword temp
> +   var bit tx_ok
> +   var bit sign at i2c_rx_buffer[0] : 1
> +   tx_ok = i2c_send_receive(address, 0, 3)
> +   temp = (sdword(i2c_rx_buffer[0] & 0b0000_0001) << 16) +
> (sdword(i2c_rx_buffer[1]) << 8) + (i2c_rx_buffer[2])
> +   if sign then
> +      return -(0x02_00_00 - temp)       -- 0x2_00_00 or 2^17
> +   else
> +      return temp
> +   end if
> +end function
> +
> +
> +
> +-- gain should be 1, 2, 4, 8, as per datasheet DS22088B page 18
> +-- if gain = 0,1 -> 1 / 2 -> 2, 3,4 -> 4 / 5..255 -> 8
> +function mcp3424_microvolt(sdword in tcvalue, byte in gain) return sdword
> is
> +   var bit tx_ok
> +   var sdword temp
> +   if    gain < 2 then
> +      gain = 0             -- shift values
> +   elsif gain < 3 then
> +      gain = 1
> +   elsif gain < 5 then
> +      gain = 2
> +   else
> +      gain = 3
> +   end if
> +
> +   temp = tcvalue * 15625
> +   temp = temp >> gain        -- faster
> +   temp = temp / 1000
> +   return temp
> +end function
> +
> +-- gain should be 1, 2, 4, 8, as per datasheet DS22088B page 18
> +-- if gain = 0,1 -> 1 / 2 -> 2, 3,4 -> 4 / 5..255 -> 8
> +function mcp3424_millivolt(sdword in tcvalue, byte in gain) return sword
> is
> +   var bit tx_ok
> +   var sdword temp
> +   if    gain < 2 then
> +      gain = 0             -- shift values
> +   elsif gain < 3 then
> +      gain = 1
> +   elsif gain < 5 then
> +      gain = 2
> +   else
> +      gain = 3
> +   end if
> +
> +   temp = tcvalue * 15625
> +   temp = temp >> gain        -- faster
> +   temp = temp / 1_000_000
> +   return sword(temp)
> +end function
> +
> +
> +
> +
> +
> +
>
> --
> You received this message because you are subscribed to the Google Groups
> "jallib" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<jallib%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/jallib?hl=en.
>
>


-- 
Sébastien Lelong
http://www.sirloon.net
http://sirbot.org

-- 
You received this message because you are subscribed to the Google Groups 
"jallib" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/jallib?hl=en.

Reply via email to