aduri Inserito: 3 ottobre 2010 Segnala Inserito: 3 ottobre 2010 Salve a tutti, il mio obbiettivo è ottenere un oscilloscopio che lavori in modalità XY per fare un tracciacurve.La parte analogica con visualizzazione su oscilloscopio è terminata.Per l'oscilloscopio digitale ho utilizzato un PIC18F4550 con quarzo da 20MHz e GLCD 128x64 della Wintek mod. W12864A. Sono riuscito a farlo funzionare ma ha una banda passante ridicola. Ero partito da uno stralcio di codice trovato in rete per il 16F877A e quarzo da 4MHz ma era come si può immaginare ancora più lento. Ho provato a mandare un segnale sinusoidale ma dopo pochi Hz, anche modificando (per ora via sw) il 'Sweep rate factor' non ottenevo miglioramenti. Stavo pensando di bypassare la libreria dell'ADC facendone una dedicata per aumentare la velocità di campionamento ma non sò se basterà. Credo che occorra lavorare anche sul sincronismo e sulle variabili (word anzichè float). Qualche consiglio? Io ho messo un pò di codice funzionante spero che possa essere da stimolo per uno sviluppo in comune. Ho scelto questo pic perchè ha, da data sheet un campionamento più veloce rispetto all'877a e per l'USB per evoluzioni future. ciao e grazie per l'aiutoAntonio program oscope_4550_20mhz 'Microprocessor: 18F4550 'Xtal 20MHz no PLL 'pbaden=off 'This program is designed to make a simple oscilloscope. 'with GLCD W12864A 'Mikrobasic 7.0.2 '-------------------------------------------------------------------- symbol DDRA=TRISA symbol DDRB=TRISB symbol DDRC=TRISC symbol DDRD=TRISD symbol ControlPort=PortB symbol DataPort=PortD symbol Channel=0 dim X as integer Y, K, Sr, Offset as float Xmin, Xmax, Ymin, Ymax as float XX, YY as short GLCD_VSize as byte GLCD_HSize as byte const 'for GLCD Wintek 128x64 W12864A cs1=2 cs2=3 rs=4 rw=5 rst=7 en=6 sub procedure Initialize ADCON1=0x0E 'A0 as analog input DDRA=0x01 'ADC on A0 DDRB=0x00 DDRC=0x00 DDRD=0x00 glcd_Init(ControlPort,cs1,cs2,rs,rw,rst,en,DataPort) Glcd_Fill(0) 'Clear display end sub main: Initialize 'User defined '---------------------- GLCD_VSize=63 GLCD_HSize=127 Sr=1 'Sweep rate factor Xmin=0.0 Ymin=0.0 K=10.0 'ADC bits '---------------------- Xmax=float(GLCD_HSize)*Sr Offset=float (GLCD_VSize)/2.0 'Bottom of GLCD = 0V Ymax=pow (2.0, K)-1.0 'Top of GLCD = 5V Display: for X=integer(Xmin) to integer(Xmax) step 1 Y=float(Adc_Read(Channel))+ Offset YY=short((float (GLCD_VSize)/(Ymax-Ymin))*(Ymin-Y)) XX=short((float (GLCD_HSize)/(Xmax-Xmin))*(float(X)-Xmin)) Glcd_Dot(XX,YY,1) next X Glcd_Fill(0) Goto Display end.
aduri Inserita: 3 ottobre 2010 Autore Segnala Inserita: 3 ottobre 2010 Memorizzando prima in ram è decisamente migliorato il campionamento ma la visualizzazione è un disastro.Visualizza bene fino a 3Hz. Display: 'carico in ram for X=integer(Xmin) to integer(Xmax) step 1 Y=float(Adc_Read(Channel))+ Offset YY=short((float (GLCD_VSize)/(Ymax-Ymin))*(Ymin-Y)) YP[x]=YY XX=short((float (GLCD_HSize)/(Xmax-Xmin))*(float(X)-Xmin)) XP[x]=XX next X 'visualizzo su glcd for X=integer(Xmin) to integer(Xmax) step 1 Glcd_Dot(XP[x],YP[x],1) next X
Livio Orsini Inserita: 4 ottobre 2010 Segnala Inserita: 4 ottobre 2010 La banda è delimitata dalla frequenza di campionamento. Il teorema di Shannon detta legge. La massima frequenza riproducibile vale fc/2-e, dove fc è la frequenza di campionamento dell'AD e "e" è un valore tendente a 0.Per la riproduzione ti conviene memorizzare i dati campionati e presentarli con frequenza più bassa, oppure usare un altro dispositivo per pilotare il display.
RESNIC Inserita: 4 ottobre 2010 Segnala Inserita: 4 ottobre 2010 Buongiorno,Naturalmente come per gli oscilloscopi devi utilizzare un Trigger, ed alla presenza del Trigger si realizza il campionamento ... una volta terminato il campionamento si può visualizzare il tutto. Con questa tecnica si possono visualizzare segnali con frequenze molto maggiori di 3 Hz ... L'esempio c'è in www.avelectron.com/avoscillo_it.html.
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora