Fórum témák

» Több friss téma
Fórum » Alacsony költségű digitális oszcilloszkóp
Lapozás: OK   113 / 117
(#) 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: '"DSO")
  38. f = tk.Frame(win, width=640, height=40, borderwidth=10, relief=FLAT)
  39.  
  40. canvas=tk.Canvas(win, width=400, height=260, bg = "black")
  41. canvas.grid(row=0,column=1, rowspan = 10)
  42. xtv = IntVar()
  43. g1v = IntVar()
  44. g2v = IntVar()
  45. g3v = IntVar()
  46. g4v = IntVar()
  47. g5v = IntVar()
  48. R1=Radiobutton(win, text = "50ms", variable = xtv, value = 0, comm = sel).grid(row=0,column=0, sticky="w")
  49. R2=Radiobutton(win, text = "25ms", variable = xtv, value = 1, comm = sel).grid(row=1,column=0, sticky="w")
  50. R3=Radiobutton(win, text = "10ms", variable = xtv, value = 2, comm = sel).grid(row=2,column=0, sticky="w")
  51. R4=Radiobutton(win, text = "5ms", variable = xtv, value = 3, comm = sel).grid(row=3,column=0, sticky="w")
  52. R5=Radiobutton(win, text = "2,5ms", variable = xtv, value = 4, comm = sel).grid(row=4,column=0, sticky="w")
  53. R6=Radiobutton(win, text = "1ms", variable = xtv, value = 5, comm = sel).grid(row=5,column=0, sticky="w")
  54. R7=Radiobutton(win, text = "500us", variable = xtv, value = 6, comm = sel).grid(row=6,column=0, sticky="w")
  55. R8=Radiobutton(win, text = "250us", variable = xtv, value = 7, comm = sel).grid(row=7,column=0, sticky="w")
  56. R9=Radiobutton(win, text = "100us", variable = xtv, value = 8, comm = sel).grid(row=8,column=0, sticky="w")
  57. R10=Radiobutton(win, text = "50us", variable = xtv, value = 9, comm = sel).grid(row=9,column=0, sticky="w")
  58. R11=Radiobutton(win, text = "25us", variable = xtv, value = 10, comm = sel).grid(row=10,column=0, sticky="w")
  59. R12=Radiobutton(win, text = "10us", variable = xtv, value = 11, comm = sel).grid(row=11,column=0, sticky="w")
  60. R13=Radiobutton(win, text = "5us", variable = xtv, value = 12, comm = sel).grid(row=12,column=0, sticky="w")
  61. R14=Radiobutton(win, text = "2,5us", variable = xtv, value = 13, comm = sel).grid(row=13,column=0, sticky="w")
  62. R15=Radiobutton(win, text = "1us", variable = xtv, value = 14, comm = sel).grid(row=14,column=0, sticky="w")
  63. R16=Radiobutton(win, text = "500ns", variable = xtv, value = 15, comm = sel).grid(row=15,column=0, sticky="w")
  64.  
  65. g1 = Label(win, text = "Ch1 Gain").grid(row=0,column=2, sticky="e")
  66. R17=Radiobutton(win, text = "10mV", variable = g1v, value = 0, comm = sel1).grid(row=1,column=2, sticky="e")
  67. R18=Radiobutton(win, text = "20mV", variable = g1v, value = 1, comm = sel1).grid(row=2,column=2, sticky="e")
  68. R19=Radiobutton(win, text = "50mV", variable = g1v, value = 2, comm = sel1).grid(row=3,column=2, sticky="e")
  69. R20=Radiobutton(win, text = "100mV", variable = g1v, value = 3, comm = sel1).grid(row=4,column=2, sticky="e")
  70. R21=Radiobutton(win, text = "200mV", variable = g1v, value = 4, comm = sel1).grid(row=5,column=2, sticky="e")
  71. R22=Radiobutton(win, text = "500mV", variable = g1v, value = 5, comm = sel1).grid(row=6,column=2, sticky="e")
  72. R23=Radiobutton(win, text = "1V", variable = g1v, value = 6, comm = sel1).grid(row=7,column=2, sticky="e")
  73. R24=Radiobutton(win, text = "2V", variable = g1v, value = 7, comm = sel1).grid(row=8,column=2, sticky="e")
  74. R25=Radiobutton(win, text = "5V", variable = g1v, value = 8, comm = sel1).grid(row=9,column=2, sticky="e")
  75.  
  76.  
  77.  
  78. g2 = Label(win, text = "Ch2 Gain").grid(row=0,column=3, sticky="e")
  79. R26=Radiobutton(win, text = "10mV", variable = g2v, value = 0, comm = sel2).grid(row=1,column=3, sticky="e")
  80. R27=Radiobutton(win, text = "20mV", variable = g2v, value = 1, comm = sel2).grid(row=2,column=3, sticky="e")
  81. R28=Radiobutton(win, text = "50mV", variable = g2v, value = 2, comm = sel2).grid(row=3,column=3, sticky="e")
  82. R29=Radiobutton(win, text = "100mV", variable = g2v, value = 3, comm = sel2).grid(row=4,column=3, sticky="e")
  83. R30=Radiobutton(win, text = "200mV", variable = g2v, value = 4, comm = sel2).grid(row=5,column=3, sticky="e")
  84. R31=Radiobutton(win, text = "500mV", variable = g2v, value = 5, comm = sel2).grid(row=6,column=3, sticky="e")
  85. R32=Radiobutton(win, text = "1V", variable = g2v, value = 6, comm = sel2).grid(row=7,column=3, sticky="e")
  86. R33=Radiobutton(win, text = "2V", variable = g2v, value = 7, comm = sel2).grid(row=8,column=3, sticky="e")
  87. R34=Radiobutton(win, text = "5V", variable = g2v, value = 8, comm = sel2).grid(row=9,column=3, sticky="e")
  88.  
  89. R35=Radiobutton(win, text = "AC", variable = g3v, value = 0, comm = sel3).grid(row=10,column=2, sticky="e")
  90. R36=Radiobutton(win, text = "DC", variable = g3v, value = 1, comm = sel3).grid(row=11,column=2, sticky="e")
  91.  
  92. R37=Radiobutton(win, text = "AC", variable = g4v, value = 0, comm = sel4).grid(row=10,column=3, sticky="e")
  93. R38=Radiobutton(win, text = "DC", variable = g4v, value = 1, comm = sel4).grid(row=11,column=3, sticky="e")
  94.  
  95. R39=Radiobutton(win, text = "Trig Ch1", variable = g5v, value = 0, comm = sel5).grid(row=12,column=2, sticky="e")
  96. R40=Radiobutton(win, text = "Trig Ch2", variable = g5v, value = 1, comm = sel5).grid(row=12,column=3, sticky="e")
  97.  
  98. def tick():
  99.    
  100.     win.after(1000, tick)
  101.     d0=gpio.input(26)
  102.     sync=0
  103.    
  104.     if(d0==True):
  105.        
  106.         a = datetime.datetime.now()
  107.         gpio.output(27, gpio.HIGH)#clk2
  108.         for x in range(0,1031):
  109.        
  110.             gpio.output(22, gpio.LOW)#L/H
  111.             gpio.output(17, gpio.LOW)#clk1
  112.  
  113.             d1=gpio.input(5)#1
  114.             d2=gpio.input(6)#2
  115.             d3=gpio.input(13)#5
  116.             d4=gpio.input(19)#4
  117.            
  118.             gpio.output(22, gpio.HIGH)
  119.  
  120.             d5=gpio.input(5)#1
  121.             d6=gpio.input(6)#2
  122.             d7=gpio.input(13)#5
  123.             d8=gpio.input(19)#4
  124.             gpio.output(17, gpio.HIGH)
  125.             ch1[x]=256-(d4*1+d3*2+d2*4+d1*8  +  d8*16+d7*32+d6*64+d5*128)
  126.  
  127.         gpio.output(17, gpio.LOW)#clk1
  128.        
  129.         for x in range(0,1031):
  130.             gpio.output(22, gpio.LOW)#L/H
  131.             gpio.output(27, gpio.LOW)#clk2
  132.  
  133.             d1=gpio.input(5)#1
  134.             d2=gpio.input(6)#2
  135.             d3=gpio.input(13)#5
  136.             d4=gpio.input(19)#4
  137.            
  138.             gpio.output(22, gpio.HIGH)
  139.  
  140.             d5=gpio.input(5)#1
  141.             d6=gpio.input(6)#2
  142.             d7=gpio.input(13)#5
  143.             d8=gpio.input(19)#4
  144.            
  145.             gpio.output(27, gpio.HIGH)
  146.        
  147.             ch2[x]=256-(d4*1+d3*2+d2*4+d1*8  +  d8*16+d7*32+d6*64+d5*128)
  148.         gpio.output(27, gpio.LOW)#clk2
  149.         gpio.output(17, gpio.LOW)#clk1
  150.        
  151.         chx1 = 128  
  152.         sb = sat[0]
  153.         e1 = sb + 478
  154.    
  155.         for x in range(sb,e1):
  156.             chx=ch1old[x]
  157.             canvas.create_line(x-sb, chx,x+1-sb,chx1, fill="black", width=1)
  158.             chx1=chx
  159.            
  160.         for x in range(sb,e1):
  161.             chx=ch2old[x]
  162.             canvas.create_line(x-sb, chx,x+1-sb,chx1, fill="black", width=1)
  163.             chx1=chx    
  164.            
  165.         s=0
  166.         sen=0
  167.         sbt = 0
  168.         pretrig = 100
  169.         sylevel=127
  170.                
  171.         while(sen == 0 ):
  172.             s=s+1
  173.             if(s==540):
  174.                 sen = 1
  175.                
  176.             if (trigch[0]==0):
  177.                 if (ch1[s] > sylevel  s > pretrig):
  178.                     sbt = 1
  179.            
  180.                 if(ch1[s] <= sylevel  sbt == 1 ):
  181.                     sen = 1
  182.                    
  183.             if (trigch[0]==1):
  184.                 if (ch2[s] > sylevel  s > pretrig):
  185.                     sbt = 1
  186.        
  187.                 if(ch2[s] <= sylevel  sbt == 1 ):
  188.                     sen = 1
  189.                  
  190.                  
  191.         sa = s-pretrig
  192.         e=sa+478
  193.         sat[0] = sa        
  194.         for x in range(sa,e):
  195.             chx=ch1[x]
  196.             ch1old[x]=ch1[x]
  197.             canvas.create_line(x-sa, chx,x+1-sa,chx1, fill="green", width=1)
  198.             chx1=chx
  199.        
  200.         for x in range(sa,e):
  201.             chx=ch2[x]
  202.             ch2old[x]=ch2[x]
  203.             canvas.create_line(x-sa, chx,x+1-sa,chx1, fill="red", width=1)
  204.             chx1=chx
  205.            
  206.         canvas.create_line(390,sylevel,400,sylevel, fill="yellow", width=1)
  207.         canvas.create_line(pretrig,0,pretrig,10, fill="yellow", width=1)
  208.         canvas.create_line(0,128,400,128, fill="gray", width=1)
  209.         canvas.create_line(200,0,200,260, fill="gray", width=1)
  210.         for y in range(0,260):
  211.             for x in range(0,400):
  212.                 if(y % 20 == 0  x % 20 == 0):
  213.                     canvas.create_line(x,y,x+1,y, fill="gray", width=1)
  214.                  
  215.         b= datetime.datetime.now()
  216.         c = b - a
  217.         print (c.microseconds/1000)
  218.        
  219.     else:
  220.         time.0.02)
  221.                  
  222. tick()
  223.  
  224. 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
    
(#) GPeti1977 hozzászólása Dec 28, 2021 / 1
 
Kicsi zajos jel így látszik a képen egy analóghoz képest, nem is jó de nem is rossz.
(#) GPeti1977 válasza GPeti1977 hozzászólására (») Dec 29, 2021 / 1
 
Egy bit hiányzott, ilyen a kép hogy javítottam, tudom magamban beszélek csak nem akarom hogy egy rossz kép maradjon fent.
(#) sargarigo válasza GPeti1977 hozzászólására (») Dec 29, 2021 /
 
Magadban beszélsz ez igaz, de azért van aki hallgasson!

Hogyan állítottad össze a cuccot? Mi végzi az átalakítást?
(#) GPeti1977 válasza sargarigo hozzászólására (») Dec 29, 2021 / 1
 
A bemenete osztó olyan mint a hagyományos oszcilloszkóban, kompenzált feszültségosztó, természetesen szabványos 1/10 es mérőkábellel, azután van egy jfet bementű műveleti erősitő, utána egy 74HC5051 analóg kapcsoló a finom osztáshoz, mégegy gyors műveleti erősítő, ez végzi az offszet eltolást a egy digitális poti meg egy invertáló műveleti erősítő segítségével, a jel TLC5540 párhuzamos A/D átalakítóra kerül, a 8 bites kimenete egy MK45H120 fifo RAM bemenetére kerül, ennek a ramnak van párhuzamos be és kimenete, nincs címzése csak az adatbelépést egy órajel bemenet végzi, mikor megtelt jelzi egy lábon, a memóriája 1kB 2x akkora mint a képernyő szélessége, az adat kiolvasását egy másik órajel bemenettel lehet elvégezni, az órajelet 400Hz és 40MHz között egy p8x32a proci belső pll áramköre adja, végez még portbővitést a reléknek és az analogvkapcsolóknak, illetve i2c a digit potinak. Mikor megtelt a ram akkor egy raspberry kiolvassa mind az 1024 bájtot amit eltárol egy tömbben, maj az elsò felében keres egy trigger pontot, a szintet és a slope ot is be lehet állitani valamint a pretiggert is így a trigger előtt is láthatjuk mi van. A képernyőre rajzolást raspberry pi vel van, a pygame python modul rajzol, illetve fut egy tkinter nevű gui is, ez uart on keresztül vezérli a p8x32a procit mint emlitettem beállitja a mintavételt, kapcsolgatja a reléket stb, illetve a két futó alkalmazás között egy text fáj tart kapcsolatot meg 2 pár összekötött gpio láb hogy a kurzorral mért érték helyes legyen. Egyébként két csatornás.
A hozzászólás módosítva: Dec 29, 2021
(#) sargarigo válasza GPeti1977 hozzászólására (») Dec 29, 2021 /
 
Ez igen! Azért ez nem kicsi projekt! Tervezel belőle cikket közölni? Én biztosan nagyon örülnék neki!
(#) GPeti1977 válasza sargarigo hozzászólására (») Dec 29, 2021 / 1
 
Még nem írtam cikket, az analóg panel régebben készült (mivel a kijelző része tönkrement, kidobtam hogy ráértem visszahoztam a "kukából" gondoltam csak életre keltem a 20 IC-t tartalmazó panelt, mert sok munka volt vele) most már egyrészt korszerűbben megoldható (órajel), másrészt fifo ram-ot nem gyártanak csak ebay-en lehet még kapni de abból is a leggyorsabb rank jó csak, ahhoz képest hogy próbapanelen van öszerakva, ami meglepő hogy látom zajmentesen hogy a múltkor épített rádióm első erősítőfokozatán 10mVpp jel, van ,ezt a gyári márkás digit szópon is láttam de saját zajából kellet kivenni itt egy pixel zaj sincsen. A kapcsolást is vissza kell rajzolnom, itt a nyák terv is fontos meg a GND kialakítása, de a 3 programot ami működteti azt ide is felrakhatom.

Mindent egérről lehet kezelni, kivéve a RUN/HOLD az maradt nyomógomb hogy gyorsan rá lehessen csapni, biztos jó jönnem még más funkciók is de azok csak lassítanák a rajzolást, esetleg egy X-Y módot nem nehéz leprogramozni, illetbe a raspberry SPI portja szabad így a dobozban még elférne egy AD9833 - mal egy funkciógenerátor.
(#) sdrlab válasza GPeti1977 hozzászólására (») Dec 30, 2021 2 /
 
Nem akarlak elkeseríteni, mert sok munkád van benne..., de ez még így mindig a kb használhatatlan kategória! Ránézve a szkópábrára te meg tudod mondani, tiszta sin a jel, vagy van rajta tüskék hada??! Mert ha ilyen a jelforrásod - dobd ki, vagy szűrd meg előtte! Ha az kifogástalan jelet ad, akkor viszont visszakanyarodunk az elejére...
Egy szkóp akkor ér valamit, ha megbízhatóan mutatja a pillanatnyi helyzetet, jól determinált hibaértékkel ábrázolva azt. Ha ezt nem tudja, csak egy játékszer marad, de nem műszer....
(#) GPeti1977 válasza sdrlab hozzászólására (») Dec 30, 2021 / 4
 
Nem akarok meg nem is tudok egy gyári több évtized munkájával kifejlesztett gyári szkóppal versenyezni, nincs is értelme mert már 80ezerért lehet kapni, ha nagyon akarok veszek egyet, meg a munkahelyemen van egy köbméter mindebféle szkóp, az előbbi képemen tényleg van egy tüske hogy azt most a rádióból jövő zaj volt vagy a szkóp tévesztett nem tudom, de igazából mindegy. Ha visszaolvasod 2006 óta a topikot más mit tudott elérni? (Egy kivétellel)
A hozzászólás módosítva: Dec 30, 2021
(#) matheattila válasza GPeti1977 hozzászólására (») Jan 1, 2022 /
 
Olvasgatva az utolsó kommenteket, meghoztad a kedvem, hogy én is elővegyem a 2014-ben eltett szkópot aminek nekifogtam Az egy két csatornás USBs szkóp 100Msps ADC-vel, SRAM-al, CPLD-vel és egy PIC32-essel A HW megvan és elvileg működőképes csak a SW kellene rá + a számitógépes interfész...lesz vele még munkám bőven
(#) KBal76 hozzászólása Jan 1, 2022 /
 
BUÉK! Van pár MCM6290 16k*4bit SRAM-om. Nem túl lassúak, 15ns. Egyszer egy távoli galaxisban úgy gondoltam építek én is házilag szkópot, de már elmúlt. Szóval akinek kell kap egy csôvel. DIL24 tok. Számlálókkal gondoltam hajtani.
(#) GPeti1977 válasza matheattila hozzászólására (») Jan 1, 2022 /
 
Hogyan működne?
(#) matheattila válasza GPeti1977 hozzászólására (») Jan 2, 2022 / 1
 
BUÉK!
Az elgondolás az volt, hogy legyen egy mikrovezérlő ami USB-n kommunikál PC-vel és mellette vezéreljen egyebeket is leszámítva a mintavételezést mert akkora frekvenciákra egyik mikrovezérlő se képes. Mivel akkoriban nem voltak ennyire gyors mikrovezérlők mint manapság és többnyire csak PIC-ekkel foglalkoztam ezért maradt a PIC32MX440 a maga 80MHz-es sebességével ami édeskevés egy jobbacska szkóphoz.
Ehhez kellett egy gyors ADC (pl 100MSps - 8bit / csatorna), egy RAM amiben el lehet tárolni a mintákat (64k x 16 bit (8 bit /csatorna) ha jól emlékszem) és valami ami képes másolgatni az adatokat ADC-ből RAM-ba és ehhez jött a CPLD (XC9536XL) ami egyszerűbb és olcsób, mint egy FPGA, mert hogy ez egy diplomadolgozat volt és szerettem volna a lehető legolcsóbban megoldani, hogy aztán majd hobbiként használjam itthon méricskélésekre.
A RAM-ra azért lett szükség, mert az USB-n nem lehet(ett) annyi adatot küldeni egyszerre mert csak FullSpeed USB-t tud a PIC ami elvileg 12Mbps ha jól tudom.

Az egész folyamat úgy nézne ki, hogy a PIC beállít mindent (a PC interfészből) pl analóg kapcsolók/multiplexerek a bemeneten, jelerősítés PGA-val ADC előtt, DAC stb, meg CPLD, ADC és RAM kontroll jelei, majd ezután elindítja a mintavételezést amit tovább a CPLD végez ameddig megtelik a RAM, ezután a PIC szépen kiolvassa az adatokat a RAM-ból és továbbítja a számítógépnek USB-n, és ahogy ez minden hasonló szkópnál így van, ez idő alatt természetesen nincs mintavételezés.

Jelenlegi fejjel és lehetőségekkel a PIC-et és a CPLD-t egy gyors ARM procira cserélném esetleg FPGA-val kisegítve és egy dedikált HighSpeed vagy SuperSpeed USB meghajtóval gyorsabb adatmozgatás miatt, persze a RAM és egy jó ADC megmaradna, mert azok nélkülözhetetlenek, de ez csak valamilyen unaloműző projekt esetén mert a befektetett fejlesztési idő és energia miatt most már nem érné meg, sokkal kevesebbe kerül megvenni egy jól kifejlesztett kész terméket.
Elnézést kérek, hogy ilyen hosszas lett, de ennél rövidebben nem tudtam megfogalmazni a teljes működési elvét
(#) bbatka válasza matheattila hozzászólására (») Jan 2, 2022 / 3
 
BUÉK!
Az XC9536-hoz az én forrásom használod? (2014 Jan22. 103old.) Itt.
Azért kérdezem , mert a forrásban találtam egy jó nagy bakit. Több mint 2 hetem ráment, mire rájöttem, hogy a probléma forrása ez lehet. A probléma az, hogy a GTS1=0-nál a CPLD lábai nem mennek 'Z' nagy impedanciás állapotba. Most javítom a forrást. Ez a hiba okozhatja akár a CPLD, akár a mikrovezérlő tönkremenetelét !!! A régi szimulációs ábrákon is látható ez, de ennek nem tulajdonítottam nagy jelentőséget, mert azt hittem, hogy a testbench fájlt írtam meg rosszul. Gondoltam ezt eddig, de nem. Addig amíg ellenállások voltam a CPLD lábain nem is volt gond. Az SRAM-ot tudta a CPLD és a mikrovezérlő egyaránt címezni. Az új áramkörömnél az ellenállásokat elhagytam és ezután rögtön jött a címzési probléma.
Én kisebb teljesítményű eszközöket használok. Vissza nézve a fórumot 2012-2014 megtalálhatóak a részletek. Szeretnék egy cikket írni belőle. Nem az után építhetőség lesz a célja a cikknek, inkább csak kedv csinálás saját fejlesztések indításához. Gondolok itt arra, hogy a PCB nyákrajzolat tervet nem fogom közzé tenni. Lesznek mikrovezérlő, CPLD források, kapcsolási rajzok, de a nyákot aki akarja tervezze meg magának. Azon vagyok hogy minél előbb közzé tehessem.
A hozzászólás módosítva: Jan 2, 2022
(#) bbatka válasza bbatka hozzászólására (») Jan 2, 2022 /
 
Igen, ahogy gyanítottam a CPLD lábai a GTS1=0-nál nem mentek 'Z' állapotba csupán 'L'-be. Ennek hatására a dsPIC nem tudta címezni az SRAM-ot. Micsoda egy alattomos hiba, mert önállóan az alkotó részek jól működtek. 2 hetem ment rá.
A mintavételezett jel nagyon zajos jelenleg. Minél nagyobb a mintavételezési frekvencia annál nagyobb a zaj. Nyilván a CPLD forrásán kell még leginkább farigcsálnom.
(#) matheattila válasza bbatka hozzászólására (») Jan 3, 2022 /
 
Szia,
Köszönöm a figyelmeztetést, de ha nem haragszol akkor nem a te forrásod használtam a CPLD-hez mert az enyémnek teljesen más a kapcsolási rajza, bár a CPLD pontos típusa ha jól emlékszem valóban a te szkópod kialakításából vettem, mert akkor az volt az egyik legelterjedtebb ár és tudás arányban.
Örvendek, hogy sikerült megtalálni egy ilyen problémát ennyi idő elteltével.
A többiek nevében is hálás vagyok, hogy egy ekkora projektet közzé akarsz tenni, ez nagylelkü dolog a részedről. Majd ha én is előveszem a szkópom és befejezem a fejlesztését akkor lehet hogy én is írok egy cikket róla, bár amennyi idő eltelt azóta nem hinném, hogy sokat segítene valakinek, mert szerintem most már nem is kapható az akkori alkatrészek nagy része és ennél sokkal jobbat lehetne most csinálni
Következő: »»   113 / 117
Bejelentkezés

Belépés

Hirdetés
XDT.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