Analizzatore logico Ikalogic Scanaquad, per Arduino e non solo

Ciao!

Oggi vi parlerò di ScanaQuad, un analizzatore logico davvero ben fatto, semplice da usare, compatto e molto versatile.

Cosa fa di speciale?
Un analizzatore logico, ed in particolare ScanaQuad, vi permette di vedere e decodificare i principali protocolli di comunicazione (Modbus, Canbus, I2C, SPI, PWM..) in totale sono più di 30 e sono in continuo aggiornamento!

Ma vediamo un esempio pratico di quello che possiamo fare grazie a questo fantastico strumento.
Per prima cosa ho collegato un display I2C ad Arduino in questo modo:





Poi ho caricato nella scheda il seguente codice di esempio:



Ho alimentato il tutto ed ho collegato lo ScanaQuad sui canali SDA e SCL (per default sono i pin A4 e A5 di Arduino Uno)




Avviando il software gratuito ScanaStudio è possibile eseguire un campionamento della comunicazione I2C, è quindi possibile vedere ciò che sta avvenendo sui canali SDA e SCL, il programma esegue addirittura la decodifica dei dati inviati sul canale SDA.






Ora che abbiamo visto i messaggi inviati è possibile modificare lo sketch per inserire manualmente i dati da inviare, grazie alla libreria Wire integrata nell'IDE.

Ovviamente questa procedura può essere bypassata leggendo nella libreria del display i dati che ci servono, ma è indispensabile invece in altri casi (ad esempio per il reverse engineering).

Ecco qui sotto lo sketch, equivalente a quello sopra, ma ottenuto grazie ad i segnali letti con lo ScanaQuad.



Con ScanaQuad è possibile anche generare onde quadre e addirittura generare messaggi con vari
protocolli di comunicazione.

Ad esempio, sempre con il protocollo i2c, ho generato dei messaggi su 2 canali in uscita e li ho rimandati in ingresso sugli altri 2 per vedere cosa veniva rilevato.

ecco cosa ho ottenuto:



Come potete vedere, i canali 1 e 2, che erano in ascolto, hanno letto e decodificato i messaggi generati sui canali 3 e 4.

I messaggi che vedete sono editabili grazie ad un editor di script integrato in ScanaStudio.
Per aprire l'editor cliccate su "Signal builder script" che trovate nel menu in basso a sinistra

Ecco lo script che ho utilizzato per generare il messaggio i2c del print sopra:

  1. #include "i2c.js"
  2. function build_signals()
  3. {
  4.     /*
  5.         Quick Help
  6.         ~~~~~~~~~~
  7.         Start by configuring the protocol with the variables
  8.         in the "configuration" part.
  9.        
  10.         Then, use the following functions to generate packets:
  11.         gen_add_delay(delay)
  12.         ====================
  13.             Description
  14.             -----------
  15.             Adds a delay, keeping SCL and SDA at their last known level
  16.            
  17.             Parameters
  18.             ----------
  19.             delay: the delay expressed in number of samples.
  20.            
  21.         put_c(data,start,ack,stop)
  22.         ===============
  23.             Description
  24.             -----------
  25.             Builds an I2C data word. this can either be an address or a regular data byte. If it's an address, the R/W bit must be inluded
  26.             in the data byte.
  27.            
  28.             Parameters
  29.             ----------
  30.             data: Value of the I2C byte to be generated
  31.             start: Set to true to generate a start condition
  32.             ack: Set to true to force ACK bit to an active state (i.e. 0 level)
  33.             stop: Set to true to generate a stop condition
  34.     */
  35.     /*
  36.         Configuration part : !! Configure this part !!
  37.         (Do not change variables names)
  38.     */
  39.     chSda = 0;  // SDA on CH 1
  40.     chScl = 1;  // SCL on ch 2
  41.     address = 0x7c;
  42.     gen_bit_rate = 100000;  // Bit rate expressed in Hz
  43.    
  44.     var samples_per_us = get_srate() / 1000000;
  45.    
  46.     ini_i2c_generator();
  47.     /*
  48.         Signal generation part !! Change this part according to your application !!
  49.     */
  50.     gen_add_delay(samples_per_us * 150);
  51.     put_c(address,true, true, false);
  52.     put_c(0x80,false, true, false);
  53.     put_c(0x28,false, true, true);
  54. ////////////////////////////////////
  55.     gen_add_delay(samples_per_us * 150000);
  56.     put_c(address,true, true, false);
  57.     put_c(0x80,false, true, false);
  58.     put_c(0x28,false, true, true);
  59.    
  60.     gen_add_delay(samples_per_us * 150);
  61.     put_c(address,true, true, false);
  62.     put_c(0x80,false, true, false);
  63.     put_c(0x28,false, true, true);
  64.    
  65.     gen_add_delay(samples_per_us * 150);
  66.     put_c(address,true, true, false);
  67.     put_c(0x80,false, true, false);
  68.     put_c(0x28,false, true, true);
  69.    
  70.     gen_add_delay(samples_per_us * 150);
  71.     put_c(address,true, true, false);
  72.     put_c(0x80,false, true, false);
  73.     put_c(0xC,false, true, true);
  74.    
  75.     gen_add_delay(samples_per_us * 150);
  76.     put_c(address,true, true, false);
  77.     put_c(0x80,false, true, false);
  78.     put_c(0x1,false, true, true);
  79.    
  80.     ///////////////////////////////////////////
  81.    
  82.     gen_add_delay(samples_per_us * 150000);
  83.     put_c(address,true, true, false);
  84.     put_c(0x80,false, true, false);
  85.     put_c(0x6,false, true, true);
  86.    
  87.     gen_add_delay(samples_per_us * 150);
  88. }


Come detto sopra è anche presente un generatore di onde quadre, è possibile impostare frequenza e duty cycle.

Nella gif qui sotto vedete un'onda quadra applicata al led.




Questo è tutto!
Ringrazio Ikalogic per questo strumento, davvero utile e versatile, inoltre è piccolissimo, potrete quindi averlo sempre a portata di mano.

Sicuramente mi tornerà utilissimo in futuro per diversi protocolli di comunicazione.

Ciao!
Segui Daniele Alberti su Google+ per rimanere sempre aggiornato su nuovi post.

Nessun commento:

Posta un commento

Lascia un commento qui sotto, ti risponderò il prima possibile!

Altri Post