Wie ein Oszilloskop in Python machen . Ihre Lesungen helfen Forschern innerhalb Einblick in die Häufigkeit und Stärke der Wellen von elektrischen Geräten und anderen Quellen emittiert. Für die Hardware in einem Oszilloskop zu arbeiten , muss es zu einem Software- Programm, das die Messwerte interpretiert und zeigt sie in einem Graphen verbunden werden. Anleitung
1
Öffnen Sie eine Anwendung zum Bearbeiten von Code oder verwenden Sie einen Texteditor wie TextEdit in Mac OS X oder Editor in Microsoft Windows. Erstellen Sie ein neues Dokument , um das Skript des Python Oszilloskop unterzubringen .
2
Definieren Sie die Parameter , die im Skript verwendet werden soll , sowie die zwei Python-Bibliotheken für das Skript benötigt , indem Sie den folgenden Code :
import os , sysimport Imageimport serialimport pygameimport Zeit
von pyBusPirateLite.UART import * import * von pyBusPirateLite.BitBang
3
Definieren Sie die Datenrate und verwenden Sie die Druckfunktion , um das Programm zu Graph die Eingänge vom Oszilloskop gemacht aktivieren:
DATA_RATE = 5720,0 # Maßnahmen /Sekunde (geschätzt experimenticaly ) DEFAULT_TIME_SCALE = RES_X /DATA_RATE # default Zeit in Sekunden ein Fenster fillpygame machen . init () bp = UART ( BUS_PIRATE_DEV , 115200 ) print " Eingabe binmode : " wenn bp.BBmode () : print " OK. " else : print " . fehlgeschlagen" sys.exit ()
4
Definieren Sie die Parameter für die Anwendung Fenster über die pygame.display Funktion :
window = pygame.display.set_mode ( ( RES_X , RES_Y ) ) Hintergrund = (0,0 , 0) line = ( 0,255,0 ) trig_color = ( 100,100,0 )
5
erstellen Sie das Skript für das Oszilloskop sich durch die Definition der Parameter, die in der Grafik geschrieben und bietet Argumente für die x und y -Achse:
bp.port.write ("\\ x15" ) while 1: Grundstück = {} {} = Spannung maxv = 0minv = 100time_scale = DEFAULT_TIME_SCALE * time_divprev_voltage = 0measure = 0; wenn ( trig_mode = NO_SYNC ! ) : für k in range ( 1,2000 ) : prev_voltage = voltagemeasure = bp.response (2 , True) Spannung = ord ( measure [ 0] ) << 8voltage = Spannung + ord ( measure [ ,"1] ) = Spannung ( voltage/1024.0 ) * 6.6 # steigenden slopeif ( (Spannung > = trigger_level ) und ( prev_voltage < (Spannung * TRIG_CAL ) ) und ( trig_mode == RISING_SLOPE ) ) : BREAKWenn ( (Spannung < trigger_level ) und ( Spannung > 0,01 ) und ( prev_voltage > Spannung /TRIG_CAL ) und ( trig_mode == FALLING_SLOPE ) ) : breakfor i in range ( RES_X ) : für k in range ( time_div - 1): # ignorieren ( time_div -1 ) Proben zu erreichen Eigenzeit resolutionbp.response (2 , True) = Maß bp.response (2 , True) Spannung = ord ( measure [ 0] ) << 8voltage = Spannung + ord ( Maßnahme [1] ) Spannung = ( voltage/1024.0 ) * 6.6plot [i] = voltagefor i in range (1, RES_X ): if plot [ i] > maxv : maxv = plot [ i] wenn plot [ i] < minv : minv = plot [ ,"i] y = ( RES_Y ) - plot [ i] * ( RES_Y /MAX_VOLTAGE ) - OFFSETx = ipx = i-1 ; py = ( RES_Y ) - plot [ i-1 ] * ( RES_Y /MAX_VOLTAGE ) - OFFSETpygame.draw . Linie ( Fenster , Linie, (px , py ), ( x , y)) = trig_y RES_Y - trigger_level * ( RES_Y /MAX_VOLTAGE ) pygame.draw.line ( Fenster , trig_color , (0 , trig_y ), ( RES_X , trig_y ) )
6
abschließen des Oszilloskops durch die Definition der Parameter für das Oszilloskop der grafischen Benutzeroberfläche :
# # GUI) font = pygame.font.Font ( None, 19) = font text_max_voltage . 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 ( " Zeitskala : % 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 )