doppia icsp

buongiorno,

non essendo molto esperto, qualcuno ha dei consigli su come gestire un doppio input da icsp su arduino mega 2560, avrei bisogno di collegare due camere pixy http://cmucam.org/projects/cmucam5/wiki/Hooking_up_Pixy_to_a_Microcontroller_(like_an_Arduino) sullo stesso arduino, solo che con tutte e due collegate non riceve nulla...

La SPI si basa sull'uso di un pin come SS, ossia Slave Select, per selezionare con quale periferica stai scambiando i dati. Se non lo usi, entrambe ricevono la comunicazione ma non puoi parlare con 2 dispositivi contemporaneamente.
La gestione del pin CS la devi fare manualmente, con i classici digitalWrite.

Qui vedo che c'è qualcosa:
http://cmucam.org/projects/cmucam5/wiki/Porting_Guide

Ma quella camera può usare anche un canale diverso oltre all'SPI?

L'ICSP è il connettore, la comuncazione si chiama SPI. Qui c'è qualcosina:

Comunque pare di si.


Devi farti un cavetto in cui oltre ai primi 6 devi tirare fuori anche il pin 7 (SPI SS )…
Pin che andranno collegati a due diversi Pin di Arduino

nel codice, invece di usare pixy.h userai pixySPI_SS.h
esempio

#include <SPI.h>  
#include <PixySPI_SS.h> // versione da usare

// This is the main Pixy object 
PixySPI_SS pixy (14); // 14 e' un esempio di pin CS
PixySPI_SS pixy2(15); // 15 e' un esempio di pin CS

Brunello:
Comunque pare di si.

Non ho la Pixy, me ne dovrebbe arrivare una la prossima settimana, però se non mi ricordo male il segnale s.s. presente sulla sua I/O port non è gestito nell'attuale versione del software, questo significa che non è possibile usare due Pixy sulla stessa porta SPI.

quindi per una camera uso lo "zoccoletto" csp al centro della scheda, e per l'altra faccio un collegamento con cavetti usando i pin 50 51 52 53? + vcc e gnd

gianni88:
quindi per una camera uso lo "zoccoletto" csp al centro della scheda, e per l'altra faccio un collegamento con cavetti usando i pin 50 51 52 53? + vcc e gnd

Sono sempre gli stessi del connettore ISP, l'ATmega2560 ha una sola porta SPI, se vuoi collegare due Pixy devi farlo tramite I2C, devi assegnare address diversi ai due device.

edit:

Qui tutti i modi per collegare la Pixy ad Arduino.

gianni88:
quindi per una camera uso lo "zoccoletto" csp al centro della scheda, e per l'altra faccio un collegamento con cavetti usando i pin 50 51 52 53? + vcc e gnd

No, sono collegati sulla scheda.
Ciao Uwe

quindi con 4 cavi per camera scl e sda +vcc 5v e gnd per i i2c?

però se non mi ricordo male il segnale s.s. presente sulla sua I/O port non è gestito nell'attuale versione del software, questo significa che non è possibile usare due Pixy sulla stessa porta SPI.

come dicevo, hanno aggiunto una libreria pixySPI_SS.h

ma sdl e sda devono essere invertiti tipo scl pixy a sda arduino e sda pixy scl arduino? ps il mega ha solo i 20 e 21 x i2c.... come faccio con 2?

SCL va' con SCL
SDA và con SDA
per tutti i dispositivi.

poi ogni dispositivo deve avere un diverso Address per essere riconosciuto

e vero, scusate la domanda stupida, il problema e che se collego solo sda e scl e gnd come dicono nel forum di pixy non mi si accende nemmeno la cam...

gianni88:
e vero, scusate la domanda stupida, il problema e che se collego solo sda e scl e gnd come dicono nel forum di pixy non mi si accende nemmeno la cam…

Devi collegare anche il +5V altrimenti la Pixy non è alimentata.

si ma non mi invia comunque i dati, la cam rileva il colore ma non invia nulla ad arduino

usando giustamente la libreria #include <PixyI2C.h>

ma lo hai cambiato lo sketch, per usare l'I2C ?

si si ho usato il loro esempio:

#include <Wire.h>
#include <PixyI2C.h>


PixyI2C pixy;
// PixyI2C pixy(0x55); // You can set the I2C address through PixyI2C object 

void setup()
{
  Serial.begin(9600);
  Serial.print("Starting...\n");
  
  pixy.init();
}


void loop() 
{ 
  static int i = 0;
  int j;
  uint16_t blocks;
  char buf[32]; 
  
  blocks = pixy.getBlocks();
  
  if (blocks)
  {
    i++;
    
    // do this (print) every 50 frames because printing every
    // frame would bog down the Arduino
    if (i%50==0)
    {
      sprintf(buf, "Detected %d:\n", blocks);
      Serial.print(buf);
      for (j=0; j<blocks; j++)
      {
        sprintf(buf, "  block %d: ", j);
        Serial.print(buf); 
        pixy.blocks[j].print();
      }
    }
  }  
}

gianni88:
si si ho usato il loro esempio:

Verifica l'address I2C della tua Pixy.

The I2C address can be configured in the "Interface" tab of the Configure Parameters dialog in PixyMon