Pic18f4550 e SPI

  • borelg
  • Autore della discussione
  • Elit Utente
  • Elit Utente
Di più
13 Anni 11 Mesi fa #1 da borelg
Pic18f4550 e SPI è stato creato da borelg
Ciao a tutti ho provato ad utilizzare il modulo SPI del pic18f4550 ma ho qualche problema... Infatti il dato che leggo è sempre 0.
Quello che ho provato a fare io è un Loopback ovvero ho collegato assieme SDI e SDO in modo tale che il pic legga i dati che spedisce.
Questo è il programma:
Code:
#define USE_OR_MASKS #include <p18f4550.h> #include "spi.h" #include <lcd.h> #include <Delay.h> #pragma config FOSC = HS #pragma config WDT = OFF #pragma config LVP = OFF #pragma config PBADEN = OFF //****************** SPI MASTER ******************************* void main(void) { unsigned char SPI_Send[21] = "MICROCHIP_SPI_MASTER"; unsigned char SPI_Recv[21]; unsigned char Inizio[21]="Inizio SPI..."; unsigned char Ricevuto='A'; // Imposto PORTC tutte uscite LATC = 0x00; TRISC = 0x00; // Imposto PORTD tutte uscite LATD = 0x00; TRISD = 0x00; // Imposto RB0=SDI come ingresso e RB1=SCK come uscita LATB = 0x00; TRISB = 0x01; DelayMs(100); // serve per stabilizzare l'alimentazione dell'lcd (l'lcd è molto lento) LCD_INIT(); // INDISPENSABILE serve ad inizializzare l'LCD DelayMs(250); // piccolo ritardo per completare l'inizializzazione (facoltativo) LCD_CLEAR(); // Cancella il display LCD_CMD(LCD_line1); LCD_PUTS(Inizio); LCD_BACKLIGHT(1); LCD_CURSOR(1,0); DelayMs(1000); LCD_CLEAR(); DelayMs(2000); CloseSPI(); // Turn off SPI modules if was previosly on //***Configure SPI MASTER module to transmit in master mode *** OpenSPI(SPI_FOSC_64,MODE_00,SMPEND ); //*** WRITE INITIAL CHARECTER *** // while(WriteSPI(0xF5)); //send initial charecter to use the same as flag at slave side and send it till successful transmision //*** WRITE THE STRING TO SPI **** // putsSPI(SPI_Send); //send the string of data to be sent to slave WriteSPI('A'); //*** Read the initial flag id **** /* if( 0xF5 == ReadSPI() ) { getsSPI(SPI_Recv,20); // read the string sent from slave SPI_Recv[20] = '\0' ; //terminate the string with a null charecter }*/ while (!DataRdySPI()); /* getsSPI(SPI_Recv,20); // read the string sent from slave SPI_Recv[20] = '\0' ; //terminate the string with a null charecter */ LCD_GOTO(1,1); LCD_PUTCH(Ricevuto); Ricevuto=ReadSPI(); LCD_GOTO(2,1); //LCD_PUTS(SPI_Recv); LCD_PUTCH(Ricevuto); /* Turn off SPI module and clear IF bit */ CloseSPI(); while(1); //End of program }

Il problema è che quello che visualizzo sull'LCD è sempre il carattere delle 2 righe verticali parallele, che corrisponde a 0.
Qualcuno ha idea del perchè non funzioni?
Grazie

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
13 Anni 11 Mesi fa #2 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Pic18f4550 e SPI
Ciao,

Non ricordo se il PIC accetta la modalita' loop, dovrei rivedere il datasheet.
Salvo eventuali errori sul programma, la ragione potrebbe essere che inviando il dato il PIC non si aspetta di ricevere i dati.
In particolare SDI viene campionato sui fronti del clock quando il PIC riceve i dati (slave).

L'interfaccia SPI e' comunque facile da testare con l'oscilloscopio.
Metti il trigger sulla linea di clock e in base alla frequenza a cui operi seleziona una base tempi opportuna.
Imposta il trigger su campionamento unico (se digitale), altrimenti invia in loop lo stesso dato, in amaniera da creare un segnale periodico da poter essere facilmente analizzato anche su un oscilloscopio analogico.

Saluti,

Mauro

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • borelg
  • Autore della discussione
  • Elit Utente
  • Elit Utente
Di più
13 Anni 11 Mesi fa #3 da borelg
Risposta da borelg al topic Re: Pic18f4550 e SPI
ah... forse può essere quello il problema nn ci avevo pensato... lo proverò appena posso usare un oscilloscopio: in laboratorio a scuola.
Visto che siamo venuti in argomento di oscilloscopi non è che ci sarebbe una soluzione abbastanza economica per procurasene uno? Avevo sentito parlare di certe schede che si interfacciavano al pc ma cercando su internet mi sembrano comunque molto costose e leggendo pareri in giro non mi sembrano molto affidabili... Avresti da consigliarmi qualcosa? :)

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Moderatore
  • Moderatore
Di più
13 Anni 11 Mesi fa #4 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Re: Pic18f4550 e SPI
Ciao,

se apri un altro Topic con la domanda ne possiamo parlare senza mischiare troppo le carte con questo topic.
L´argomento credo che sia interessante e potra´ certamente ritornare utile per altri utenti.
Avere un Topic di riferimento sara´ certamente utile.

Saluti,

Mauro

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • borelg
  • Autore della discussione
  • Elit Utente
  • Elit Utente
Di più
13 Anni 11 Mesi fa #5 da borelg
Risposta da borelg al topic Re: Pic18f4550 e SPI
ok adesso lo faccio! comunque non ho ancora provato se il problema era effettivamente quello dato che adesso stò cercando di far funzionare il bluetooth!

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro LaurentiStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Forum - Ultimi messaggi