- Messaggi: 35
- Ringraziamenti ricevuti 2
oscilloscopio e pic
11 Anni 10 Mesi fa #1
da aduri
oscilloscopio e pic è stato creato da aduri
Salve a tutti,
nelle ferie natalizie ho costruito questo oscilloscopio portatile che ha dei limiti ma per l'uso che dovrei farne mi basterebbe e penso possa essere utile a tanti.
semifluid.com/2006/08/21/pic1...scope/#more-15
Ho usato un PIC18f4550 invece di un PIC18F2550
Ho provato a caricare col mio pickit2 il file .hex dal sito (lo davano come non testato)
semifluid.com/wp-content/uplo...bootloader.hex
e questo è il codice sorgente
semifluid.com/wp-content/uplo...o-bootloader.c
Funziona ma male....
ho inviato un segnale sinusoidale e visualizza in basso solo la parte positiva (ma questo si risolve portando i 0V a metà schermo con un partitore e condensatore), inoltre il frequenzimetro e lo zero-crossing per il trigger non vanno.
Qualcuno può, cortesemente, provarlo e compilarlo col C CSS (su cui devo ancora prendere pratica) e mandarmi l'eseguibile o renderlo fruibile a tutti qui nel forum.
Ho provato anche il sw con la libreria del GLCD modificata (cambiando il collegamento dei pins) di questo sito ma mi dà lo stesso problema (andare in download e si trovano i codici)
www.smartradio.com.br/loja-pic/?id=11
Mi sembra strano che il 4550 non possa lavorare come il 2550 avendo lo stesso core???!!!
Grazie
ciao
Antonio
nelle ferie natalizie ho costruito questo oscilloscopio portatile che ha dei limiti ma per l'uso che dovrei farne mi basterebbe e penso possa essere utile a tanti.
semifluid.com/2006/08/21/pic1...scope/#more-15
Ho usato un PIC18f4550 invece di un PIC18F2550
Ho provato a caricare col mio pickit2 il file .hex dal sito (lo davano come non testato)
semifluid.com/wp-content/uplo...bootloader.hex
e questo è il codice sorgente
semifluid.com/wp-content/uplo...o-bootloader.c
Funziona ma male....
ho inviato un segnale sinusoidale e visualizza in basso solo la parte positiva (ma questo si risolve portando i 0V a metà schermo con un partitore e condensatore), inoltre il frequenzimetro e lo zero-crossing per il trigger non vanno.
Qualcuno può, cortesemente, provarlo e compilarlo col C CSS (su cui devo ancora prendere pratica) e mandarmi l'eseguibile o renderlo fruibile a tutti qui nel forum.
Ho provato anche il sw con la libreria del GLCD modificata (cambiando il collegamento dei pins) di questo sito ma mi dà lo stesso problema (andare in download e si trovano i codici)
www.smartradio.com.br/loja-pic/?id=11
Mi sembra strano che il 4550 non possa lavorare come il 2550 avendo lo stesso core???!!!
Grazie
ciao
Antonio
Si prega Accedi o Crea un account a partecipare alla conversazione.
- aduri
- Autore della discussione
- Junior Member
Riduci
Di più
11 Anni 10 Mesi fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: oscilloscopio e pic
I due PIC sono praticamente identici se non per il numero dei pin.
Se funziona da una parte deve funzionare dall'altra.
Devi fare attenzione al montaggio del sistema.
Probabilmente il problema e' li'.
...assumendo che il programma funzioni e che gli altri passi per programmare siano fatti correttamente.
Saluti,
Mauro
Se funziona da una parte deve funzionare dall'altra.
Devi fare attenzione al montaggio del sistema.
Probabilmente il problema e' li'.
...assumendo che il programma funzioni e che gli altri passi per programmare siano fatti correttamente.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
11 Anni 10 Mesi fa #3
da aduri
Risposta da aduri al topic Re: oscilloscopio e pic
Ho controllato e ricontrollato ma niente da fare.
Ho guardato le librerie e le connessioni anche in 2 versioni differenti ma fa lo stesso difetto.
Mi sono letto il tuo libro sul PIC18 adesso proverò ad analizzare meglio il codice e spero che le mie reminescenze universitarie mi aiutino a risolvere l'arcano.
Su youtube ho visto diversi che usano questo oscilloscopio anche in versione 4550.
ciao e grazie
Antonio
Ho guardato le librerie e le connessioni anche in 2 versioni differenti ma fa lo stesso difetto.
Mi sono letto il tuo libro sul PIC18 adesso proverò ad analizzare meglio il codice e spero che le mie reminescenze universitarie mi aiutino a risolvere l'arcano.
Su youtube ho visto diversi che usano questo oscilloscopio anche in versione 4550.
ciao e grazie
Antonio
Si prega Accedi o Crea un account a partecipare alla conversazione.
- aduri
- Autore della discussione
- Junior Member
Riduci
Di più
- Messaggi: 35
- Ringraziamenti ricevuti 2
11 Anni 10 Mesi fa #4
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: oscilloscopio e pic
Purtroppo gli errori sono sempre sotto il naso, e basta poco per non far funzionare l'intero sistema.
Ti consiglio di testare il sistema per parti.
Potresti per esempio usare gli esempi di Freedom Light per accertarti che PIC, USB funzionino correttamente.
Se devi fare tanto lavoro potresti anche considerare di realizzare un mini oscilloscopio da zero!
Saluti,
Mauro
Ti consiglio di testare il sistema per parti.
Potresti per esempio usare gli esempi di Freedom Light per accertarti che PIC, USB funzionino correttamente.
Se devi fare tanto lavoro potresti anche considerare di realizzare un mini oscilloscopio da zero!
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
11 Anni 10 Mesi fa #5
da aduri
Risposta da aduri al topic Re: oscilloscopio e pic
Avevo già fatto qualcosa ma in mikrobasic e la banda passante era bassa e non era implementato il trigger.
Per pura curiosità allego il codice così se qualche volenteroso vuole proseguire l'opera:
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.
Migliorato il campionamento memorizzando prima i campioni in ram e visualizzandoli dopo.
La visualizzazione è sempre un disastro.
Ecco la modifica:
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
Ed infine avevo cercato di velocizzare la conversione AD della libreria di MKB con questa subroutine:
sub function ReadADC(dim Channel as Byte) as word
ADCON2 = %10001010 ' FOSC/32 , 2 TAD ,Right Justified
ADCON0 = Channel * 4
SetBit(ADCON0,ADON)
SetBit(ADCON0,GO)
while TestBit(ADCON0,GO) wend 'Wait for Conversion
Result = ADRESH * 256 + ADRESL '10 Bit Right Justified
ClearBit(ADCON0,ADON)
end sub
ciao
Antonio
Per pura curiosità allego il codice così se qualche volenteroso vuole proseguire l'opera:
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.
Migliorato il campionamento memorizzando prima i campioni in ram e visualizzandoli dopo.
La visualizzazione è sempre un disastro.
Ecco la modifica:
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
Ed infine avevo cercato di velocizzare la conversione AD della libreria di MKB con questa subroutine:
sub function ReadADC(dim Channel as Byte) as word
ADCON2 = %10001010 ' FOSC/32 , 2 TAD ,Right Justified
ADCON0 = Channel * 4
SetBit(ADCON0,ADON)
SetBit(ADCON0,GO)
while TestBit(ADCON0,GO) wend 'Wait for Conversion
Result = ADRESH * 256 + ADRESL '10 Bit Right Justified
ClearBit(ADCON0,ADON)
end sub
ciao
Antonio
Si prega Accedi o Crea un account a partecipare alla conversazione.
- aduri
- Autore della discussione
- Junior Member
Riduci
Di più
- Messaggi: 35
- Ringraziamenti ricevuti 2
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.