Oscilloscopi sono utilizzati per misurare gli intervalli di diversi tipi di onde e segnali elettrici . Le loro letture aiutano a fornire ai ricercatori all'interno spaccato la frequenza e la forza delle onde emesse da apparecchi elettrici e da altre fonti . Per l'hardware in un oscilloscopio per lavorare , ha bisogno di essere collegato ad un programma software che interpreta le letture e li visualizza in un grafico . Istruzioni
1
Aprire un editor di codice o di utilizzare un editor di testo come TextEdit in Mac OS X o il Blocco note di Microsoft Windows . Creare un nuovo documento per ospitare la sceneggiatura dell'oscilloscopio Python .
2
definire i parametri che verranno utilizzati nello script , così come le due librerie Python necessari per lo script utilizzando il seguente codice :
import os , sysimport Imageimport serialimport pygameimport tempo
da pyBusPirateLite.UART import * from pyBusPirateLite.BitBang import *
3
Definire la velocità dei dati e utilizzare la funzione di stampa per consentire al programma di grafico gli ingressi effettuati dal oscilloscopio :
DATA_RATE = 5720,0 # misure /secondo ( stimato experimenticaly ) DEFAULT_TIME_SCALE = RES_X /DATA_RATE # tempo predefinito in secondi per fare una finestra fillpygame . init ( ) bp = UART ( BUS_PIRATE_DEV , 115200 ) print "Inserire binmode : " , se bp.BBmode ( ) : print " OK . " else : print " . fallito" sys.exit ( )
4
Definire i parametri per la finestra dell'applicazione utilizzando la funzione pygame.display :
finestra
= pygame.display.set_mode ( ( RES_X , RES_Y ) ) background = ( 0,0 , 0 ) = linea ( 0,255,0 ) trig_color = ( 100,100,0 ) economici 5
creare lo script per l'oscilloscopio se stessa definendo i parametri che verranno scritti sul grafico e di fornire argomenti per la x e y -axis :
bp.port.write ( " \\ x15 " ) , mentre 1 : trama = { } tensione = { } MaxV = 0minv = 100time_scale = DEFAULT_TIME_SCALE * time_divprev_voltage = 0measure = 0 ; se ( trig_mode = NO_SYNC ! ) : per k in range ( 1,2000 ) : prev_voltage = voltagemeasure bp.response = ( 2 , True) tensione = ord ( misura [ 0 ] ) << 8voltage = tensione + ord ( misura [ ,"1 ] ) Tensione = ( voltage/1024.0 ) * 6.6 # aumento slopeif ( (tensione > = trigger_level ) e ( prev_voltage < (tensione * TRIG_CAL ) ) e ( trig_mode == RISING_SLOPE ) ) : breakif ( (tensione < trigger_level ) e (tensione > 0.01) e ( prev_voltage > tensione /TRIG_CAL ) e ( trig_mode == FALLING_SLOPE ) ) : breakfor i in range ( RES_X ) : per k in range ( time_div - 1 ) : # ignorando ( time_div - 1 ) campioni per ottenere una corretta resolutionbp.response tempo ( 2 , True) misura = bp.response ( 2 , True) tensione = ord ( misura [ 0 ] ) << 8voltage = tensione + ord ( misura [ 1 ] ) Tensione = ( voltage/1024.0 ) * 6.6plot [ i] = voltagefor i in range ( 1 , RES_X ) : se plot [ i] > MaxV : MaxV = plot [ i] se plot [ i] < MINV : MINV = plot [ ,"i] y = ( RES_Y ) - terreno [ i] * ( RES_Y /MAX_VOLTAGE ) - OFFSETx = IPX = i- 1 ; py = ( RES_Y ) - terreno [ i- 1 ] * ( RES_Y /MAX_VOLTAGE ) - OFFSETpygame.draw . linea (finestra , linea , ( px , py ) , ( x , y) ) = trig_y RES_Y - trigger_level * ( RES_Y /MAX_VOLTAGE ) pygame.draw.line (finestra , trig_color , ( 0 , trig_y ) , ( RES_X , trig_y ) ) economici 6
Finalizza l'oscilloscopio definendo i parametri per l'interfaccia grafica utente dell'oscilloscopio :
# # GUI ) font = pygame.font.Font ( None, 19) text_max_voltage = carattere . render ( "Max : % f V " % MaxV , 1 , ( 255, 255 , 255) ) = text_min_voltage font.render ( "Min : % f V " % MINV , 1 , ( 255 , 255, 255 ) ) text_time_scale = font.render ( " Tempo d'azione: % f s" % time_scale , 1 , ( 255, 255 , 255) ) = text_maxv_Rect text_max_voltage.get_rect ( ) text_minv_Rect = text_min_voltage.get_rect ( ) text_time_scale_Rect = text_time_scale.get_rect ( ) text_maxv_Rect . x = 10text_maxv_Rect.y = 10text_minv_Rect.x = 10text_minv_Rect.y = 30text_time_scale_Rect.x = 10text_time_scale_Rect.y = 50window.blit ( text_max_voltage , text_maxv_Rect ) window.blit ( text_min_voltage , text_minv_Rect ) window.blit ( text_time_scale , text_time_scale_Rect ) per