CodeWarrior - Puerto SPI

 
Vista:

Puerto SPI

Publicado por Carlos (1 intervención) el 09/06/2008 19:21:15
Estoy usando el puerto SPI, realize una rutina sencilla para leer un ADC (Microchip) de 12 bit. Estoy utilizando el process expert. Pero no me reponde, solo me manda 0xFF a pesar que existen variaciones de voltaje. El código que muestro a continuación solo prentendo leer los 8 primeros bits y desplegarlos en un display.

/////////////////////////
for(;;){

vall0=SPI1_SendChar(255);
if(vall0==ERR_OK)
vall1=SPI1_RecvChar((byte*)myvalues);
if(vall1==ERR_RXEMPTY)
ldc_NOPASA_SetVal();
if(vall1==ERR_OVERRUN){
ldc_NOPASA_SetVal();
ldc_PASA_SetVal();
}
if(vall1==ERR_OK)
ldc_PASA_SetVal();

WaitNms(1000);

SPI_Data=myvalues[0];
LCD_DisplayString1_4bit(" SPI Valor ",FALSE);
LCD_DisplayString2_4bit(" ",FALSE);
bcd2str(SPI_Data,string,FALSE);
LCD_DisplayString2_4bit("",FALSE);
LCD_DisplayString2_4bit(string,FALSE);
WaitNms(1000);

}
///////////////////////

Nos se si alguien me pudiera prestar fragmentos de código de ejemplo de como usar el SPI por medio del process expert, y depues yo adecuarlo a mi necesidades.

Cualquier sugerencia se les agradece.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Solución para lectura de ADC a través de SPI en microchip con Processor Expert

Publicado por Alejandro (30 intervenciones) el 12/09/2023 21:50:33
Primero, asegúrate de que la configuración del hardware y del SPI en tu microcontrolador esté correctamente establecida. Luego, puedes usar el siguiente código como punto de partida para leer un ADC de 12 bits a través de SPI y mostrar los 8 bits más significativos en un display. Asegúrate de adaptarlo a tu configuración específica:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include "derivative.h"
#include "stdint.h"
 
uint8_t SPI_Transfer(uint8_t data) {
    SPI0D = data; // Coloca los datos en el registro de datos SPI
    while (!(SPI0S & SPIF_FLAG_MASK)); // Espera a que se complete la transferencia
    return SPI0D; // Lee los datos recibidos
}
 
void InitSPI(void) {
    // Configura el SPI0 para tu microcontrolador específico
    SPI0C1 = SPI_C1_SPE_MASK; // Habilita el SPI como maestro
    SPI0BR = 0x01; // Establece la velocidad de transferencia
}
 
void WaitMs(uint32_t ms) {
    // Implementa una función de espera en milisegundos
}
 
void main(void) {
    uint16_t adcValue;
    uint8_t spiData;
    char strBuffer[10];
 
    InitSPI();
 
    for (;;) {
        // Lee el ADC a través de SPI
        spiData = 0x80; // Envía un comando de lectura al ADC
        SPI_Transfer(spiData);
        adcValue = (SPI_Transfer(0) << 4) | (SPI_Transfer(0) >> 4);
 
        // Convierte el valor del ADC en una cadena de caracteres
        sprintf(strBuffer, "%u", adcValue);
 
        // Muestra el valor en el display (ajusta esto según tu configuración de display)
        // LCD_DisplayString1_4bit(" SPI Valor ", FALSE);
        // LCD_DisplayString2_4bit(" ", FALSE);
        // LCD_DisplayString2_4bit("", FALSE);
        // LCD_DisplayString2_4bit(strBuffer, FALSE);
 
        WaitMs(1000); // Espera antes de la siguiente lectura
    }
}

Asegúrate de que esta plantilla se ajuste a tu hardware y configuración específica. Añade las funciones de visualización en tu display y ajusta la velocidad de transferencia del SPI según sea necesario. Además, asegúrate de que los pines SPI estén correctamente configurados en tu microcontrolador y conectados al ADC.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar