In questa pagina esamineremo segnali digitali complessi. In particolare useremo Arduino per trasmettere un segnale seriale, cioè una sequenza di otto bit generati dall'hardware, ed un oscilloscopio digitale per la loro analisi; lo scopo è soprattutto apprendere l'uso del trigger dell'oscilloscopio con segnali non banali.
Le immagini seguenti sono state ottenute con un Picoscope 3405A. Il software usato è la versione 6.14.36 beta, l'ultima disponibile per Linux nel momento della stesura di questa pagina.
Un segnale seriale asincrono (UART) è costituito da:
Tutti i bit hanno la stessa durata.
Il segnale è disponibile sul pin 1 (Tx) di Arduino.
Qui una trattazione estesa, anche se datata.
L'esempio seguente è relativo ad un segnale a 9 600 bit/s (9 600 baud; ciascun bit ha durata 104 µs (nota 1) trasmesso da Arduino. Il byte trasmesso è 0x0F (00001111) a partire dal bit meno significativo, cioè "al contrario":
Il segnale è generato dal seguente codice:
void setup()
{ Serial.begin(9600);
}
void loop()
{ Serial.write(0x0F);
delay(10);
}
Per visualizzare il segnale con l'oscilloscopio occorre collegare la sonda al pin TX di Arduino. L'uso del trigger ordinario rende difficile sincronizzare il segnale e l'alternativa del pulsante STOP non è una buona scelta... Con le opzioni Advanced Triggers è possibile impostare oltre che i livelli di trigger anche la durata minima o massima dell'impulso ed altre caratteristiche che fanno "scattare" la registrazione del segnale. Alcuni esempi:
Per la decodifica automatica del segnale seriale esiste un apposito strumento (Tools → Serial Decoding) che inserisce nel grafico la riga testuale visibile nell'immagine sopra riportata:
Ovviamente il byte decodificato dall'oscilloscopio deve coincidere con quanto trasmesso da Arduino.
SPI permette di trasmettere un byte ad alta velocità con due linee: il dato MOSI e clock CHK (nota 2).
Esaminiamo l'esempio seguente: gli otto bit vengono generati uno dopo l'altro (segnale blu, pin 11, MOSI - nota 3) in corrispondenza del fronte di salita del clock (segnale verde, pin 13, clock). I due cursori sono in corrispondenza dei primi due bit del byte 0x40 (01000000). La frequenza del clock è 125 kHz, quindi un bit dura 8 µs.
Il codice che genera i segnali mostrati:
#include <SPI.h>
void setup() {
pinMode(10, OUTPUT); // set the SS pin as an output
SPI.begin();
SPI.beginTransaction (SPISettings (125000, MSBFIRST, SPI_MODE0));
}
void loop() {
digitalWrite(10, LOW); // set the SS pin to LOW
SPI.transfer(0x40); // send a data
digitalWrite(10, HIGH); // set the SS pin HIGH
delay(1);
}
Anche in questo caso potrebbe essere complesso l'uso del trigger ed è disponibile la decodifica automatica:
Pagina creata nel gennaio 2021
Ultima modifica: 7 dicembre 2021
Appunti scolastici - Versione 0.1028 - Novembre 2024
Copyright 2012-2024, Vincenzo Villa (https://www.vincenzov.net)
Creative Commons | Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)