A/D con Raspberry MCP300X MCP320X.

Slides:



Advertisements
Presentazioni simili
Di Sposito Angelo Alessandro Anno 2005/2006
Advertisements

ARDUINO Duemilanove Parte_1 Caratteristiche
ADC – SCHEMA GENERALE I convertitori AD sono disponibili come circuiti integrati in diversi modelli, che differiscono fra loro per prezzo, prestazioni.
LA MEMORIA CENTRALE. La memoria nella struttura generale del calcolatore MEMORIA CONTROLLO INGRESSO E USCITA ARITMETICA E LOGICA CPU Dispositivi esterni.
IL PROCESSORE I MICROPROCESSORI INTEL Il microprocessore è un circuito integrato dotato di una struttura circuitale in grado di effettuare un determinato.
Corso di Alta formazione in TL&OS Modulo 1.3 Reti e Servizi - lezione 1 Modulo 1.3 Reti e servizi 1. Introduzione al Networking Connettere il PC in rete;
Laboratorio di Architettura Degli Elaboratori1 PSPICE – Circuiti sequenziali.
IL PLC Formazione ed informazione su: C ontrollori L ogici P rogrammabili a cura di: Antonio Minio.
Elementi fondamentali dell’ Architettura di di un elaboratore elettronico.
SISTEMA DI DISTRIBUZIONE DATI. DISTRIBUZIONE:Consiste nell’inviare segnali analogici o digitali ad attuatori come motori,dispositivi riscaldati, relè,
Approfondimento Porte USB e Interfacce In elettronica l'Universal Serial Bus (USB) è uno standard di comunicazione seriale che consente di collegare diverse.
Rappresentazione dell’ Informazione Digitale e Binario
Arduino uno Introduzione.
ARCHITETTURA DI UN SISTEMA DI ACQUISIZIONE DATI A UN SOLO CANALE
Sistemi e Applicazioni per l’Amministrazione Digitale
IL CONVERTITORE A/D Scheda di conversione analogico/digitale a 24 bit
Progetto Parcheggio intelligente
10.7 Comunicazione FX – Inverter con protocollo ModBus
Sistema di Acquisizione Dati Per un Rivelatore di Muoni
Scheda ethernet di arduino
I Circuiti Sequenziali ed i Flip/Flop
Laboratorio II, modulo Conversione Analogico/Digitale (cfr. e
Comparatore e FlashADC con l’Op.Amp. “TDC” con l’FPGA LM35
GPIO: General Purpose Input Output I parte
Introduzione al linguaggio C
Bootloader arduino nano
Dal problema al processo risolutivo
Python per Raspberry Introduzione.
Pic16f84 Assembly I/O.
LE ARCHITETTURE NON VON NEUMANN
Microcontrollori e microprocessori
Stato e prospettive del lavoro sulle memorie associative.
I microprocessori Il microprocessore è un circuito integrato costituito da silicio. Il microprocessore svolge fondamentalmente due funzioni: sovraintende.
I2c.
Dal problema al processo risolutivo
Animazione su attività del bus di controllo
Cammino dei Dati (Datapath)
Sistema di controllo ON – OFF (1)
Laboratorio II, modulo LabView.
APACHE2-PHP su Raspberry
INSEGUITORE SOLARE CON ARDUINO
I BUS È un insieme di fili conduttori che permette il passaggio di dati tra le varie periferiche del pc.
Architetture non Von Neumann
Università di Pisa INFN – Sezione di Pisa
Ambiente STM32F3 Discovery
I Bus di Sistema Corso di Laurea Magistrale in Ingegneria Informatica
01 - INTRODUZIONE ALLA DOMOTICA
La scheda Arduino.
Global System for Mobile Comunication
Introduzione L’8254 è un interval timer event/counter, progettato per risolvere i problemi del controllo del timing, comuni ad ogni microcomputer. E’ costituito.
Sistemi di acquisizione e distribuzione dati
Caratteristiche e funzioni della scheda Arduino
Progetto di Tecnologie Web 2014/2015 THERMOWEB
Convertitore A/D e circuito S/H
A/D seconda parte.
Scheduling in Linux (Kernel 2.4 e 2.6)
Concetti base 1.1.
Lettura di input MIDI da Web MIDI API
Unità 5 Segnali analogici.
Programmazione e Laboratorio di Programmazione
UNIT 12 INTERFACCIA SERIALE.
Programmazione e Laboratorio di Programmazione
Memorie Laboratorio di Architetture degli Elaboratori I
Unità 1 Programmi base.
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Progettiamo un robot Prof.ri Ponte Vincenzo Ovazza Sergio
Comunicazioni sincronizzate: I2c SPI
TCS230 Sensore di colore.
Nuovo quadro di controllo e comando per Maestro ed Ocean
Transcript della presentazione:

A/D con Raspberry MCP300X MCP320X

A/D La scheda Raspberry non è dotata di convertitore analogico digitale. Per poter acquisire grandezze analogiche tramite Raspberry è necessario collegare un convertitore A/D esterno Il convertitore preso in considerazione è MCP3008 oppure MCP3208 I convertitori MCP300x e MCP320X sono dotati di x canali; nel nostro caso ci sono 8 canali MCP300X è un convertitore a 10 bit; MCP320X è un convertitore a 12 bit La comunicazione tra Raspberry e l’integrato MCP3Y0X avviene attraverso il bus SPI Serial Peripheral Interface Bus La comunicazione SPI è utilizzata per piccole distanze ed è full duplex ed è stato sviluppato dalla Motorola. Utilizza una architettura master-slave con un solo master e più slave

Pin di Raspberry per la comunicazione SPI Pin 19: MOSI (Master Output Slave Input) - uscita dei dati dal Raspberry Pi verso la periferica Pin 21: MISO (Master Input, Slave output) - usato dalla periferica per trasmettere dati al Raspberry Pi Pin 23: SCLK - clock, generato dal Raspberry Pi CS: Chip Select Pin 24: CE0 (Chip Enable numero 0). Quando attivo, seleziona la prima periferica. E' associato al file /dev/spidev0.0 Pin 26: CE1 (Chip Enable numero 1). Quando attivo, seleziona la seconda periferica. E' associato al file /dev/spidev0.1

SPI La comunicazione SPI è abbastanza veloce, può raggiungere 10 Mbps La lettura e la scrittura di un dato avviene sul fronte di salita o di discesa del clock. Ciò rende immune dal rumore. Si possono collegare più slave

SPI Un dispositivo SPI possiede  due bit di configurazione detti CPOL Clock POLarity e CPHA Clock PHAse.  CPOL determina lo stato idle del segnale di sincronismo CPOL=0 - segnale di clock è considerato idle quando è a livello logico basso. CPHA determina su quale fronte del segnale di clock vengono letti i dati CPHA=0 i dati in uscita dal Master vengono letti in corrispondenza del fronte di discesa e i dati in uscita dagli Slave vengono letti in corrispondenza del fronte di salita del segnale di clock.

SPI

SPI

Pin

Mcp3208 su Raspberry La piedinatura di MCP3208 e quella di MCP3008 è la stessa

Mcp3208 su Raspberry

MCP3004 ed MCP3008 MCP3208 è un convertitore A/D a 12 bit e 8 canali MCP3008 è un convertitore meno recente a 10 bit e 8 canali. MCP3004 è un convertitore a 4 canali e a 10 bit Per aumentare il numero di canali, si possono collegare più device in parallelo Schema di conversione per MCP3008 o 3004 a 10 bit

MCP3204/MCP3208 Per il convertitore MCP300x è previsto uno shift dei bit diverso da quello del convertitore MCP320X; lo si può notare dal confronto tra questo schema e quello precedente Schema di conversione per MCP3008 o 3004 a 10 bit

MCP3008

MCP3204

MCP3208

MCP320X Liv 0 Liv 1 Liv 2 Liv 3 -------------------------------- bit0 bit 1 bit 2 bit 3 -------------------------------- bit 4091 bit 4092 bit 4093 bit 4094 bit 4095 3.3 V L’integrato MCP3208 è a 12 bit, è quindi formato da 212=4096 livelli. La tensione di riferimento 3.3 V viene diviso per 4095 livelli; la risoluzione è quindi 3.3 V/4095=0.000806 V

MCP300X Liv 0 Liv 1 2 3 ……………………………………………………………………………………………… Liv 1019 Liv 1020 Liv 1021 Liv 1022 Liv 1023 3.3 V L’integrato MCP3008 è a 12 bit, è quindi formato da 210=1024 livelli. La tensione di riferimento 3.3 V viene diviso per 1024 livelli; La risoluzione è quindi 3.3 V/1023=0.003226 V

Es: acquisizione di temperatura e luminosità con MCP3008

Codice per acquisire i dati import spidev import time import os #apertura del bus SPI spi = spidev.SpiDev() spi.open(0,0) #open(bus, device) def ReadChannel(channel): #channel deve avere valore #tra 0 e 7   adc = spi.xfer2([1,(8+channel)<<4,0])   data = ((adc[1]&15) << 8) + adc[2]   return data def ConvertVolts(data,places):   volts = (data * 3.3) / float(1023)   volts = round(volts,places)   return volts  def ConvertTemp(data,places):    temp = ((data * 330)/float(1023)) #LM35   temp = round(temp,places)   return temp light_channel = 0 temp_channel  = 1  delay = 5 while True: light_level = ReadChannel(light_channel) light_volts = ConvertVolts(light_level,2) temp_level = ReadChannel(temp_channel) temp_volts = ConvertVolts(temp_level,2) temp = ConvertTemp(temp_level,2) print "--------------------------------------------" print("Light: {} ({}V)".format(light_level,light_volts)) print("Temp : {} ({}V) {} deg C".format(temp_level,temp_volts,temp)) time.sleep(delay) open(0,0) il pin 10 di MCP3008 viene collegato GPIO7 di Raspberry open(0,1) il pin 10 di MCP3008 viene collegato su GPIO8 di Raspberry

Xfer2 oppure xfer Le due funzioni sono molto simili Sintassi: xfer2([elenco dati in byte da inviare da Raspberry al master]) I dati vengono inviati dal pin MOSI Lo slave invia dei dati sul pin MISO

Xfer2 MCP300X ed MCP320X inviano sempre tre byte a Raspberry e ricevono tre byte Il codice di invio byte è il seguente: xfer2([1,(8+channel)<<4,0]) Il primo byte, quello di inizio è sempre 0x01 Il secondo byte è quello di impostazione dell’integrato, sposta a sinistra di 4 bit il risultato di 8+channel; se channel è zero, il risultato sarà 8+0=8 ->8<<4=>10000000 se channel è uno, il risultato sarà 8+1=9 ->9<<4=> 10010000 Il terzo byte è sempre 0x00 I byte inviati saranno: 1 2 3 4 5 6 7 8 ch0 ch1 Byte I: seleziona l’inizio di una trama di informazioni sul canale Byte III: è un byte nullo, si può anche non esprimerlo Byte II: invia il canale da l quale leggere; il bit 2, 3, 4 danno queste informazioni

Lettura dall’AC/DC I dati restituiti dal convertitore vengono chiamati data La sintassi è a seguente: data = ((adc[1]&3) << 8) + adc[2] Del byte adc[1] vengono presi in considerazione gli ultimi due bit tramite l’operazione logica AND con 11; questi due bit vengono traslati a sinistra di 8 bit per fare spazio all’intero byte adc[2]

OUT 1 2 3 4 5 6 7 8 ch0 ch1 out adc[1]&11 adc[2]

CS, MOSI, MISO CS MOSI MISO canale D2 D1 D0 1 2 3 4 5 6 7 1 S D2 D1 D0 1 S D2 D1 D0 x ? B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0 Dati inviati dal master MOSI Dati inviati dallo slave MISO canale D2 D1 D0 1 2 3 4 5 6 7

Installare la libreria Spi Per poter installare la libreria SpiDev, è necessario eseguire i seguenti passi: sudo apt-get install python-dev (?) mkdir python-spi (creo uno sottodirectory) cd python-spi (entro nella sottodirectory) wget https://raw.github.com/doceme/py-spidev/master/setup.py (scarico setup.py da github) wget https://raw.github.com/doceme/py-spidev/master/spidev_module.c (scarico spidev_module.c da github) sudo python setup.py install (installazione finale)

Configurare Raspberry

Configurare Raspberry

Metodi Spi bits_per_word Descrizione Proprietà che dà o setta i bit per parola. Range: 8 .. 16 close Syntax: close() Returns: None Description: Disconnette l’oggetto dall’interfaccia. cshigh Descrizione: Proprietà che setta se CS è attivo alto. max_speed_hz Description: Proprietà che dà o setta la massima velocità in Hz su un bus open Syntax: open(bus, device) Description: Connette l’oggetto allo specifico device open(X,Y) può aprire /dev/spidev-X.Y readbytes Syntax: read(len) Returns: [values] Description: Legge la lunghezza dei byte dal device SPI writebytes Syntax: write([values]) Description: Scrive I byte sul device SPI Xfer2 Syntax: xfer2([values]) Description: Esegue una transazione SPI. .