Vai Indietro   PcTuner Forum > Sezione Hardware > Programmazione PIC
Arcade Registrazione Blogs Regolamento Feedback FAQ Lista Utenti Calendario Segna come Letti

Ultimi 5 blog pubblicati su PcTuner Blog
Data Titolo

Rispondi
 
Strumenti Discussione Modalità Visualizzazione
Vecchio 14-04-2009, 12.39.57   #1
Registered User
 

Iscritto da: 19-03-2009
Messaggi: 39
Feedback: (0)
oscilloscopio con glcd pic 16f887a

rieccomi qui.
allora pensavo di poter usare il display glcd ed un pic per creare un oscilloscopio portatile, naturalmente non predento che sia preciso al 100% pero vorri provare in modo tale anche da approfondire la programmazione dei pic.
come idea mi e' venuta questa:
Codice:
program prova_oscilloscopio
dim valore as word
dim mio as byte
dim tempo as byte
dim flag as byte
sub procedure interrupt
 if TestBit(INTCON,2)   ' qunado tmro è owerflow
 Inc(tempo)             'incrementa il flag tempo
 TMR0 = 255             'ricarica 255 in tmro
 ClearBit(INTOCN,2)     'resetta il bit 2 del reg. intcon
end if

end sub

main:
mio = 0
tempo = 0
  INTCON = $A0
  OPTION_REG = $84
  ADCON1     = $82
  TRISA      = $FF
  TMR0 = 255
  Glcd_Init(PORTB, 0, 1, 2, 3, 5, 4,PORTD)
   Glcd_Fill(0)
  while true
    valore = ADC_Read(2)
  mio = valore / 4
  Glcd_Dot(tempo, mio, 1)
  if (tempo = 127) then          ' quando tempo arriva a fine schermo
  tempo = 0                      ' ricomincia da 0 e cancella lo schermo
  Glcd_Fill(0)
  end if
  wend
  end.
naturalmente devo ancora fai i calcoli precisi per la scansione del tempo di lettua del valore e cosi via ma solo sapere se la strada intrapresa era giusta o sbagliata.
una cosa che ancora non riesco a fare è la seguente.
il display glcd parte da 0 a 64 per y, e 0-127 per x.
ora lo zero si trova in alto a sinistra.
cosi com'e' il valore della tensione (y) parte da sopra scende quando il valore aumenta.
come posso fare per avere la situazione contraria??
y=0 lato basso sinistra
drake Non in Linea   Rispondi Citando
Vecchio 14-04-2009, 13.01.34   #2
Registered User
 
L'avatar di  Camillo
 

Iscritto da: 31-01-2006
Locazione: Genova
Messaggi: 1,471
Feedback: (0)
Amico! se non riesci a fare un complemento ti stai cacciando in cose più grandi di te.
__________________
Camillo

Internet ti fa vedere tutto ma non ti fa toccare niente. (Camillo Ferrari)
Camillo Non in Linea   Rispondi Citando
Vecchio 14-04-2009, 13.12.37   #3
Registered User
 

Iscritto da: 19-03-2009
Messaggi: 39
Feedback: (0)
me lo dicono tutti che mi caccio in cose piu grosse di me ma alla fine le faccio e spero che questa volta non sia l'eccezione.
ma scusa la mia ignoranza, il complemento non serve per invertire il segno di un numero binario?
puoi spiegarmi meglio?
per il resto trovi l'idea buona o da scartare??

Ultima Modifica di drake : 14-04-2009 13.27.14.
drake Non in Linea   Rispondi Citando
Vecchio 14-04-2009, 14.14.25   #4
Registered User
 
L'avatar di  Camillo
 

Iscritto da: 31-01-2006
Locazione: Genova
Messaggi: 1,471
Feedback: (0)
Quote:
Originariamente inviato da drake Visualizza Messaggio
me lo dicono tutti che mi caccio in cose piu grosse di me ma alla fine le faccio e spero che questa volta non sia l'eccezione.
ma scusa la mia ignoranza, il complemento non serve per invertire il segno di un numero binario?
puoi spiegarmi meglio?
per il resto trovi l'idea buona o da scartare??
Hai ragione per quanto riguarda il complemento, mi sono fatto prendere la mano avrei dovuto scrivere sottrazione. Ma la mia forma mentale è tale per cui ragionando per byte il suo complemento a uno equivale alla sottrazione. Mentre tu devi sottrarre "a 63" e non "a 255". A proposito sbagli quando dici "da 0 a 64" è 63.
Per quanto riguarda l'idea; mi sembra buona per imparare, approfondire ed avere anche degli "effetti speciali" anche se non potrai salire molto con la frequenza vista la lentezza intrinseca dei PIC.
__________________
Camillo

Internet ti fa vedere tutto ma non ti fa toccare niente. (Camillo Ferrari)
Camillo Non in Linea   Rispondi Citando
Vecchio 14-04-2009, 15.26.56   #5
Registered User
 

Iscritto da: 19-03-2009
Messaggi: 39
Feedback: (0)
la mia idea infatti è soprattutto per imparare ad usare i pic. naturalmente sempre farlo con un risultato buono e soddisfacente.
secondo te fino a che frequenza posso arrivare? a me per ora basterrebbe anche avere una buona precisione fino a 1mhz
drake Non in Linea   Rispondi Citando
Vecchio 14-04-2009, 19.01.57   #6
Registered User
 
L'avatar di  Camillo
 

Iscritto da: 31-01-2006
Locazione: Genova
Messaggi: 1,471
Feedback: (0)
Illusione!?!
Pensa solo al tempo che ci vuole per la conversione analogico/digitale.
__________________
Camillo

Internet ti fa vedere tutto ma non ti fa toccare niente. (Camillo Ferrari)
Camillo Non in Linea   Rispondi Citando
Vecchio 14-04-2009, 19.22.28   #7
Registered User
 

Iscritto da: 05-01-2009
Messaggi: 827
Feedback: (0)
Mi sono fatto un paio di calcoli, solo per aspettare che l'adc converta ci vogliono 20 istruzioni del pic se va a 20mhz (anche se dipende dalla temperatura).
Quindi potresti avere il segnale giusto dopo questo tempo (circa) e andresti a 1mhz poi puoi scriverlo sul glcd aspettando la prossima conversione
steve22 Non in Linea   Rispondi Citando
Vecchio 15-04-2009, 11.22.18   #8
Registered User
 
L'avatar di  Abs_beginner
 

Iscritto da: 24-11-2006
Messaggi: 239
Feedback: (0)
Il tempo di conversione @20MHz è di 1,6uS aggiungendo qualche altra istruzione per memorizzare in un buffer e controllare l'A/D probabilmente riesci ad ottenere un periodo di campionamento di circa 3uS.
Considera che per visualizzare decentemente una forma d'onda servono almeno 10 campioni.
In ogni caso questi sono giocattoli.
Pure io ci avevo giocato tempo fa; ma con un display alfanumerico 2x16
Poor Man's Oscilloscope - MEL PICBASIC Forum
Abs_beginner Non in Linea   Rispondi Citando
Vecchio 15-04-2009, 11.46.54   #9
Registered User
 

Iscritto da: 05-01-2009
Messaggi: 827
Feedback: (0)
se guardi sul datasheet del pic di drake vedi che il tempo di conversione è 2uS+x che è una variabile in base alla temperatura.
Io ho stimato 3/4uS che (con 4uS e 20Mhz) fanno 20 cicli.
Comunque penso che un A/D a 8bit basti per fare un oscilloscopio con un pic e un piccolo lcd. Anche perchè lavorare a 10bit (dell'A/D) con un processore a 8 sarebbe alquanto scomodo
steve22 Non in Linea   Rispondi Citando
Vecchio 15-04-2009, 12.16.42   #10
Registered User
 

Iscritto da: 19-03-2009
Messaggi: 39
Feedback: (0)
ho visto il tuo oscilloscopio complimenti ,a me per ora basterebbe riuscire a visulaizzare la forma d'onda, non è che potresti postare il listato per dargli un occhiata?? naturalmente lo studierei solo

Ultima Modifica di drake : 15-04-2009 12.19.26.
drake Non in Linea   Rispondi Citando
Vecchio 15-04-2009, 13.00.15   #11
Registered User
 
L'avatar di  Abs_beginner
 

Iscritto da: 24-11-2006
Messaggi: 239
Feedback: (0)
Quote:
se guardi sul datasheet del pic di drake vedi che il tempo di conversione è 2uS+x che è una variabile in base alla temperatura.
Giusto per la precisione; ciò a cui ti riferisci è il tempo di acquisizione che va considerato nei segg. casi:
After the analog input channel is selected (or changed),an A/D acquisition must be done before the conversion can be started.

Se non si cambia canale non è necessario; ed è sufficiente considerare il tempo di conversione.

Il sorgente in pic basic è disponibile come allegato nel link suindicato.
Abs_beginner Non in Linea   Rispondi Citando
Vecchio 15-04-2009, 13.05.11   #12
Registered User
 

Iscritto da: 19-03-2009
Messaggi: 39
Feedback: (0)
ok grazie vedo subito
drake Non in Linea   Rispondi Citando
Vecchio 15-04-2009, 14.31.11   #13
Registered User
 

Iscritto da: 14-12-2008
Messaggi: 225
Feedback: (0)
A me pare che il tempo minimo di conversione sia 11xTADmin=17,6us, ossia 56,8 kHz. Seguendo i noti teoremi al massimo puoi visualizzare un segnale alla metà di questa frequenza, ossia 28,4 kHz. Questo ovviamente non tenendo conto che ci vuole un po' di tempo anche per trasferire i dati in un buffer, e ancora di più se la memoria non ti basta e devi accedere a una esterna.
toro70 Non in Linea   Rispondi Citando
Vecchio 15-04-2009, 15.53.01   #14
Registered User
 
L'avatar di  Abs_beginner
 

Iscritto da: 24-11-2006
Messaggi: 239
Feedback: (0)
A me pare che il tempo minimo di conversione sia 11xTADmin=17,6us, ossia 56,8 kHz

Hai perfettamente ragione!
E si che lo so. Bho sarà l'età.
Abs_beginner Non in Linea   Rispondi Citando
Vecchio 15-04-2009, 16.50.33   #15
Registered User
 

Iscritto da: 19-03-2009
Messaggi: 39
Feedback: (0)
ok allora la frequenza massima che potrò visualizzare sarà di 50khz, up po pochina ma per cominciare andra più che bene.
dopo aver provato il programma sul display vedo la forma d'onda ma con una scansione sul display troppo veloce.
per ovviare a questo problema avevo pensato di impostare cosi il ragionamento.
mi creo un buffer con 127 locazione( la lunghezza del display).
ogni tot. millisecondi copio il valore di tensione in questo buffer.
arrivato alla 127 locazione visualizzo il buffer sul display con un ciclo for....next.
visualizzata la forma d'onda ricomincio da capo.
in questo modo credo di riuscire a vedere l'onda anche se la visualizzazione non sarà continua .
cosa ne pensate???
ripeto il mio intento non è quello di creare un oscilloscopio vero e propio, ma imparare ed imparare.
una volta che riuscirò a visualizzare la forma dopo porto anche regolare il tempo di scansione, frequenza, naturalmente una cosa alla volta
drake Non in Linea   Rispondi Citando
Vecchio 15-04-2009, 17.32.41   #16
Registered User
 

Iscritto da: 14-12-2008
Messaggi: 225
Feedback: (0)
Non ci siamo, se campioni a 50 kHz tra i tuoi dati ci saranno segnali al massimo a 25 kHz, ma con due campioni per periodo non ti consiglio di visualizzarli. Se fai delle elaborazioni numeriche interpolando con la funzione sinc() migliori di sicuro la traccia, ma scordati di vedere niente di decente sopra i 10-15 kHz.
I trasferimenti vanno fatti alla frequenza di campionamento, ossia ogni 17,6 us.
Hai mai usato un oscilloscopio? Se si ti ricorderai che una delle regolazioni più importanti è la sincronia: in pratica devi fare in modo che ogni volta che disegni una traccia questa parta dalla stessa posizione nello schermo, altrimenti vedi solo porcherie; devi trovare il punto esatto in cui il segnale passa per un livello predeterminato e con una certa pendenza, e iniziare la visualizzazione da lì; va da se che se hai un buffer video di X punti devi salvarne molti di più, in modo che anche il segnale a frequenza minima possa avere X punti campionati dopo il trigger.
Comunque se cerchi oscilloscopio dovresti trovare il principio di funzionamento spiegato per bene.
toro70 Non in Linea   Rispondi Citando
Vecchio 15-04-2009, 18.02.21   #17
Registered User
 

Iscritto da: 19-03-2009
Messaggi: 39
Feedback: (0)
faccio un esempio di quello che intendo.
mettiamo caso di avere un onda a 50hz con dutycicle 50%.
1/50hz = 0,02 secondi = 20ms
10 ms on-----10ms off.
il buffer con il suo contenuto (tensione onda) viene incrementato ogni 2ms.
arrivato a 127 comincio a disegnare il contenuto del buffer, ad esempio ogni locazione ogni 100ms.cosi dovrei avere il disegno dell'onda con delle linee che rappresentato l'onda con linee di 5punti (10ms=2ms*5punti)
fatto questo potrei aspettare che il valore di tensione sia zero e ricominciare la memorizzazione nel buffer.
la funzione sic() ??????
drake Non in Linea   Rispondi Citando
Vecchio 16-04-2009, 10.08.24   #18
Registered User
 

Iscritto da: 14-12-2008
Messaggi: 225
Feedback: (0)
Devi comunque partire dallo stesso livello, che deve essere impostabile. A ogni campionamento (meglio a frequenza maggiore della base tempi) vedi se hai incrociato il livello di trigger, ad esempio 127, in salita; se si inizi col tuo algoritmo.
La questione del filtro si pone per lo più ad alta frequenza (vicino a Fs/2): la funzione sinc(x) è l'antitrasformata di un filtro passa basso ideale.
toro70 Non in Linea   Rispondi Citando
Vecchio 16-04-2009, 12.51.30   #19
Registered User
 

Iscritto da: 19-03-2009
Messaggi: 39
Feedback: (0)
ok, sto provando a fare come mi hai detto.
ogni volta che il buffere è pieno, prima di ricominciare a caricare valori aspetta che il livello di tensione arrivi ad un certo valore
drake Non in Linea   Rispondi Citando
Vecchio 17-04-2009, 17.42.57   #20
Registered User
 

Iscritto da: 10-11-2006
Locazione: Genova
Messaggi: 53
Feedback: (0)
LCD Oscilloscope for Spectrum Analyzers

A me è stato utilissimo per realizzare un'analizzatore panoramico IF, ovviamente è ridotto all'essenziale e penso potrai convertirlo in oscilloscopio per BF.
ndento Non in Linea   Rispondi Citando
Rispondi Per le vostre immagini su questo forum potete usare PcTunerUp!
Iscriviti gratuitamente alla nostra newsletter.


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 visitatori)
 
Strumenti Discussione
Modalità Visualizzazione

Regole di scrittura
non Puoi inserire messaggi
non Puoi rispondere ai messaggi
non Puoi inviare allegati
non Puoi modificare i tuoi messaggi

codice vB è Attivo
Smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Disattivato
Pingbacks are Disattivato
Refbacks are Disattivato
Vai al Forum


Tutti gli Orari sono GMT +2. Attualmente sono le 16.34.02.


Powered by vBulletin Versione 3.6.12
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright © 2010 - Master New Media S.r.l. a socio unico - P.I. 02947530784. Tutti i diritti di proprietà letteraria e artistica sono riservati- Privacy
www.pctuner.net è testata telematica registrata presso il Tribunale di Torino, n. 39 del 07.05.2008, Editore Master New Media S.r.l.