Giter VIP home page Giter VIP logo

python-rpi-mcp4922's Introduction

Python-RPi-MCP4922

Python Library for driving MCP4922 DAC (Digital to Analog Converter) on Raspberry Pi 3 Model B+

About MCP 4922

The MCP4922 is a Digital to Analog Converter that has 2 Channels and 12 bit resolution. The regular version has 14 pins and the datasheet is available here: http://ww1.microchip.com/downloads/en/DeviceDoc/22250A.pdf

Installation

To install the library run the following commands on a Raspberry Pi or other Debian-based OS system:

Install Git

If you don't have it already:

sudo apt-get install git build-essential python-dev

Requirements

To run this module you need RPi.GPIO and spidev:

sudo pip install RPi.GPIO
sudo pip install spidev

Clone the repository

git clone https://github.com/mrwunderbar666/Python-RPi-MCP4922.git

Install with Setup.py

cd Python-RPi-MCP4922
sudo python setup.py install

Software

Getting started

Go to the example directory and execute the test script:

cd examples
sudo python MCP4922_test.py

This script will initialize the MCP4922 and incrementally increase the voltage on both channels. Then it will decrease the voltage and loop forever.

If you want to manually set the channel and voltage, you can use the other test script:

sudo python MCP4922_set.py

Use it in your own code

Setup

First import the required GPIO module in python:

import RPi.GPIO as GPIO

Set your pin mode to BCM:

GPIO.setmode(GPIO.BCM)

and then import the MCP4922 module:

from MCP4922 import MCP4922

MCP4922 Class

The MCP4922 Class takes 3 arguments: spibus, spidevice and cs. To configure just simple use this code in python:

dac = MCP4922(spibus=0, spidevice=0, cs=8)
spibus

Select the bus for your MCP4922. Should be either 0 or 1. If no argument is given it will turn to the default of 0.

Have a closer look at the spidev module (https://github.com/doceme/py-spidev) for more details.

spidevice

Select the device connected to the bus, should be either 0 or 1. If no argument is given it will turn to the default of 1.

Also checkout the spidev documentation for more details.

cs

Chip select pin. Enter the pin number (Broadcom or Physical pin) where the MCP4922 is connected to. If no argument is given it will turn to the default of 8 (Broadcom pin numbering) or 24 (physical pin numbering).

setVoltage(channel, value)

This method sets the desired output voltage at the requested channel. It is as easy as:

dac.setVoltage(0, 2048)

This will set the voltage output to 50% of the reference voltage.

channel

The MCP4922 has two channels, you can select by giving the arguments 0 or 1. 0 is channel A, 1 is channel B.

Anything else will throw an error at you.

value

Interger value from 0 to 4095, where 4095 is 100% of the reference voltage.

If you insert a value beyond that reach it will be clamped to 4095 (or 0 if you give a negative value).

setVoltage_gain(channel, value)

The MCP4922 has the ability to output the double of the reference Voltage Reference Voltage is measured by the MCP4922 at pin 13 (VrefA) for Channel A and pin 11 (VrefB) for Channel B Note that the output voltage cannot exceed the supply voltage from pin 1 (VDD).

Example:

dac.setVoltage_gain(0, 2048)

setVoltage_buffered(channel, value)

Using the buffer feature of the MCP4922, refer to the datasheet for details.

Example:

dac.setVoltage_buffered(0, 2048)

shutdown(channel)

Completely shutdown selected channel for power saving. Sets the output of selected channel to 0 and 500K Ohms. Read Datasheet (SHDN) for details.

Example:

dac.shutdown(1)

Hardware

Here is an example of hooking up your MCP4922 to your Raspberry Pi.

Of course no warranties for any damage.

MCP4922 Breadboard Example

And the schematic view:

MCP4922 Schematic Example

Also: Refer to the datasheet

python-rpi-mcp4922's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.