Pages

Monday, May 27, 2013

MCP3208 testing program OK




I thought it might take me 1 day to debug the MCP3208 program.   Surprisingly it took me only 10 minutes.  I got the ADC value 2.499V or 2.5V as hoped.


pi@raspberrypi ~/fongtoy $ sudo python ftmain.py

*** Start Program - FongToy v1.24 tlfong01 2013may27 ***


*** Start testing MCP3208 ADC ***

ADC output byte 0 =  00000000
ADC output byte 1 =  00001001
ADC output byte 2 =  11000011
Analog voltage =  2.499

*** Stop testing MCP3208 ***


*** Stop Program ***

pi@raspberrypi ~/fongtoy $ date
Mon May 27 14:48:31 UTC 2013


# ftmain v1.24 tlfong01 2013may27

ProgramTitle = "FongToy v1.24 tlfong01 2013may27"

import sys
import time
import smbus
import pdb
import spidev
import wiringpi
import wiringpi2
import RPIO as GPIO
from RPIO import PWM
from enum import Enum
from subprocess import call

import ftgpio
import ftprint
import ftspi
import ftiox
import fteeprom
import ftguzuntypi
import ftdemux
import fttest
import ftadc

# *** Main program ***

# *** Start program message ***

ftprint.StartProgram(ProgramTitle)

# *** Troubleshooting functions ***

# *** GPIO tests v1.3 tlfong01 2013may23 ***
# ftgpio.TestLed()
# ftgpio.TestBuzzer()
# ftgpio.TestButtonEchoBuzzer()
# ftgpio.TestButtonEchoLed()

# *** SPI Tests v1.3 tlfong01 2013may23 ***

# ftspi.TestSpiLoopBack(spiChannelNumber = 0, spiChipEnableNumber = 1, testDataByte = 0x55, testCount = 1000, testTime = 0.001)
# ftiox.TestMcp23s17BlinkLed(spiChannelNumber = 0, spiChipEnableNumber = 0, spiChipSubAddress = 0)
# fteeprom.TestWriteReadEepormDataByte(spiChannelNumber = 0, spiChipEnableNumber = 1, startAddress = 0x0410, testDataByte = 0x55)
# ftguzuntypi.TestGuzuntyPi4digit7segmentLedModule(spiChannelNumber = 0, spiChipEnableNumber = 1)
# ftdemux.TestSelectSpiSlaveDevice(spiChannelNumber = 0, spiChipEnableNumber = 0, spiIoxSubAddress = 0, spiSlaveDeviceNumber = 5)
# fttest.TestDemuxEeprom(mcp23s17SubAddress = 0, eepromDemuxAddress = 2, testStartAddress = 0x0123, testWriteDataByte = 0x5a)
# fttest.TestDemuxEeprom(mcp23s17SubAddress = 0, eepromDemuxAddress = 1, testStartAddress = 0x0123, testWriteDataByte = 0x3b)
# fttest.TestDemuxEeprom(mcp23s17SubAddress = 0, eepromDemuxAddress = 0, testStartAddress = 0x0123, testWriteDataByte = 0x3b)

# *** Current test functions ***

# ftiox.TestMcp23s17BlinkLed(spiChannelNumber = 0, spiChipEnableNumber = 0, spiChipSubAddress = 0)
# ftdemux.TestSelectSpiSlaveDevice(spiChannelNumber = 0, spiChipEnableNumber = 0, spiIoxSubAddress = 0, spiSlaveDeviceNumber = 5)
# fttest.TestDemuxEeprom(mcp23s17SubAddress = 0, eepromDemuxAddress = 0, testStartAddress = 0x0123, testWriteDataByte = 0x3b)
# fttest.TestDemuxEeprom(mcp23s17SubAddress = 0, eepromDemuxAddress = 1, testStartAddress = 0x0411, testWriteDataByte = 0x4c)
# fttest.TestDemuxGuzuntyClock(mcp23s17SubAddress = 0, guzuntyClockDemuxAddress = 2, secondCount = 10)

# fttest.TestMcp320103(testTime = 0.1, testCount = 10)
# fttest.TestMcp320103(testTime = 0.01, testCount = 100)
# fttest.TestMcp320103(testTime = 0.05, testCount = 50)

# fttest.TestMcp320103(testTime = 0.1, testCount = 1)

# ftspi.TestSpiLoopBackV01(spiChannelNumber = 0, spiChipEnableNumber = 1, testDataByte = 0x55, testTime = 0.001, testCount = 60000)

# ftadc.TestMcp320101()

ftadc.TestMcp3208v01()

# *** Stop program message ***

ftprint.StopProgram()

#.END

# ftadc.py v1.4 tlfong01 2013may27

import spidev
import time

import ftprint
import ftspi

# *****************************************************************************
# Function - TestAdcMcp320801()
# Description -
# Sample call -
# *****************************************************************************

def TestMcp3208v01(): # v0.1 tlfong01 2013may27

    ftprint.PrintDoubleSpaceLine("*** Start testing MCP3208 ADC ***")  

    spiGuzuntyPi = spidev.SpiDev()
    spiGuzuntyPi.open(0, 1)

    controlTripleByteSingleEndChannel0 = [0x06, 0x00, 0x00]
    resultTripleByte = [0x00, 0x00, 0x00]
    resultTripleByte = spiGuzuntyPi.xfer2(controlTripleByteSingleEndChannel0)

    ftprint.PrintEightBitPattern("ADC output byte 0 = ", resultTripleByte[0])
    ftprint.PrintEightBitPattern("ADC output byte 1 = ", resultTripleByte[1])
    ftprint.PrintEightBitPattern("ADC output byte 2 = ", resultTripleByte[2])

    resultDecimal =  (resultTripleByte[1] * (2 ** 8)) + (resultTripleByte[2])

    resultVoltage = (float(resultDecimal) / 4096) * 4.096
   
    print "Analog voltage = ", resultVoltage

    spiGuzuntyPi.close()

    ftprint.PrintDoubleSpaceLine("*** Stop testing MCP3208 ***")

# *****************************************************************************
# Function - TestAdcMcp3201()
# Description -
# Sample call -
# *****************************************************************************

def TestMcp320101(): #v1.3 tlfong01 2013may23

    ftprint.PrintDoubleSpaceLine("*** Start testing MCP3201 ADC ***")  

    spiGuzuntyPi = spidev.SpiDev()
    spiGuzuntyPi.open(0, 1)

    DummyDoubleByteList = [0x00, 0x00]
    adcOutputDoubleByteList = [0x55, 0x55]
    adcOutputDoubleByteList = spiGuzuntyPi.xfer2(DummyDoubleByteList)

    ftprint.PrintEightBitPattern("ADC output byte 1 = ", adcOutputDoubleByteList[0])
    ftprint.PrintEightBitPattern("ADC output byte 2 = ", adcOutputDoubleByteList[1])

    adcDecimalValue = (adcOutputDoubleByteList[1] >> 1) + (adcOutputDoubleByteList[0] * (2 ** 7))

    # adcAnalogVoltage = (float(adcDecimalValue) / 4096) * 4.10 # without half voltage divider
    adcAnalogVoltage = ((float(adcDecimalValue) / 4096) * 4.10) * 2 # with half voltage divider
   
    print "Analog voltage = ", adcAnalogVoltage

    spiGuzuntyPi.close()

    ftprint.PrintDoubleSpaceLine("*** Stop testing MCP3201 ***")

# *****************************************************************************
# Function - TestAdcMcp3201()
# Description -
# Sample call -
# Sample output -
# *** Start testing MCP3201 ADC ***
# ADC output byte 1 =  00001011
# ADC output byte 2 =  11111111
# Analog voltage   3.07299804687
# *** Stop testing MCP3201 ***
# *****************************************************************************

def TestMcp320102(spiChannel):

    ftprint.PrintDoubleSpaceLine("*** Start testing MCP3201 ADC ***")  

    DummyDoubleByteList = [0x00, 0x00]
    adcOutputDoubleByteList = [0x55, 0x55]
    adcOutputDoubleByteList = spiChannel.xfer2(DummyDoubleByteList)

    ftprint.PrintEightBitPattern("ADC output byte 1 = ", adcOutputDoubleByteList[0])
    ftprint.PrintEightBitPattern("ADC output byte 2 = ", adcOutputDoubleByteList[1])

    adcDecimalValue = (adcOutputDoubleByteList[1] >> 1) + (adcOutputDoubleByteList[0] * (2 ** 7))

    # adcAnalogVoltage = (float(adcDecimalValue) / 4096) * 4.10 # without half voltage divider
    adcAnalogVoltage = ((float(adcDecimalValue) / 4096) * 4.10) * 2 # with half voltage divider
   
    print "Analog voltage = ", adcAnalogVoltage

    ftprint.PrintDoubleSpaceLine("*** Stop testing MCP3201 ***")


def TestMcp320103(spiChannel, testTime, testCount):

    ftprint.PrintDoubleSpaceLine("*** Start testing MCP3201 ADC ***")  

    for i in range(testCount):
        DummyDoubleByteList = [0x00, 0x00]
        adcOutputDoubleByteList = [0x55, 0x55]
        adcOutputDoubleByteList = spiChannel.xfer2(DummyDoubleByteList)
time.sleep(testTime)

    ftprint.PrintEightBitPattern("ADC output byte 1 = ", adcOutputDoubleByteList[0])
    ftprint.PrintEightBitPattern("ADC output byte 2 = ", adcOutputDoubleByteList[1])

    adcDecimalValue = (adcOutputDoubleByteList[1] >> 1) + (adcOutputDoubleByteList[0] * (2 ** 7))

    # adcAnalogVoltage = (float(adcDecimalValue) / 4096) * 4.10 # without half voltage divider
    adcAnalogVoltage = ((float(adcDecimalValue) / 4096) * 4.10) * 2 # with half voltage divider
   
    print "Analog voltage = ", adcAnalogVoltage

    ftprint.PrintDoubleSpaceLine("*** Stop testing MCP3201 ***")

# .END



No comments:

Post a Comment