- Messaggi: 143
- Ringraziamenti ricevuti 1
ADS7835 SPI con PIC18F2550
11 Anni 2 Mesi fa #1
da Fausto
ADS7835 SPI con PIC18F2550 è stato creato da Fausto
Ciao a tutti, mi sono dedicaato a cercare di comunicare ancora una volta con la SPI del convertitore ADS7835.
da quello che posso capire, quando CS passa a 0, il convertiore passa dalla stato di sample a quello di hold. il dato mi viene fornito dal secondo clock in poi, quindo il dato che ricevo con il primo cklok dovrei buttarlo.
la ho provato tutti i casi (i 4 modi della SPI piu' i due casi del bit SMP, ma nulla: a tensione negativa mi restituisce risultati poco sensati.
Per qualsiasi suggerimento ringrazio anticipatamente.
cosa sbaglio? questo è il mio programma:
#include <p18f2550.h>
#include <delays.h>
#include <stdlib.h>
#include <spi.h>
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF
#define CS LATBbits.LATB2
#define CLK LATBbits.LATB1
/*
OSC = HS set the oscillaor at high frequency
WDT = OFF disabilito il wdt timer
LVP = OxFF disable programming LVP
PBADEN = disable analog input
*/
void main (void)
{
int i=0, VAL;
unsigned char data=0x80;
unsigned char LSB=0;
unsigned char MSB=0;
//Setting I/O
LATA=0x00;
TRISA=0xFF;
LATB=0x00;
TRISB=0x00;
//RC6 input TX
//RC7 Output RX
LATC=0x00;
TRISC=0x00;
//Slave Select è nel Pin RB2 Output
//SCK Pin RB1 Output (il pic è il master)
//SDI pin RB0 è Input
TRISBbits.TRISB2=0; //Chip Select
TRISBbits.TRISB1=0; //SCK
TRISBbits.TRISB0=1; //SDI
CS=1;
SSPSTATbits.SMP=1;
SSPSTATbits.CKE=1;
//SSPCON1
SSPCON1=0b00000010;//FOSC/64
SSPCON1bits.CKP=1;
SSPCON1bits.SSPEN=1;
//OpenSPI(SPI_FOSC_64,MODE_11,SMPMID);
//OpenSPI(SPI_FOSC_64,MODE_01,SMPEND);
while(1)
{
CLK=0;
//CLK=0;
//con 20MHz 2us
Delay10TCY();
CS=0;
CLK=1;
CLK=0;
while(WriteSPI(data));
while(!SSPSTATbits.BF);
MSB=SSPBUF;
while(WriteSPI(data));
while(!SSPSTATbits.BF);
LSB=SSPBUF;
CS=1;
Delay1KTCYx(10);
}
CloseSPI();
da quello che posso capire, quando CS passa a 0, il convertiore passa dalla stato di sample a quello di hold. il dato mi viene fornito dal secondo clock in poi, quindo il dato che ricevo con il primo cklok dovrei buttarlo.
la ho provato tutti i casi (i 4 modi della SPI piu' i due casi del bit SMP, ma nulla: a tensione negativa mi restituisce risultati poco sensati.
Per qualsiasi suggerimento ringrazio anticipatamente.
cosa sbaglio? questo è il mio programma:
#include <p18f2550.h>
#include <delays.h>
#include <stdlib.h>
#include <spi.h>
#pragma config FOSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config PBADEN = OFF
#define CS LATBbits.LATB2
#define CLK LATBbits.LATB1
/*
OSC = HS set the oscillaor at high frequency
WDT = OFF disabilito il wdt timer
LVP = OxFF disable programming LVP
PBADEN = disable analog input
*/
void main (void)
{
int i=0, VAL;
unsigned char data=0x80;
unsigned char LSB=0;
unsigned char MSB=0;
//Setting I/O
LATA=0x00;
TRISA=0xFF;
LATB=0x00;
TRISB=0x00;
//RC6 input TX
//RC7 Output RX
LATC=0x00;
TRISC=0x00;
//Slave Select è nel Pin RB2 Output
//SCK Pin RB1 Output (il pic è il master)
//SDI pin RB0 è Input
TRISBbits.TRISB2=0; //Chip Select
TRISBbits.TRISB1=0; //SCK
TRISBbits.TRISB0=1; //SDI
CS=1;
SSPSTATbits.SMP=1;
SSPSTATbits.CKE=1;
//SSPCON1
SSPCON1=0b00000010;//FOSC/64
SSPCON1bits.CKP=1;
SSPCON1bits.SSPEN=1;
//OpenSPI(SPI_FOSC_64,MODE_11,SMPMID);
//OpenSPI(SPI_FOSC_64,MODE_01,SMPEND);
while(1)
{
CLK=0;
//CLK=0;
//con 20MHz 2us
Delay10TCY();
CS=0;
CLK=1;
CLK=0;
while(WriteSPI(data));
while(!SSPSTATbits.BF);
MSB=SSPBUF;
while(WriteSPI(data));
while(!SSPSTATbits.BF);
LSB=SSPBUF;
CS=1;
Delay1KTCYx(10);
}
CloseSPI();
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Fausto
- Autore della discussione
- Premium Member
Riduci
Di più
11 Anni 2 Mesi fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic ADS7835 SPI con PIC18F2550
Ciao Fausto,
ti consiglio di fare delle misure con l´oscilloscopio.
Dalle immagini reali si risolve tutto.
Mi e´ capitato di fare il debug per un cliente e dal software si capisce sempre poco.
Con oscilloscopio e scheda tra le mani si e´ visto subito dove stava il problema.
...poi ci e´ voluto ancora del tempo per capire le impostazioni.
I diagrammi dell´oscilloscopio devono essere "uguali" a quelli del datasheet, almeno per quanto riguarda le transizioni.
Saluti,
Mauro
ti consiglio di fare delle misure con l´oscilloscopio.
Dalle immagini reali si risolve tutto.
Mi e´ capitato di fare il debug per un cliente e dal software si capisce sempre poco.
Con oscilloscopio e scheda tra le mani si e´ visto subito dove stava il problema.
...poi ci e´ voluto ancora del tempo per capire le impostazioni.
I diagrammi dell´oscilloscopio devono essere "uguali" a quelli del datasheet, almeno per quanto riguarda le transizioni.
Saluti,
Mauro
Ringraziano per il messaggio: Fausto
Si prega Accedi o Crea un account a partecipare alla conversazione.
11 Anni 2 Mesi fa #3
da Fausto
Risposta da Fausto al topic ADS7835 SPI con PIC18F2550
Grazie Mauro, lo faro' il prima possibile dato che mi manca solo questo.
Ho dubbi sulla saldatura...
Nel caso riuscissi a farlo linko in modo che possa essere utile a qualcuno.
Tschiuss
Ho dubbi sulla saldatura...
Nel caso riuscissi a farlo linko in modo che possa essere utile a qualcuno.
Tschiuss
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Fausto
- Autore della discussione
- Premium Member
Riduci
Di più
- Messaggi: 143
- Ringraziamenti ricevuti 1
11 Anni 2 Mesi fa #4
da Fausto
Risposta da Fausto al topic ADS7835 SPI con PIC18F2550
avevo commesso un errore hardware...confermo che con l'oscilloscopio è un'altra cosa... da li si capisce anche perchè sul datasheet è consigliato utilizzare una resistenza di pull-down del segnale MISO.
A presto
A presto
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Fausto
- Autore della discussione
- Premium Member
Riduci
Di più
- Messaggi: 143
- Ringraziamenti ricevuti 1
11 Anni 2 Mesi fa - 11 Anni 2 Mesi fa #5
da Fausto
Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.
Risposta da Fausto al topic ADS7835 SPI con PIC18F2550
Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Fausto
- Autore della discussione
- Premium Member
Riduci
Di più
- Messaggi: 143
- Ringraziamenti ricevuti 1
Moderatori: Mauro Laurenti, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Login
© LaurTec 2006 - 2024