I2c.

Slides:



Advertisements
Presentazioni simili
Programmazione in Ambiente Profibus DP
Advertisements

Costruzione di Interfacce Lezione 10 Dal Java al C++ parte 1
Corso di Informatica Applicata - © 2005 Saverio De Vito Corso di Informatica Applicata Esercitazione Università degli studi di Cassino Corso di Laurea.
Piattaforma Arduino Arduino uno Arduino Mega.
Registro a scorrimento
ARDUINO Duemilanove Parte_4 Arduino e Processing
Linguaggio Arduino: Struttura di un programma
ARDUINO Duemilanove Parte_5 Arduino e PHP
Arduino: introduzione alla programmazione
SENSORI OTTICI - FOTORESISTENZE
Hardware necessario Una board Intel galileo Un alimentatore Dc 7-15 v
Progetti con arduino e pic.  Il trasduttore è analogico  Trasforma la temperatura in tensione secondo la relazione V millivolts =10*t celsius Essendo.
Linux, Android e Internet of Things
Comunicare con Arduino
Hands-On Arduino Come collegare i sensori ad Arduino P. Perego- Politecnico di Milano AA 2010/2011 Facoltà del Design - Politecnico di Milano 3.o anno.
ISTITUTO TECNICO – SETTORE TECNOLOGICO
LA MEMORIA CENTRALE. La memoria nella struttura generale del calcolatore MEMORIA CONTROLLO INGRESSO E USCITA ARITMETICA E LOGICA CPU Dispositivi esterni.
Z iLOG 80 Calcolatori Elettronici Bartolomeo Bajic.
Reti Mobili Ad Hoc e di Sensori Andrea De Salve. COS'È ARDUINO ? Piattaforma Open-Source per il Physical Computing basata su Microcontrollore Arduino.
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;
Sensori analogici e digitali per la misura di
MODULI FORMATIVI ESTIVI: ANDROID E ARDUINO PICCOLO PROGETTO CREATO CON UNA SCHEDA ARDUINO E APPINVENTOR.
Arduino uno Introduzione.
TCP/IP.
Progetto Parcheggio intelligente
dCache Test effettuati al CNAF
10.7 Comunicazione FX – Inverter con protocollo ModBus
A/D con Raspberry MCP300X MCP320X.
Architettura e funzionalità
Scheda ethernet di arduino
I Circuiti Sequenziali ed i Flip/Flop
BUS PCI G. Frosini Bus PCI Slide 1.
GPIO: General Purpose Input Output I parte
Python per Raspberry Introduzione.
Pic16f84 Assembly I/O.
Microcontrollori e microprocessori
Animazione su attività del bus di controllo
Cammino dei Dati (Datapath)
APACHE2-PHP su Raspberry
I FILES AD ACCESSO SEQUENZIALE
INSEGUITORE SOLARE CON ARDUINO
I BUS È un insieme di fili conduttori che permette il passaggio di dati tra le varie periferiche del pc.
PROGRAMMAZIONE BASH – ISTRUZIONE IF
Università di Pisa INFN – Sezione di Pisa
Alimentazione esterna
Ambiente STM32F3 Discovery
I Bus di Sistema Corso di Laurea Magistrale in Ingegneria Informatica
Informazioni di servizio
Alimentazione esterna
istalliamo l’ambiente di sviluppo - ide
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.
Linux, Android e Internet of Things
A/D seconda parte.
Interrupt Arduino.
Lezione Seconda Primi passi di programmazione
Processi decisionali e funzioni di controllo
UNIT 12 INTERFACCIA SERIALE.
Prof.ri Ponte Vincenzo Ovazza Sergio
Unità 1 Programmi base.
INPUTS/OUTPUTS digitali e interruzioni
Unità 6 SCHERMI LCD.
Lezione Terza Primi passi di programmazione
CONTROLLO DI UN SERVOMOTORE A ROTAZIONE CONTINUA
Unità 13 I2C BUS.
Progettiamo un robot Prof.ri Ponte Vincenzo Ovazza Sergio
Ricerca 01/08/2019 package.
Comunicazioni sincronizzate: I2c SPI
TCS230 Sensore di colore.
Controllo multifunzione PSM-DI cod
Transcript della presentazione:

I2c

I2c I2c=Inter-Integrated Circuit, è stato creato dalla Philips Semiconductors Costituito da due fili che rappresentanoi collegamenti denominati SCL ed SDA. I2c=protocollo di comunicazione La comunicazione i2c avviene tra un solo master e più slave; un master può essere anche slave e viceversa; tutti gli slave sono collegati su un unico bus scambio dati La comunicazione tra un master e tutti gli slave avviene su due linee: SCL ed SDA SCL viene utilizzata per i segnali di clock per sincronizzare il trasferimento dei dati su un bus SDA è il bus per il trasferimento dati che avviene in maniera half duplex

I2c Oltre ai bus SDA ed SCL c’è bisogno anche della linea per il ground e quella per l’alimentazione a 5 V I resistori possono avere valori da 1800 Hom a 4700 Hom

Master e slave Il master inizializza e termina la comunicazione; invia i segnali di clock per la sincronizzazione Le comunicazioni di start e di stop sono codici particolari, diversi dagli altri e mostrati in figura:

Trasferimento dati I dati vengono trasferiti tramite una sequenza di 8 bit partendo dal MSB sul bus SDA in maniera hal duplex, visto che il bus è unico Per ogni treno di bit inviati, il device che riceve invia un segnale di ACK su SDA Il segnale ACK può essere emesso sia dal master che dallo slave, dipende da chi riceve il segnale. Siccome il cavo SDA è unico sia per trasmettere che per ricevere, il treno complessivo di dati è di 9 bit

Frequenza di trasferimento La frequenza clock per l’I2C è superiore a 100 KHz In base alla frequenza di trasferimento dati, vengono date le seguenti definizioni: Fast mode per frequenze superiori a 400 KHz High speed mode per frequenze superiori a 3.4 MHz

Indirizzamento Gli slave sono tutti collegati su un solo bus e devono avere un indirizzo per essere distinti I bit dedicati agli indirizzi sono in totale 7 Ciò vuol dire che il numero di slave indirizzabili sono 128 da 0 a 127 Prima di trasmettere o ricevere i dati, il master deve individuare l’indirizzo dello slave sul bus inviando un segnale di 8 bit fatto in questo modo: A6 A5…A0 sono i bit di indirizzo R/W indica se la trasmissione è si lettura o scrittura R/W=0 il master deve inviare allo slave dei dati e quindi si ha la scrittura R/W=1 il master deve leggere dei dati dallo slave

Treno di dati

I2C Arduino

I2C Arduino

Programma master #include<Wire.h> int x = 0; void setup() { Wire.begin(); } void loop() { Wire.beginTransmission(9); // trasmette al device 9 Wire.write(x); Wire.endTransmission(); x++; if (x > 5) x = 0; delay(500);

Programma slave int LED = 13; int x = 0; void setup() {Serial.begin(9600); pinMode (LED, OUTPUT); Wire.begin(9); //lo slave prende indirizzo 9 Wire.onReceive(receiveEvent); } void receiveEvent(int bytes) { x = Wire.read(); Serial.println(x); void loop() { void receiveEvent(); if (x != '0') digitalWrite(LED, HIGH); delay(200); digitalWrite(LED, LOW);

Lcd I2c

Pin raspberry

I2c Raspberry Per poter utilizzare il protocollo I2C su Raspberry è più complicato Bisogna installare le librerie e configurare la scheda Raspberry Il procedimento è il seguente: Bisogna digitare I seguenti comandi: sudo apt-get update sudo apt-get install -y python-smbus sudo apt-get install -y i2c-tools

Configurare il kernel sudo raspi-config

Configurare il kernel

Testare i2c Per testare I2c su Raspeberry Pi3 bisogna digitare il seguente comando: sudo i2cdetect -y 1 Per testare I2c su modelli precedenti di Raspberry bisogna digitare il seguente comando: sudo i2cdetect -y 0

Testare i2c

Codice esempio Raspberry import smbus bus = smbus.SMBus(1) # 0 = /dev/i2c-0 (port I2C0) #1 = /dev/i2c-1 (port I2C1) DEVICE_ADDRESS = 0x15 DEVICE_REG_MODE1 = 0x00 DEVICE_REG_LEDOUT0 = 0x1d #Write a single register bus.write_byte_data(DEVICE_ADDRESS, DEVICE_REG_MODE1, 0x80) #Write an array of registers ledout_values = [0xff, 0xff, 0xff, 0xff, 0xff, 0xff] bus.write_i2c_block_data(DEVICE_ADDRESS, DEVICE_REG_LEDOUT0, ledout_values)

I2c arduino raspberry Codice raspberry import smbus import time # for RPI version 1, use "bus = smbus.SMBus(0)" bus = smbus.SMBus(1) # This is the address we setup in the Arduino Program address = 0x04 def writeNumber(value): bus.write_byte(address, value) # bus.write_byte_data(address, 0, value) return -1 def readNumber(): number = bus.read_byte(address) # number = bus.read_byte_data(address, 1) return number while True: var = input("") if not var: Continue writeNumber(var) number = readNumber()

I2c arduino raspberry Codice arduino #include <Wire.h> #define SLAVE_ADDRESS 0x04 #define RELAY1 9 int number = 0; int state = 0; void setup() { pinMode(RELAY1, OUTPUT); Serial.begin(9600); // start serial for output // initialize i2c as slave Wire.begin(SLAVE_ADDRESS); // define callbacks for i2c communication Wire.onReceive(receiveData); Wire.onRequest(sendData); Serial.println("Ready!"); } void loop() { delay(100); } // callback for received data void receiveData(int byteCount){ while(Wire.available()) { number = Wire.read(); Serial.print("data received: "); Serial.println(number); if (number == 1){ if (state == 0){ digitalWrite(RELAY1, HIGH); // set the LED on state = 1; } else{ digitalWrite(RELAY1, LOW); // set the LED off state = 0; } } } } // callback for sending data void sendData(){ Wire.write(number); }