Allora vi aggiorno sulle mie varie prove-tentativi:
1) Ho verificato facendo un corto tra i pin di ricezione e trasmissione della porta seriale del pic e funziona tutto alla perfezione. A questo punto deve essere un problema di cavo o di impostazione della porta seriale su computer.
2) La mia scheda madre non ha una porta seriale integrata quindi ho comprato una scheda PCI (
http://www.moschip.com/mcs9835.php) ho installato i driver opportuni e in gestione periferiche mi viene fuori una cosa del genere:
PCI Serial PORT COM9
PCI Serial PORT COM10
Facendo alcuni tentativi vedo che sulla COM 9 qualcosa viene trasmesso.
Qui però ho 2 problemi:
1) Con TeraTerm non posso aprire una connessione su COM9 quindi provo con hyperTerminal (ma proverò anche con il software che mi avete consigliato). Apro la connesisone e digito ma non vedo nulla sullo schermo LCD del mio PIC. Allora disconnetto e con la comunicazione disconnessa digito un carattere da tastiera ed oltre ad attivarsi il canale di comunicazione mi appare un carattere distorto su LCD. A questo punto se continuo a digitare non appare più nulla. Devo ripetere il procedimento e cioè disconnettere il canale e poi digitare un carattere su tastiera. Non so se questo possa essere un problema legato a buffer o altro quindi chiedo a voi se ne sapete qualcosa.
2) Il carattere ricevuto è distorto cioè non è quello che digito ma un altro carattere ascii. Questo credo che dipenda dalle impostazione della UART (tutti i parametri delle porte seriali PIC e computer sono uguali). Con la libreria della microchip utilizzando la OpenUsart devo impostare il valore spbrg (anche se mi sembra sia solo un valore utile per le trasmissioni e io non riesco a ricevere correttamente). Sul datasheet del PIC ci sono valori per una frequenza di 8 mhz, 10 mhz, 20 mhz e 40 mhz ma io ho un 18f2520 con PLL abilitato che mi porta la velocità a 32 Mhz e non so per questo valore quanto debba essere spbrg.
Vi allego le inpostazioni su PIC:
#pragma config OSC = INTIO67 // Oscillatore interno
#pragma config MCLRE = ON // Reset Attivo
#pragma config WDT = OFF // Whatch dog disattivato
#pragma config PWRT = ON // Power UP timer abilitato
#pragma config LVP = OFF // Programmazione LVP disabilitata
#pragma config BOREN = OFF // Brown out Reset disabilitato
#pragma config DEBUG = ON // Debug ON
OSCCONbits.IRCF0 = 1; // Settiamo il clock
OSCCONbits.IRCF1 = 1; // Interno a 8Mhz
OSCCONbits.IRCF2 = 1;
OSCTUNEbits.PLLEN = 1; // Abilitiamo il PLL ora siamo a 8x4=32Mhz
OpenUSART( USART_TX_INT_OFF &
USART_RX_INT_OFF &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH,
51 );
Ho impostato il baudrate a 9600 e disabilitato i controlli di flusso.
Grazie a tutti per le risposte.
Ciao Valerio