Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

PicBasic Pro - Hardverski SPI - A/D MCP3001

[es] :: Elektronika :: Mikrokontroleri :: PicBasic Pro - Hardverski SPI - A/D MCP3001

[ Pregleda: 2715 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

PedjaZ

Član broj: 48898
Poruke: 2061



+141 Profil

icon PicBasic Pro - Hardverski SPI - A/D MCP300128.12.2013. u 10:26 - pre 124 meseci
Nigde ne mogu naci neki konkretan primer kako je odradjen SPI za ovaj A/D (10 bitni).
Ono sto sam sastavio nalazi se u sledecem ali nista ne dobijam na "DataIn = SSPBUF".
Na oscilosopu u Proteusu mi se cini da je sve OK.
Pic je PIC18F6722
Gde gresim?



Code:

    DEFINE OSC 8

'                REGISTERS AND PINOUT ( 1 = IN; 0 = OUT )
' ================================================================
              '76543210   
    TRISD   = %00000000     'mora ovo zbog nCS
    TRISC   = 0             '0 set PORTC I/O
    ADCON1  = 7             ' Set PORTA and PORTE to digital

    SSPEN VAR SSP1CON1.5    ' SSP Enable bit       5
    CKP   VAR SSP1CON1.4    ' Clock Polarity Select   4
    SMP   VAR SSP1STAT.7    ' Data input sample phase
    CKE   VAR SSP1STAT.6    '  Clock Edge Select bit
    SSPIF VAR PIR1.3        ' SPI interrupt flag


'                        VARIABLES & COSTANTS
' ================================================================
    DataIn  VAR BYTE
    DataIn2 VAR BYTE
    nCS     VAR PORTD.0 

    SSPEN   = 1         '1 enable SPI pins    1
    CKP     = 1         '0 clock idle low     0
    CKE     = 0         '0 transmit on idle to active transition
    SSPIF   = 0         '0 clear buffer full status
    SMP     = 0         '0 sample in middle of data


    'proba
    probalcd2 var byte
    probalcd2 = %01010101  
    TRISE     = %00000000



'                           PROGRAM INIT
' ================================================================

    Pause 500         ' Wait for LCD to start up
    
'    Lcdout $fe, 1  , bin probalcd2
'    Lcdout $fe, $c0, dec probalcd2


                
mainloop:
   GoSub getdata     ' initiate conversion and receive data
   
   'LCDOut $fe, 1  , bin DataIn ' display received string
   'Lcdout $fe, $c0, bin DataIn2

   Pause 300
   GoTo mainloop     ' do it forever

getdata:                                    
   nCS      = 0
   
   SSPBUF   = 0              'Send something
   SSPIF   = 0              
   WHILE SSPIF=0 : WEND  
   DataIn   = SSPBUF         'Data received
   
   SSPBUF   = 0              'Send something
   SSPIF   = 0              
   WHILE SSPIF=0 : WEND 
   DataIn2  = SSPBUF         'Data received
   
   nCS      = 1 
  
   porte=datain2
   
   Return

End



[Ovu poruku je menjao PedjaZ dana 28.12.2013. u 18:00 GMT+1]
Prikačeni fajlovi
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: PicBasic Pro - Hardverski SPI - A/D MPS300128.12.2013. u 15:55 - pre 124 meseci
Probaj sa CKP = 0

Kad završiš jednu konverziju, CS (to je valjda ovo tvoje nCS) treba da ide na visok naponski nivo (nCS = 1). Ti to nemaš posle prve konverzije.

[Ovu poruku je menjao goran_68 dana 28.12.2013. u 17:05 GMT+1]
gorankg
 
Odgovor na temu

PedjaZ

Član broj: 48898
Poruke: 2061



+141 Profil

icon Re: PicBasic Pro - Hardverski SPI - A/D MCP300128.12.2013. u 16:36 - pre 124 meseci
Mora CKP da bude 1 - inace se na osciloskopu (u proteusu) nista ne desava.
Mislio sam i ja da je tu negde problem pa sam i to probao.

MCP3001 je 10 bitni pa moram da hvatam dve konverzije
(hardverski SPI na PIC-evima je 8 bitni pa mora na ovaj nacin).
Nadam se da sam taj deo odradio kako treba.

Evo pogleda na osciloskop
Zuto - CLK
Plavo - DO
Crveno - CS

Prikačeni fajlovi
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: PicBasic Pro - Hardverski SPI - A/D MCP300128.12.2013. u 18:29 - pre 124 meseci
Probaj da radiš sa samo prvih osam bita, ostatak odbaci tako što radiš samo jednu konverziju. Ovo samo kao ideja jer zaista ne znam zašto ne radi. A i ta simulacija u Proteusu može da bude sumnjiva...
gorankg
 
Odgovor na temu

foxhunter1
KN03NL

Član broj: 234323
Poruke: 238
*.dynamic.isp.telekom.rs.



+48 Profil

icon Re: PicBasic Pro - Hardverski SPI - A/D MCP300128.12.2013. u 22:23 - pre 124 meseci
Citat:
PedjaZ:
Code:

    TRISC   = 0             '0 set PORTC I/O 


Mislim da bit 4 treba da bude 1 tj ulaz tj TRISC = %00010000

73 de YU1OL
 
Odgovor na temu

PedjaZ

Član broj: 48898
Poruke: 2061



+141 Profil

icon Re: PicBasic Pro - Hardverski SPI - A/D MCP300129.12.2013. u 06:37 - pre 124 meseci
Jaoj
Jeste
Hvala vam
 
Odgovor na temu

PedjaZ

Član broj: 48898
Poruke: 2061



+141 Profil

icon Re: PicBasic Pro - Hardverski SPI - A/D MCP300101.01.2014. u 19:18 - pre 124 meseci
Da podelim sa vama.
Ovo OK radi pa ako nekom zatreba primer da ne luta kao ja jer ga nigde nisam nasao.
Jedino sto meni treba 8 bitova sa A/D ali se lako prepravi za 10.
Trebao bi da odgovara onaj Proteusov 20.DSN iz prvog posta.

A sada da se bacim na 23LC1024 i na MMC/SD pa ako negde stanem pozvacu vas u pomoc:)


Srecna Nova.


Code:

    
    DEFINE OSC 8


'                REGISTERS AND PINOUT ( 1 = IN; 0 = OUT )
' ================================================================
              '76543210   
    TRISD   = %00000000     'mora ovo zbog nCS
    TRISC   = %00010000             '0 set PORTC I/O
    ADCON1  = 7             ' Set PORTA and PORTE to digital

    SSPEN VAR SSP1CON1.5    ' SSP Enable bit       5
    CKP   VAR SSP1CON1.4    ' Clock Polarity Select   4
    SMP   VAR SSP1STAT.7    ' Data input sample phase
    CKE   VAR SSP1STAT.6    '  Clock Edge Select bit
    SSPIF VAR PIR1.3        ' SPI interrupt flag


'                        VARIABLES & COSTANTS
' ================================================================
    DataInHigh  VAR BYTE
    DataInLow VAR BYTE
    UkupnoIn var byte
    privremeno var word
    
    nCS     VAR PORTD.0 

    SSPEN   = 1         '1 enable SPI pins    1
    CKP     = 1         '0 clock idle low     0
    CKE     = 0         '0 transmit on idle to active transition
    SSPIF   = 0         '0 clear buffer full status
    SMP     = 0         '0 sample in middle of data
       
    TRISE     = %00000000
    TRISB     = %00000000
'                           PROGRAM INIT
' ================================================================

    Pause 500         ' Wait for LCD to start up
           



         
mainloop:
   GoSub getdata     ' initiate conversion and receive data
   
   'za 255 se dobije ovo:
   'DataInHigh = 110 11111
   'DataInLow  = 11111 111
   ' od cega za DataInHigh mi trebaju desnih 5
   ' a od DataInLow levih 3 da bi imao 8 bitova   

   DataInHigh = DataInHigh<<3
   DataInLow = DataInLow>>5 'treba 3 ali mi treba 8 bitova a ne 10
    
   UkupnoIn = DataInHigh + DataInLow
   
   'lcdout $fe, 1,bin8 DataInHigh
   'LCDOUT $FE,$C0, bin8 DataInLow
   'pause 1000
   lcdout $fe, 1,"ukupno ",bin8 UkupnoIn
   LCDOUT $FE,$C0, dec UkupnoIn
   
   Pause 100
   GoTo mainloop     ' do it forever

getdata:                                    
   nCS      = 0
   
   SSPBUF   = 0              'Send something
   SSPIF   = 0              
   WHILE SSPIF=0 : WEND  
   DataInHigh   = SSPBUF         'Data received
   
   SSPBUF   = 0              'Send something
   SSPIF   = 0              
   WHILE SSPIF=0 : WEND 
   DataInLow  = SSPBUF         'Data received
   
   nCS      = 1 

   'PORTE=DataInHigh              'proba
   
   Return



   End


[Ovu poruku je menjao PedjaZ dana 01.01.2014. u 22:26 GMT+1]
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: PicBasic Pro - Hardverski SPI - A/D MCP3001

[ Pregleda: 2715 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.