Pages

Wednesday, May 22, 2013

fongtoy modules update - ftmain, ftgpio, ftprint

# ftmain v1.21 tlfong01 2013may22

ProgramTitle = "FongToy v1.22 tlfong01 2013may22 "

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

# *** Main program ***

# *** Start program message ***

ftprint.StartProgram(ProgramTitle)

# *** Troubleshooting tests ***

# *** GPIO tests ***
# ftgpio.TestLed()
# ftgpio.TestBuzzer()
# ftgpio.TestButtonEchoBuzzer()
# ftgpio.TestButtonEchoLed()

# *** SPI tests ***
# 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)

# *** Demux tests ***
# 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)
# fttest.TestDemuxGuzuntyClock(mcp23s17SubAddress = 0, guzuntyClockDemuxAddress = 2, secondCount = 10)

# *** 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)

# *** Stop program message ***

ftprint.StopProgram()

#.END

# ftgpio v1.2 tlfong01 2013may22

import RPIO as GPIO
import time

I2cBaseAddress20 = 0x20
I2cBaseAddress21 = 0x21
I2cBaseAddress22 = 0x22
I2cBaseAddress23 = 0x23
I2cBaseAddress24 = 0x24
I2cBaseAddress25 = 0x25
I2cBaseAddress26 = 0x26
I2cBaseAddress27 = 0x27

Mcp23017BaseAddress1 = 0x22 # LED, button
Mcp23008BaseAddress1 = 0x24 # stepping motors
Mcp23008BaseAddress2 = 0x25 # keypad
Mcp23008BaseAddress3 = 0x26 # LCD1602

Mcp23017BaseAddressSystemB1 = 0x20 
Mcp23008BaseAddressSystemB1 = 0x21 
Mcp23008BaseAddressSystemB1 = 0x21 

RPiGPIOgen2  = 27 # P1-13 Test LED
RPiGPIOgen9  = 30 # P5-05 Buzzer  
RPiGPIOgen10 = 31 # P5-06 Button  

LEDpin = RPiGPIOgen2
BuzzerPin = RPiGPIOgen9 
ButtonPin = RPiGPIOgen10

RPiTxD       = 14 # P1-08 UART TxD
RPiRxD       = 15 # P1-10 UART RxD

TxdPin = RPiTxD
RxdPin = RPiRxD 

# * PCM, Clock, Interrupt *

RPiGPIOgen1  = 18 # P1-12 PCM_CLK 
RPiGPIOGclk  = 04 # P1-07 GPIO_GCLK 
RPiGPIOgen6  = 25 # P1-22 IOx/keypad interrupt

RPiPcm       = RPiGPIOgen1  
RPiGpclk0    = RPiGPIOGclk

RpiGpioSpiSelect0  =  7 # SPI_CE1_N P1-26
RpiGpioSpiSelect1  =  8 # SPI_CE0_N P1-24
RpiGpioSpiMiso     =  9 # SPI_MISO P1-21
RpiGpioSpiMosi     = 10 # SPI_MOSI P1-10
RpiGpioSpiClk      = 11 # SPI_SCLK P1-23

SpiClockPin = RpiGpioSpiClk
SpiMosiPin = RpiGpioSpiMosi
SpiMisoPin = RpiGpioSpiMiso
SpiSelect0Pin = RpiGpioSpiSelect0
SpiSelect1Pin = RpiGpioSpiSelect1

RpiGpioGen0 = 17 # GPIO_GEN0 P1-11 Jtag TCK
RpiGpioGen3 = 22 # GPIO_GEN0 P1-15 Jtag TDO
RpiGpioGen4 = 23 # GPIO_GEN4 P1-16 Jtag TDI
RpiGpioGen5 = 24 # GPIO_GEN5 P1-18 Jtag TMS

JtagTckPin = RpiGpioGen0
JtagTdoPin = RpiGpioGen3
JtagTdiPin = RpiGpioGen4
JtagTmsPin = RpiGpioGen5

# * GPIO Input/Output/Interrupt pin list ***************************************

OutputPinList = [LEDpin, BuzzerPin, TxdPin, RPiGpclk0, RPiPcm]
InputPinWithPullUpList = [ButtonPin, RxdPin, RPiGPIOgen6]
InputPinWithNoPullUpList = []

# * Input/Output pin list for debugging only *
# OutputPinList = [LEDpin, BuzzerPin, TxdPin, SpiClockPin, SpiMosiPin, SpiSelect0Pin, SpiSelect1Pin]
# InputPinWithPullUpList = [ButtonPin, RxdPin, RPiGPIOgen6, SpiMisoPin]
# JtagOutputPinList = [JtagTckPin, JtagTdoPin, JtagTmsPin, JtagTdiPin] 
# JtagInputPinList = [] 
# JtagOutputPinList = [JtagTckPin, JtagTdoPin, JtagTmsPin]
# JtagInputPinList = [JtagTdiPin]

# *** Global constants *********************************************************

OnTime = 0.1 # On time = 0.01 second (10mS)
OffTime = 0.25 # Off time = 0.25 second (25 mS)

# *** Basic GPIO Setup/Read/Write Functions ***********************************

# * Nibble names * 

LowNibble = 0
HighNibble = 1
# BothNibble = 2 # full byte of 8 bits

# * Nibble constants *
HighNibble1LowNibble0 = 0xf0
HighNibble0LowNibble1 = 0x0f

# * LED and buzzer states *
Off = False
On = True

# * Button states *
ButtonPressed = False
ButonReleased = True

# * Interrupt states *
Low = False
High = True

# * Setup, Read/Write GPIO pins *

# * Individual pins *

setupOutputPin = lambda oPin: GPIO.setup(oPin, GPIO.OUT) # set GPIO pin as output 
setupInputPinWithNoPullUp = lambda iPin: GPIO.setup(iPin, GPIO.IN, pull_up_down=GPIO.PUD_OFF) # set GPIO pin as input, no pull up
setupInputPinWithPullUp = lambda iPin: GPIO.setup(iPin, GPIO.IN, pull_up_down=GPIO.PUD_UP) # set GPIO pin as input, with pull up
writeOutputPin = lambda oPin, oValue: GPIO.output(oPin, oValue) # write value to output pin
readInputPin = lambda iPin: GPIO.input(ButtonPin) # read value from input pin
setupWriteOutputPin = lambda oPin, oValue: (setupOutputPin(oPin), writeOutputPin(oPin, oValue)) # set and write

def SetupGPIO(): 
    SetupGPIOpins(OutputPinList, InputPinWithNoPullUpList, InputPinWithPullUpList )

def CleanUpGpio():      
    GPIO.cleanup()

def SetupGPIOpins(outputPinList, inputPinWithNoPullUpList, inputPinWithPullUpList): 
    for oPin in outputPinList:
       setupWriteOutputPin(oPin, Off)
    for iPin in inputPinWithNoPullUpList:
        setupInputPinWithNoPullUp(iPin)
    for iPin in inputPinWithPullUpList:
        setupInputPinWithPullUp(iPin)

# * Basic LED/Buzzer/Button Functions * 

def pulsePin(oPin, onTime, offTime): # blink LED or beep buzzer
    writeOutputPin(oPin, On)
    time.sleep(onTime)
    writeOutputPin(oPin, Off)    
    time.sleep(offTime)

def echoPin(iPin, oPin): # echo input pin to output pin, e.g. button to LED or buzzer
    while True:
        if readInputPin(iPin) == ButonReleased:
            pass
        else:
            pulsePin(oPin, OnTime, OffTime)
            break
        continue

def togglePin(oPin, toggleTime): # toggle pin
    writeOutputPin(oPin, On)
    time.sleep(toggleTime)
    writeOutputPin(oPin, Off)    
    time.sleep(toggleTime)

# *****************************************************************************
# Function - TestBuzzer() - v1.0 tlfong 2013may22
# Description - Beep 4 times
# *****************************************************************************

def TestBuzzer(): # beep 4 times
    SetupGPIO()
    for i in range (4):
        pulsePin(BuzzerPin, OnTime, OffTime)

# *****************************************************************************
# Function - TestLed() - v1.0 tlfong 2013may22
# Description - Beep 4 times
# *****************************************************************************

def TestLed(): # blink 4 times
    SetupGPIO()
    for i in range (4): 
        pulsePin(LEDpin, OnTime, OffTime)

# *****************************************************************************
# Function - TestButtonEchoBuzzer() - v1.0 tlfong 2013may22
# *****************************************************************************

def TestButtonEchoBuzzer(): 
    SetupGPIO()
    print "\n", "Press button 4 times.", "\n"
    for i in range (4):
        echoPin(ButtonPin, BuzzerPin)   

# *****************************************************************************
# Function - TestButtonEchoLed() - v1.0 tlfong 2013may22
# *****************************************************************************

def TestButtonEchoLed(): 
    SetupGPIO()
    print "\n", "Press button 4 times.", "\n"    
    for i in range (4):
        echoPin(ButtonPin, LEDpin)

# *** not tested ***

def TestGpioPin(oPin, toggleTime, toggleCount): 
    for i in range(toggleCount):
        togglePin(oPin, toggleTime)     

def TestButtonEchoTxD(): 
    SetupGPIO()
    print "\n", "Press button 4 times.", "\n"
    for i in range (4):
        echoPin(ButtonPin, TxdPin)  

def TestButtonEchoRxD(): 
    SetupGPIO()
    print "\n", "Press button 4 times.", "\n"
    for i in range (4):
        echoPin(ButtonPin, RxdPin)  

def TestRxdEchoTxD(): 
    SetupGPIO()
    print "\n", "RxD Echo TxD - Press button 4 times.", "\n"
    for i in range (4):
        echoPin(RxdPin, TxdPin) 

def TestTxdPin(): # blink 4 times
    SetupGPIO()
    for i in range (4): 
        pulsePin(TxdPin, OnTime, OffTime)

def TestRxdPin(): # blink 4 times
    SetupGPIO()
    for i in range (4): 
        pulsePin(RxdPin, OnTime, OffTime)

def TestTxdPinRxdPin1(): # blink, read 4 times
    SetupGPIO()
    for i in range (4): 
        writeOutputPin(TxdPin, On)
        if readInputPin(RxdPin) == High:
   print "RxD input = High"
        else:
   print "RxD input = Low"
        time.sleep(1)
        writeOutputPin(TxdPin, Off)   
if readInputPin(RxdPin) == High:
   print "RxD input = High"
        else:
   print "RxD input = Low"
        time.sleep(1)

def TestTxdPinRxdPin2(): #
    SetupGPIO()
    print "\n", "Short to Ground RxdPin 4 times.", "\n"    
    for i in range (4):
        echoPin(RxdPin, TxdPin)

def SetupJtagGpio():
    SetupGPIOpins(outputPinList = JtagOutputPinList, inputPinWithNoPullUpList = JtagInputPinList, inputPinWithPullUpList = []) 

def TestJtagPins(toggleTime, testCount): 
    SetupJtagGpio()
    Beep(1)
    for i in range(testCount):
        togglePin(JtagTckPin, toggleTime) 
    Beep(1)
    for i in range(testCount):
        togglePin(JtagTdoPin, toggleTime) 
    Beep(1)
    for i in range(testCount):
        togglePin(JtagTmsPin, toggleTime) 

    for i in range(testCount):
        writeOutputPin(JtagTdoPin, 1)
        if readInputPin(JtagTdiPin) == 1:
   print "JtagTdiPin = 1"
        else:
   print "JtagTdiPin = 0"
        time.sleep(1)
writeOutputPin(JtagTdoPin, 0)
        if readInputPin(JtagTdiPin) == 1:
   print "JtagTdiPin = 1"
        else:
   print "JtagTdiPin = 0"
        time.sleep(1)

    Beep(3)

    GPIO.cleanup()

def TestInterruptPinFallingEdgeDetection(): # !!! OUT OF DATE, not sure if still working !!!
    GPIO.cleanup() # set all input pins no pull up, disable all interutp detection setting
    SetupGPIO()   
    GPIO.set_low_event(InterruptPin) # set up low level detection 

    for i in range(30):
        if GPIO.event_detected(InterruptPin):
   break
        else:
            print "No interrupt detected.", i
            time.sleep(1)
   continue

    GPIO.set_low_event(InterruptPin, enable = False)  # disable detection
    print "End of test, or interrupt detected"

#.END


# ftprint v1.0 tlfong01 2013may20

import time
import RPIO as GPIO

import ftgpio

# *** Printing and debugging functions ***

# * Set/Reset one bit of a byte *

def SetDataBit(dataByte, bitIndex):
    setDataByte = 0x01 << bitIndex
    dataByte = dataByte | setDataByte
    return dataByte

def ResetDataBit(dataByte, bitIndex):
    resetDataByte = ~(0x01 << bitIndex)
    dataByte = dataByte & resetDataByte
    return dataByte

# * Print nibble/byte as 4/8 bit pattern for debugging *

def PrintFourBitPattern(message, dataByte):
    fourBitPattern = ConvertIntegerToFourBitPattern(dataByte)
    print message, fourBitPattern

def PrintEightBitPattern(message, dataByte):
    eightBitPattern = ConvertIntegerToEightPattern(dataByte)
    print message, eightBitPattern

def ConvertIntegerToFourBitPattern(integer):
    FourBitPattern = [""]
    for k in range(4): 
        FourBitPattern = [i+j for i in ['0','1'] for j in FourBitPattern]
    return FourBitPattern[integer]

def ConvertIntegerToEightPattern(integer):
    EightBitPattern = [""]
    for k in range(8): 
        EightBitPattern = [i+j for i in ['0','1'] for j in EightBitPattern]
    return EightBitPattern[integer]

# * Beep/Start/Stop program functions *

def StartProgram(programTitle):
    ftgpio.CleanUpGpio()
    ftgpio.SetupGPIO()
    StartBeep()
    message =  "\n" + "*** Start Program - " + programTitle + " ***" + "\n"
    print message

def StopProgram():
    ftgpio.SetupGPIO()
    StopBeep()
    # print "\n" + "*** Resetting GPIO input, no pull up/down, no event detect. ***" + "\n"
    ftgpio.CleanUpGpio()
    print "\n" + "*** Stop Program ***" + "\n"    

def Beep(count):
    for i in range(count):
        ftgpio.pulsePin(ftgpio.BuzzerPin, ftgpio.OnTime, ftgpio.OffTime)
    
def StartBeep():
    Beep(2)
    time.sleep(1)

def StopBeep():
    Beep(2)

def OneBeep():
   Beep(1)

def FourBeeps():
   Beep(4)

# .END

No comments:

Post a Comment