Fórum témák

» Több friss téma
Fórum » Alacsony költségű digitális oszcilloszkóp
Lapozás: OK   113 / 118
(#) bbatka válasza sargarigo hozzászólására (») Okt 9, 2021 /
 
Egyelőre én nem tettem ilyen magasra a mércét. Ezzel a projektel így is pokolian sok a munka. Úgy gondolom hogy két féle mintavétel lesz. Egy 32KB-os adattal (egyszeri). És egy másik egy képernyőnyi adatmennyiséggel folyamatosan.
Valószínűleg ha minden rendben lesz, akkor majd fejlesztem tovább.
(#) sargarigo válasza bbatka hozzászólására (») Okt 9, 2021 /
 
Kitartást!
(#) bbatka válasza sargarigo hozzászólására (») Okt 9, 2021 /
 
Kösz!
(#) bbatka válasza Thomas10100 hozzászólására (») Nov 15, 2021 /
 
Szia!

Megjelenítőként egyértelműen használható. A Raspberry PI hardveres képességeit nem ismerem, bár nekem is van egy. (3B-s)
A Raspberry ilyen fajta használatáról még nem hallottam. Nyilván több hónapos fejlesztést igényel feltételezve az elektronikában és programozásban való jártasságot.
(#) Thomas10100 válasza bbatka hozzászólására (») Nov 15, 2021 /
 
Közben töröltem mert találtam pár fórumot,ahol az fpga kisebb késleltetését írták.

Én mondjuk valami SPI analóg digitális átalakítóra gondoltam, bár nem tudom milyen sebességet, mintavételezést tudna.
(#) Thomas10100 hozzászólása Nov 16, 2021 /
 
tutijo felhasználó által megosztott szkóp doksik megvannak valakinek?
Már nem él a link.
Csak olvasgatni, nézegetni szeretném, mi hogyan van.

Köszönöm!
(#) killbill válasza Thomas10100 hozzászólására (») Nov 16, 2021 /
 
Melyikre gondolsz? Volt neki tobb is.
(#) Thomas10100 válasza killbill hozzászólására (») Nov 16, 2021 /
 
Hú azt nem tudom, innét lapoztam visszafelé. Miben voltak különbségek?

Köszi
(#) killbill válasza Thomas10100 hozzászólására (») Nov 16, 2021 / 2
 
Van egy szkóp, amit ketten csináltunk. Az komplett műszer, dobozban. 2x100 Msa/s, 320x240 LCD, gombok, stb. És csinált Feri egyedül is valami hasonló cuccot, az is FPGA alapú dolog volt, de az nem kész berendezés, csak egy panel.
(#) Thomas10100 válasza killbill hozzászólására (») Nov 16, 2021 /
 
Mennyire nyílt a dokumentáció róla? Az elsőről amit linkeltél.
Kapcsolasi rajz, forráskódok, egyebek?
Csak saját célra, és szerintem csak érdekességként mert nem hiszem hogy megtudnám csinálni.

Köszönöm
(#) killbill válasza Thomas10100 hozzászólására (») Nov 16, 2021 / 4
 
Nem titkos, egy idoben kint is volt a neten, csak szolgaltatovaltas miatt lekerult. Most hirtelen nem tudom megcsinalni, de felteszem ide a kapcsolási rajzot.

szkop.pdf
    
(#) killbill válasza killbill hozzászólására (») Nov 17, 2021 / 1
 
Felteszem ide a az FPGA forrást is.

chipsrc.zip
    
(#) sdrlab válasza killbill hozzászólására (») Nov 17, 2021 /
 
Dicséretes munka összességében! Nem sok hazai próbálkozásról tudok, ami eljutott ilyen szintig legalább...
Mekkora lett az eredő analóg sávszélesség a max bemeneti érzékenységnél ezekkel az IC-kkel?
(#) Thomas10100 válasza killbill hozzászólására (») Nov 17, 2021 /
 
Nagyon köszönöm!
(#) killbill válasza sdrlab hozzászólására (») Nov 17, 2021 /
 
Szia! Köszi. A sávszélességet nem tudom, sosem mértük.
(#) Thomas10100 hozzászólása Nov 17, 2021 /
 
Ilyenre is át lehetne rakni? Minap találtam a panelek között, meg vannak Cyclone 3 FPGAim.
(#) dB_Thunder válasza Thomas10100 hozzászólására (») Nov 18, 2021 /
 
És ezt át tudod forrasztani úgy hogy jó is legyen, és páciens is túlélje????
(#) Thomas10100 válasza dB_Thunder hozzászólására (») Nov 19, 2021 /
 
Manapság mindent meg lehet oldani, több ismerősöm is foglalkozik bga forrasztással
(#) Thomas10100 hozzászólása Dec 22, 2021 /
 
Megvásároltam a Hantek DSO2D10 oszcilloszkópot, szerintem a 72000Ft-ot nagyon megérte. Van rajta még jelgenerátor is.
Így már nem gondolkodok építésben sem.
(#) GPeti1977 hozzászólása Dec 25, 2021 /
 
6 éve építettem egy digitális szkópot:
A méregdrága Microchip demó kijelzője tönkrement, nem tudtam pótolni, Most elővettem az analóg panelt és egy raspberry pi -re írtam egy python kódot a Tkinter felhasználásával. A Microchip kijelzője a 320x480 képet kb 10fps-sel tudta frissíteni addig a tkinter csak 1 azaz 1 fps-sel, meg kell rajzolni 400x256 képpontot kell összekötni vonallá 2x a két csatornára, majd újra rajzolni feketével hogy az előző ne látszódjon majd újra rajzolni a hátteret, nem kevés.

Milyen olcsó hardwer vagy program raspberry-re lenne jó ami nagyon gyorsan tud rajzolni?
Készítettem egy szkóp demót javascripttel ez nagyon gyors de nem tudom hogyan tudnám beletolni az adatokat, pedig jó lenne mert egy telefon is lehetne a képernyő:
Bővebben: Javascript szkóp demó
(#) sdrlab válasza GPeti1977 hozzászólására (») Dec 25, 2021 /
 
Lassú kommunikációs lehetőségeknél más megjelenítési módot kell használni!
Pl, kirajzolod a két csatorna vonalait, ez még azért elég gyors művelet..., majd a teljes képernyő törlése helyett újrarajzolod ugyanezt, de háttér színű vonalakkal! Ekkor eltűnik a régi ábra, mintha csak törlést végeztél volna, csak jóval gyorsabban végezve vele! Innentől rajzolhatod a normál csatorna színekkel az új adatokat... Nagyvonalakban ennyi.
(#) GPeti1977 válasza sdrlab hozzászólására (») Dec 25, 2021 /
 
Nem törlöm a teljes képernyőt ennyire kezdő nem vagyok. Úgy van ahogy leirtad.
Canvas.create_line(x1, y1, x2, y2, fill="green")
Így rajzol a Tkinter vonalat, a javascript így:
ctx.beginPath();
ctx.moveTo(0,0);

for(var i= 0; i<480; i++){
ctx.lineTo(i,256-y[i]);
}
ctx.strokeStyle = '#00FF20';
ctx.stroke();

Az utolsó sorra jelenik meg az ábra,
A hozzászólás módosítva: Dec 25, 2021
(#) GPeti1977 válasza sdrlab hozzászólására (») Dec 25, 2021 /
 
Tudom hogy lehet pythonnal gyorsan rajzolni, pl a cura is azzal van megírva, ez egy gkód konvertáló 3d nyomtatóhoz, a 3d modelleket nagyon szépen lehet vele forgatni, az WX nevű GUI-t használ nem Tkintert
Megmutatom a programot, a fifo ram-okból kiolvasom az adatokat mikor megtelt 1024 byte adat, majd az első 540 adatban keresek egy trigger pontot ahonnan ki tudom rajzolni a képernyő 480 oszlopát.
  1. from tkinter import *
  2. import tkinter as tk
  3. import time
  4. import serial
  5. import RPi.GPIO as gpio
  6. import os
  7. import rom
  8. import math
  9. import numpy as np
  10. import datetime
  11. gpio.setwarnings(False)
  12. gpio.cleanup
  13. gpio.setmode(gpio.BCM)
  14. gpio.setup(17, gpio.OUT)
  15. gpio.setup(27, gpio.OUT)
  16. gpio.setup(22, gpio.OUT)
  17. gpio.setup(5, gpio.IN,pull_up_down=gpio.PUD_DOWN)
  18. gpio.setup(6, gpio.IN,pull_up_down=gpio.PUD_DOWN)
  19. gpio.setup(13, gpio.IN,pull_up_down=gpio.PUD_DOWN)
  20. gpio.setup(19, gpio.IN,pull_up_down=gpio.PUD_DOWN)
  21. gpio.setup(26, gpio.IN,pull_up_down=gpio.PUD_DOWN)
  22. gpio.output(17, gpio.HIGH)
  23. gpio.output(27, gpio.HIGH)
  24. gpio.output(22, gpio.LOW)
  25. time.1)
  26. ser = serial.Serial(
  27.         port='/dev/ttyAMA0', #Replace ttyS0 with ttyAM0 for Pi1,Pi2,Pi0ttyAMA0
  28.         baudrate = 115200,
  29.         parity=serial.PARITY_NONE,
  30.         stopbits=serial.STOPBITS_ONE,
  31.         bytesize=serial.EIGHTBITS,
  32.         timeout=1
  33. )
  34. ser.close()
  35. ser.open()
  36. if ser.isOpen():
  37.     print ('Open: ' + ser.portstr)
  38.     values0 = bytearray([254,1,0,255])
  39.     ser.write(values0)
  40.     time.0.1)
  41.     values1 = bytearray([254,2,0,255])
  42.     ser.write(values1)
  43.     time.0.1)
  44.     values1b = bytearray([254,3,0,255])
  45.     ser.write(values1b)
  46.     time.0.1)
  47.     values2 = bytearray([254,6,116,255])
  48.     ser.write(values2)
  49.     time.0.1)
  50.     values2b = bytearray([254,7,116,255])
  51.     ser.write(values2b)
  52.     time.0.1)
  53.    
  54.     values3 = bytearray([254,4,0,255])
  55.     ser.write(values3)
  56.     time.0.1)
  57.     values3b = bytearray([254,5,0,255])
  58.     ser.write(values3b)
  59.     time.0.1)
  60.  
  61.  
  62. ch1 = np.array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  63. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  64. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  65. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  66. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  67. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  68. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  69. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  70. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  71. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  72. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  73. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  74. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  75. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  76. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  77. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  78. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  79. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  80. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  81. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  82. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
  83.  
  84. ch1old = np.array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  85. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  86. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  87. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  88. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  89. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  90. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  91. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  92. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  93. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  94. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  95. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  96. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  97. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  98. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  99. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  100. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  101. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  102. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  103. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  104. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
  105.  
  106. ch2 = np.array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  107. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  108. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  109. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  110. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  111. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  112. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  113. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  114. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  115. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  116. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  117. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  118. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  119. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  120. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  121. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  122. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  123. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  124. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  125. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                
  126. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
  127.  
  128. ch2old = np.array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  129. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  130. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  131. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  132. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  133. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  134. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  135. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  136. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  137. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  138. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  139. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  140. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  141. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  142. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  143. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  144. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  145. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  146. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  147. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,                
  148. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])
  149.  
  150. sat = np.array([0])
  151. trigch = np.array([0])
  152.  
  153. def sel():
  154.     xt = xtv.get()
  155.    
  156.     xts = bytearray([254,1,xt,255])
  157.     ser.write(xts)
  158.    
  159. def sel1():
  160.     g1 = g1v.get()
  161.    
  162.     g1s= bytearray([254,2,g1,255])
  163.     ser.write(g1s)
  164. def sel2():
  165.     g2 = g2v.get()
  166.    
  167.     g2s= bytearray([254,3,g2,255])
  168.     ser.write(g2s)
  169.    
  170. def sel3():
  171.     g3 = g3v.get()
  172.    
  173.     g3s= bytearray([254,4,g3,255])
  174.     ser.write(g3s)
  175.    
  176. def sel4():
  177.     g4 = g4v.get()
  178.    
  179.     g4s= bytearray([254,5,g4,255])
  180.     ser.write(g4s)
  181. def sel5():
  182.     g5 = g5v.get()
  183.    
  184.     trigch[0]=g5
  185.        
  186. win=Tk()
  187.  
  188. win.title("DSO")
  189. f = tk.Frame(win, width=640, height=40, borderwidth=10, relief=FLAT)
  190.  
  191. canvas=tk.Canvas(win, width=400, height=260, bg = "black")
  192. canvas.grid(row=0,column=1, rowspan = 10)
  193. xtv = IntVar()
  194. g1v = IntVar()
  195. g2v = IntVar()
  196. g3v = IntVar()
  197. g4v = IntVar()
  198. g5v = IntVar()
  199. R1=Radiobutton(win, text = "50ms", variable = xtv, value = 0, comm = sel).grid(row=0,column=0, sticky="w")
  200. R2=Radiobutton(win, text = "25ms", variable = xtv, value = 1, comm = sel).grid(row=1,column=0, sticky="w")
  201. R3=Radiobutton(win, text = "10ms", variable = xtv, value = 2, comm = sel).grid(row=2,column=0, sticky="w")
  202. R4=Radiobutton(win, text = "5ms", variable = xtv, value = 3, comm = sel).grid(row=3,column=0, sticky="w")
  203. R5=Radiobutton(win, text = "2,5ms", variable = xtv, value = 4, comm = sel).grid(row=4,column=0, sticky="w")
  204. R6=Radiobutton(win, text = "1ms", variable = xtv, value = 5, comm = sel).grid(row=5,column=0, sticky="w")
  205. R7=Radiobutton(win, text = "500us", variable = xtv, value = 6, comm = sel).grid(row=6,column=0, sticky="w")
  206. R8=Radiobutton(win, text = "250us", variable = xtv, value = 7, comm = sel).grid(row=7,column=0, sticky="w")
  207. R9=Radiobutton(win, text = "100us", variable = xtv, value = 8, comm = sel).grid(row=8,column=0, sticky="w")
  208. R10=Radiobutton(win, text = "50us", variable = xtv, value = 9, comm = sel).grid(row=9,column=0, sticky="w")
  209. R11=Radiobutton(win, text = "25us", variable = xtv, value = 10, comm = sel).grid(row=10,column=0, sticky="w")
  210. R12=Radiobutton(win, text = "10us", variable = xtv, value = 11, comm = sel).grid(row=11,column=0, sticky="w")
  211. R13=Radiobutton(win, text = "5us", variable = xtv, value = 12, comm = sel).grid(row=12,column=0, sticky="w")
  212. R14=Radiobutton(win, text = "2,5us", variable = xtv, value = 13, comm = sel).grid(row=13,column=0, sticky="w")
  213. R15=Radiobutton(win, text = "1us", variable = xtv, value = 14, comm = sel).grid(row=14,column=0, sticky="w")
  214. R16=Radiobutton(win, text = "500ns", variable = xtv, value = 15, comm = sel).grid(row=15,column=0, sticky="w")
  215.  
  216. g1 = Label(win, text = "Ch1 Gain").grid(row=0,column=2, sticky="e")
  217. R17=Radiobutton(win, text = "10mV", variable = g1v, value = 0, comm = sel1).grid(row=1,column=2, sticky="e")
  218. R18=Radiobutton(win, text = "20mV", variable = g1v, value = 1, comm = sel1).grid(row=2,column=2, sticky="e")
  219. R19=Radiobutton(win, text = "50mV", variable = g1v, value = 2, comm = sel1).grid(row=3,column=2, sticky="e")
  220. R20=Radiobutton(win, text = "100mV", variable = g1v, value = 3, comm = sel1).grid(row=4,column=2, sticky="e")
  221. R21=Radiobutton(win, text = "200mV", variable = g1v, value = 4, comm = sel1).grid(row=5,column=2, sticky="e")
  222. R22=Radiobutton(win, text = "500mV", variable = g1v, value = 5, comm = sel1).grid(row=6,column=2, sticky="e")
  223. R23=Radiobutton(win, text = "1V", variable = g1v, value = 6, comm = sel1).grid(row=7,column=2, sticky="e")
  224. R24=Radiobutton(win, text = "2V", variable = g1v, value = 7, comm = sel1).grid(row=8,column=2, sticky="e")
  225. R25=Radiobutton(win, text = "5V", variable = g1v, value = 8, comm = sel1).grid(row=9,column=2, sticky="e")
  226.  
  227.  
  228.  
  229. g2 = Label(win, text = "Ch2 Gain").grid(row=0,column=3, sticky="e")
  230. R26=Radiobutton(win, text = "10mV", variable = g2v, value = 0, comm = sel2).grid(row=1,column=3, sticky="e")
  231. R27=Radiobutton(win, text = "20mV", variable = g2v, value = 1, comm = sel2).grid(row=2,column=3, sticky="e")
  232. R28=Radiobutton(win, text = "50mV", variable = g2v, value = 2, comm = sel2).grid(row=3,column=3, sticky="e")
  233. R29=Radiobutton(win, text = "100mV", variable = g2v, value = 3, comm = sel2).grid(row=4,column=3, sticky="e")
  234. R30=Radiobutton(win, text = "200mV", variable = g2v, value = 4, comm = sel2).grid(row=5,column=3, sticky="e")
  235. R31=Radiobutton(win, text = "500mV", variable = g2v, value = 5, comm = sel2).grid(row=6,column=3, sticky="e")
  236. R32=Radiobutton(win, text = "1V", variable = g2v, value = 6, comm = sel2).grid(row=7,column=3, sticky="e")
  237. R33=Radiobutton(win, text = "2V", variable = g2v, value = 7, comm = sel2).grid(row=8,column=3, sticky="e")
  238. R34=Radiobutton(win, text = "5V", variable = g2v, value = 8, comm = sel2).grid(row=9,column=3, sticky="e")
  239.  
  240. R35=Radiobutton(win, text = "AC", variable = g3v, value = 0, comm = sel3).grid(row=10,column=2, sticky="e")
  241. R36=Radiobutton(win, text = "DC", variable = g3v, value = 1, comm = sel3).grid(row=11,column=2, sticky="e")
  242.  
  243. R37=Radiobutton(win, text = "AC", variable = g4v, value = 0, comm = sel4).grid(row=10,column=3, sticky="e")
  244. R38=Radiobutton(win, text = "DC", variable = g4v, value = 1, comm = sel4).grid(row=11,column=3, sticky="e")
  245.  
  246. R39=Radiobutton(win, text = "Trig Ch1", variable = g5v, value = 0, comm = sel5).grid(row=12,column=2, sticky="e")
  247. R40=Radiobutton(win, text = "Trig Ch2", variable = g5v, value = 1, comm = sel5).grid(row=12,column=3, sticky="e")
  248.  
  249. def tick():
  250.    
  251.     win.after(1000, tick)
  252.     d0=gpio.input(26)
  253.     sync=0
  254.    
  255.     if(d0==True):
  256.        
  257.         a = datetime.datetime.now()
  258.         gpio.output(27, gpio.HIGH)#clk2
  259.         for x in range(0,1031):
  260.        
  261.             gpio.output(22, gpio.LOW)#L/H
  262.             gpio.output(17, gpio.LOW)#clk1
  263.  
  264.             d1=gpio.input(5)#1
  265.             d2=gpio.input(6)#2
  266.             d3=gpio.input(13)#5
  267.             d4=gpio.input(19)#4
  268.            
  269.             gpio.output(22, gpio.HIGH)
  270.  
  271.             d5=gpio.input(5)#1
  272.             d6=gpio.input(6)#2
  273.             d7=gpio.input(13)#5
  274.             d8=gpio.input(19)#4
  275.             gpio.output(17, gpio.HIGH)
  276.             ch1[x]=256-(d4*1+d3*2+d2*4+d1*8  +  d8*16+d7*32+d6*64+d5*128)
  277.  
  278.         gpio.output(17, gpio.LOW)#clk1
  279.        
  280.         for x in range(0,1031):
  281.             gpio.output(22, gpio.LOW)#L/H
  282.             gpio.output(27, gpio.LOW)#clk2
  283.  
  284.             d1=gpio.input(5)#1
  285.             d2=gpio.input(6)#2
  286.             d3=gpio.input(13)#5
  287.             d4=gpio.input(19)#4
  288.            
  289.             gpio.output(22, gpio.HIGH)
  290.  
  291.             d5=gpio.input(5)#1
  292.             d6=gpio.input(6)#2
  293.             d7=gpio.input(13)#5
  294.             d8=gpio.input(19)#4
  295.            
  296.             gpio.output(27, gpio.HIGH)
  297.        
  298.             ch2[x]=256-(d4*1+d3*2+d2*4+d1*8  +  d8*16+d7*32+d6*64+d5*128)
  299.         gpio.output(27, gpio.LOW)#clk2
  300.         gpio.output(17, gpio.LOW)#clk1
  301.        
  302.         chx1 = 128  
  303.         sb = sat[0]
  304.         e1 = sb + 478
  305.    
  306.         for x in range(sb,e1):
  307.             chx=ch1old[x]
  308.             canvas.create_line(x-sb, chx,x+1-sb,chx1, fill="black", width=1)
  309.             chx1=chx
  310.            
  311.         for x in range(sb,e1):
  312.             chx=ch2old[x]
  313.             canvas.create_line(x-sb, chx,x+1-sb,chx1, fill="black", width=1)
  314.             chx1=chx    
  315.            
  316.         s=0
  317.         sen=0
  318.         sbt = 0
  319.         pretrig = 100
  320.         sylevel=127
  321.                
  322.         while(sen == 0 ):
  323.             s=s+1
  324.             if(s==540):
  325.                 sen = 1
  326.                
  327.             if (trigch[0]==0):
  328.                 if (ch1[s] > sylevel  s > pretrig):
  329.                     sbt = 1
  330.            
  331.                 if(ch1[s] <= sylevel  sbt == 1 ):
  332.                     sen = 1
  333.                    
  334.             if (trigch[0]==1):
  335.                 if (ch2[s] > sylevel  s > pretrig):
  336.                     sbt = 1
  337.        
  338.                 if(ch2[s] <= sylevel  sbt == 1 ):
  339.                     sen = 1
  340.                  
  341.                  
  342.         sa = s-pretrig
  343.         e=sa+478
  344.         sat[0] = sa        
  345.         for x in range(sa,e):
  346.             chx=ch1[x]
  347.             ch1old[x]=ch1[x]
  348.             canvas.create_line(x-sa, chx,x+1-sa,chx1, fill="green", width=1)
  349.             chx1=chx
  350.        
  351.         for x in range(sa,e):
  352.             chx=ch2[x]
  353.             ch2old[x]=ch2[x]
  354.             canvas.create_line(x-sa, chx,x+1-sa,chx1, fill="red", width=1)
  355.             chx1=chx
  356.            
  357.         canvas.create_line(390,sylevel,400,sylevel, fill="yellow", width=1)
  358.         canvas.create_line(pretrig,0,pretrig,10, fill="yellow", width=1)
  359.         canvas.create_line(0,128,400,128, fill="gray", width=1)
  360.         canvas.create_line(200,0,200,260, fill="gray", width=1)
  361.         for y in range(0,260):
  362.             for x in range(0,400):
  363.                 if(y % 20 == 0  x % 20 == 0):
  364.                     canvas.create_line(x,y,x+1,y, fill="gray", width=1)
  365.                  
  366.         b= datetime.datetime.now()
  367.         c = b - a
  368.         print (c.microseconds/1000)
  369.        
  370.     else:
  371.         time.0.02)
  372.                  
  373. tick()
  374.  
  375. win.mainloop()
A hozzászólás módosítva: Dec 25, 2021
(#) sargarigo válasza GPeti1977 hozzászólására (») Dec 25, 2021 /
 
Én a helyedben ebbe az irányba mennék el. Kell egy stream forrás, ami tolja az adatokat, erre meg már vannak kész megoldások. De most gondolatébresztettél amúgy, ennek én is utána fogok nézni, mert pont kapóra jönne az egyik projektemben
(#) sdrlab válasza GPeti1977 hozzászólására (») Dec 25, 2021 1 /
 
Amit leírtál ott, az nem éppen erről a megjelenítési módról szólt, amiről beszéltem...! Amit leírtam, abban sehol sem törölsz effektíve, csak a legszükségesebb helyen újrarajzolsz! És mivel a teljes kép csak kis része változik kockáról kockára, így átlagban jó nagy a nyereség...
(#) GPeti1977 válasza sargarigo hozzászólására (») Dec 25, 2021 /
 
Majd tanulmámyozom. Elkészíthető akkor egy digit szkóp amely nodemcuról megy, és a telefon a kijelző wifin keresztül?
(#) Pethical válasza GPeti1977 hozzászólására (») Dec 26, 2021 / 1
 
Ha javascriptes (webes) megjelenítést szeretnél, akkor websockettel tudsz vele aránylag kisebb késleltetéssel kommunikálni, de az se lesz szerintem elég gyors.

Ha pythonnal rajzolnál, akkor ajánlom a pyGame használatát, az SDL-el rajzol, azaz kihasználja a hardveres gyorsítást is. Ha egy játéknak elég fps-t tud, akkor egy grafikonnal se lesz baja.

Egyszerű megoldások még: C# és mono, vagy Pascal és lazarus, mind a kettő fordít és fut linuxon (ARMen is) és szinte biztos, hogy van hozzájuk ilyen komponens ami ezt kirajzolja neked gyorsan.
(#) GPeti1977 válasza Pethical hozzászólására (») Dec 26, 2021 /
 
Kipróbáltam jó lett, 256x480 as képernyőt a két csatornával 300ms alatt frissít, ebből 150ms a 2048 adat beolvasása a két RAM ból, elég lassú a raspberry gpio kezelése, mint az arduino digitalWrite megoldása.
Kezelőgombokat (radiobutton) kellene még létrehozni pygame alatt.
A programozása is egyszerűbb mert újra rajzolja ciklikusan a képernyőt, de mégis gyors
(#) Pethical válasza GPeti1977 hozzászólására (») Dec 26, 2021 /
 
Hát igen, sajnos ezen a Linux is lassít amiért nem valós idejű ugye, mint egy kontroller esetében. DMA-t nem tud amúgy a pi? Az sokat tudna rajta gyorsítani, ha lenne esetleg, de erről nincs információm.

Szerkesztés: ja, most esett le, hogy RAMból való olvasás esetén nem feltétlen segítség, ha van dma.
A hozzászólás módosítva: Dec 26, 2021
(#) GPeti1977 válasza Pethical hozzászólására (») Dec 26, 2021 /
 
Csak gyorsabb, kifelejtettem hogy a mintavétel is időbe telik, ha a legnagyobb 40Ms/s akkor akkor 10fps a képfrissítés több nem is kell. A tkinter egy másik panelon fut az vezérli az analóg panelt, fapados de nekem így jó. Ha a kép jobb sarkába belekattintok akkor ott megjelenik egy kék vonal ami a szinkron szintet állítja be. Hogy tudjak mérni még azt szeretném hogy ha belekttintok a képbe akkor elmentse a kordinátákat egy fájlba, azt pedig beolvasom egy gombnyomással a DSOPanelen (mert ott tudjuk a beállításokat), így ott ki tudom íratni a feszültséget és az időt.

dsopanel.png
    
Következő: »»   113 / 118
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem