MikroC PRO Para Bibliotecas PIC

mikroC PRO para bibliotecas PIC mikroC PRO para PIC proporciona un conjunto de bibliotecas que simplifican la inicializa

Views 153 Downloads 12 File size 7MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

mikroC PRO para bibliotecas PIC mikroC PRO para PIC proporciona un conjunto de bibliotecas que simplifican la inicialización y el uso de MCU compatibles con PIC y sus módulos: Utilice el administrador de bibliotecas para incluir mikroC PRO para bibliotecas PIC en su proyecto.

Bibliotecas de hardware                                         

Biblioteca ADC Biblioteca CAN Biblioteca CANSPI Biblioteca Compact Flash Biblioteca EEPROM Epson S1D13700 Graphic Lcd Library Biblioteca Ethernet PIC18FxxJ60 Biblioteca de memoria flash Biblioteca Lcd Gráfica Biblioteca I²C Biblioteca de teclado Biblioteca lcd Biblioteca de códigos de Manchester Biblioteca del administrador de memoria Biblioteca de tarjetas multimedia Biblioteca OneWire Pin Periférico Select Biblioteca de Puerto Expander Biblioteca PS / 2 Biblioteca de PWM Biblioteca RS-485 Software I²C Library Software SPI Library Software UART Library Biblioteca de sonidos Biblioteca SPI Biblioteca extraíble SPI Biblioteca Ethernet SPI Biblioteca SPI Ethernet ENC24J600 SPI Graphic Lcd Library Biblioteca SPI Lcd Biblioteca SPI Lcd8 SPI T6963C Graphic Lcd Library T6963C Graphic Lcd Library TFT Display Library Biblioteca TFT de 16 bits Biblioteca de panel táctil Touch Panel TFT Library Biblioteca UART Biblioteca extraíble UART Biblioteca USB

Bibliotecas ANSI C estándar    

Biblioteca Biblioteca Biblioteca Biblioteca

ANSI C Ctype de matemáticas ANSI C ANSI C Stdlib de cadenas ANSI C

Bibliotecas misceláneas   

Biblioteca de botones Biblioteca de conversiones Biblioteca de PrintOut

   

Biblioteca Biblioteca Biblioteca Biblioteca

de Setjmp Sprint de tiempo de trigonometría

Rutinas incorporadas El compilador mikroC PRO for PIC proporciona un conjunto de funciones útiles de utilidad incorporadas. El Lo, Hi, Higher, Highestrutinas se implementan como macros. Si desea usar estas funciones, debe incluir el built_in.harchivo de encabezado (ubicado en la includecarpeta del compilador) en su proyecto. Las rutinas Delay_usy Delay_msse implementan como "en línea"; es decir, el código se genera en lugar de una llamada, por lo que la llamada no cuenta para el límite de llamadas anidadas . El Vdelay_ms, Vdelay_advanced_ms, Delay_Cyc, Get_Fosc_kHzy Get_Fosc_Per_Cycso n reales rutinas C. Sus fuentes se pueden encontrar en el Delays.carchivo ubicado en la usescarpeta del compilador.               

Lo Hola Mayor Más alto LoWord HiWord Retraso_us Delay_ms Vdelay_ms Vdelay_Advanced_ms Delay_Cyc Clock_kHz Reloj_MHz Get_Fosc_kHz Intercambiar

Rutinas incorporadas El compilador mikroC PRO for PIC proporciona un conjunto de funciones útiles de utilidad incorporadas. El Lo, Hi, Higher, Highestrutinas se implementan como macros. Si desea usar estas funciones, debe incluir el built_in.harchivo de encabezado (ubicado en la includecarpeta del compilador) en su proyecto. Las rutinas Delay_usy Delay_msse implementan como "en línea"; es decir, el código se genera en lugar de una llamada, por lo que la llamada no cuenta para el límite de llamadas anidadas . El Vdelay_ms, Vdelay_advanced_ms, Delay_Cyc, Get_Fosc_kHzy Get_Fosc_Per_Cycso n reales rutinas C. Sus fuentes se pueden encontrar en el Delays.carchivo ubicado en la usescarpeta del compilador.  Lo  Hola  Mayor  Más alto  LoWord  HiWord  Retraso_us  Delay_ms  Vdelay_ms

     

Vdelay_Advanced_ms Delay_Cyc Clock_kHz Reloj_MHz Get_Fosc_kHz Intercambiar

Lo Prototipo

#define Lo (param) ((char *) & param) [0]

Devoluciones

Los 8 bits más bajos (byte) de param, bits 7..0.

Descripción

La función devuelve el byte más bajo de param. La función no interpreta patrones de bits de param, simplemente devuelve 8 bits como se encuentran en el registro. Esta es una rutina "en línea"; El código se genera en el lugar de la llamada, por lo que la llamada no cuenta para el límite de llamadas anidadas .

Requiere

Ninguna.

Ejemplo

d = 0x12345678; tmp = Lo (d); // es igual a 0x78 Lo (d) = 0xAA; // d es igual a 0x123456AA

Hola Prototipo

#define Hi (param) ((char *) & param) [1]

Devoluciones

Devuelve junto al byte más bajo de param, bits 8..15.

Descripción

La función regresa al lado del byte más bajo de param. La función no interpreta patrones de bits de param, simplemente devuelve 8 bits como se encuentran en el registro. Esta es una rutina "en línea"; El código se genera en el lugar de la llamada, por lo que la llamada no cuenta para el límite de llamadas anidadas .

Requiere

Ninguna.

Ejemplo

d = 0x12345678; tmp = Hola (d);

// es igual a 0x56

Hola (d) = 0xAA; // d es igual a 0x1234AA78

Mayor Prototipo

#define Higher (param) ((char *) & param) [2]

Devoluciones

Regresa al lado del byte más alto de los parambits 16..23.

Descripción

La función regresa al lado del byte más alto de param. La función no interpreta patrones de bits de param, simplemente devuelve 8 bits como se encuentran en el registro. Esta es una rutina "en línea"; El código se genera en el lugar de la llamada, por lo que la llamada no cuenta para el límite de llamadas anidadas .

Requiere

Ninguna.

Ejemplo

d = 0x12345678; tmp = Superior (d);

// es igual a 0x34

Superior (d) = 0xAA; // d es igual a 0x12AA5678

Más alto Prototipo

#define Highest (param) ((char *) & param) [3]

Devoluciones

Devuelve el byte más alto de param, bits 24..31.

Descripción

La función devuelve el byte más alto de param. La función no interpreta patrones de bits de param, simplemente devuelve 8 bits como se encuentran en el registro. Esta es una rutina "en línea"; El código se genera en el lugar de la llamada, por lo que la llamada no cuenta para el límite de llamadas anidadas .

Requiere

Ninguna.

Ejemplo

d = 0x12345678; tmp = Más alto (d);

// es igual a 0x12

Más alto (d) = 0xAA; // d es igual a 0xAA345678

LoWord Prototipo

unsigned int LoWord ( unsigned long number);

Descripción

La función devuelve baja palabra de number. La función no interpreta patrones de bits de number, simplemente devuelve 16 bits como se encuentran en el registro. Esta es una rutina "en línea"; El código se genera en el lugar de la llamada, por lo que la llamada no cuenta para el límite de llamadas anidadas .

Parámetros



number: número de entrada

Devoluciones

Baja palabra de number, bits 15..0.

Requiere

Nada.

Ejemplo

d = 0x12345678; tmp = LoWord (d);

// es igual a 0x5678

LoWord (d) = 0xAAAA; // d es igual a 0x1234AAAA

Notas

Ninguna.

HiWord Prototipo

unsigned int HiWord ( unsigned long number);

Descripción

La función devuelve alta palabra de number. La función no interpreta patrones de bits de number, simplemente devuelve 16 bits como se encuentran en el registro. Esta es una rutina "en línea"; El código se genera en el lugar de la llamada, por lo que la llamada no cuenta para el límite de llamadas anidadas .

Parámetros



number: número de entrada

Devoluciones

Palabra alta de number, bits 31..16.

Requiere

Nada.

Ejemplo

d = 0x12345678; tmp = HiWord (d);

// es igual a 0x1234

HiWord (d) = 0xAAAA; // d es igual a 0xAAAA5678

Notas

Ninguna.

Retraso_us Prototipo

void Delay_us ( const unsigned long time_in_us);

Devoluciones

Nada.

Descripción

Crea un retraso de software en la duración de time_in_usmicrosegundos (una constante). El rango de constantes aplicables depende de la frecuencia del oscilador. Esta es una rutina "en línea"; El código se genera en el lugar de la llamada, por lo que la llamada no cuenta para el límite de llamadas anidadas . Esta rutina genera bucles anidados utilizando registros R13, R12, R11y R10. El número de registros utilizados varía de 0 a 4, según lo solicitado time_in_us.

Requiere

Nada.

Ejemplo

Delay_us (1000);

Delay_ms

/ * Una pausa de milisegundos * /

Prototipo

void Delay_ms ( const unsigned long time_in_ms);

Devoluciones

Nada.

Descripción

Crea un retraso de software en la duración de time_in_msmilisegundos (una constante). El rango de constantes aplicables depende de la frecuencia del oscilador. Esta es una rutina "en línea"; El código se genera en el lugar de la llamada, por lo que la llamada no cuenta para el límite de llamadas anidadas . Esta rutina genera bucles anidados utilizando registros R13, R12, R11y R10. El número de registros utilizados varía de 0 a 4, según lo solicitado time_in_ms.

Requiere

Nada.

Ejemplo

Delay_ms (1000);

/ * Una pausa de un segundo * /

Vdelay_ms Prototipo

void Vdelay_ms ( unsigned time_in_ms);

Devoluciones

Nada.

Descripción

Crea un retraso de software en la duración de time_in_msmilisegundos (una variable). El retraso generado no es tan preciso como el retraso creado por Delay_ms . Tenga en cuenta que Vdelay_mses una función de biblioteca en lugar de una rutina incorporada; Se presenta en este tema por conveniencia.

Requiere

Nada.

Ejemplo

pausa = 1000; // ... Vdelay_ms (pausa);

// ~ una segunda pausa

VDelay_Advanced_ms Prototipo

void VDelay_Advanced_ms (tiempo sin firmar_in_ms, Current_Fosc_kHz sin firmar );

Devoluciones

Nada.

Descripción

Crea un retraso de software en la duración de time_in_msmilisegundos (una variable), para una frecuencia de oscilador determinada. El retraso generado no es tan preciso como el retraso creado por Delay_ms . Tenga en cuenta que Vdelay_mses una función de biblioteca en lugar de una rutina incorporada; Se presenta en este tema por conveniencia.

Requiere

Nada.

Ejemplo

pausa = 1000; fosc = 10000; VDelay_Advanced_ms (pausa, fosc); // Genera aproximadamente una pausa de un segundo, para una frecuencia de oscilador de 10 MHz

Delay_Cyc Prototipo

void Delay_Cyc ( char Cycles_div_by_10);

Devoluciones

Nada.

Descripción

Crea un retraso basado en el reloj MCU. La demora dura 10 veces el parámetro de entrada en ciclos MCU. Tenga en cuenta que Delay_Cyces una función de biblioteca en lugar de una rutina incorporada; Se presenta en este tema por conveniencia. Hay limitaciones para el valor de Cycles_div_by_10. El valor Cycles_div_by_10 debe estar entre 3 y 255.

Requiere

Nada.

Ejemplo

Delay_Cyc (10);

/ * Cien ciclos de MCU en pausa * /

Clock_kHz Prototipo

Clock_kHz sin firmar ( nulo );

Devoluciones

Reloj del dispositivo en kHz, redondeado al entero más cercano.

Descripción

La función devuelve el reloj del dispositivo en kHz, redondeado al entero más cercano. Esta es una rutina "en línea"; El código se genera en el lugar de la llamada, por lo que la llamada no cuenta para el límite de llamadas anidadas .

Requiere

Nada.

Ejemplo

clk = Clock_kHz ();

Reloj_MHz Prototipo

corto sin firmar Clock_MHz ( void );

Devoluciones

Reloj del dispositivo en MHz, redondeado al entero más cercano.

Descripción

La función devuelve el reloj del dispositivo en MHz, redondeado al entero más cercano.

Esta es una rutina "en línea"; El código se genera en el lugar de la llamada, por lo que la llamada no cuenta para el límite de llamadas anidadas . Requiere

Nada.

Ejemplo

clk = Clock_MHz ();

Get_Fosc_kHz Prototipo

Get_Fosc_kHz largo sin firmar ( void );

Devoluciones

Reloj del dispositivo en kHz, redondeado al entero más cercano.

Descripción

La función devuelve el reloj del dispositivo en kHz, redondeado al entero más cercano. Tenga en cuenta que Get_Fosc_kHzes una función de biblioteca en lugar de una rutina incorporada; Se presenta en este tema por conveniencia.

Requiere

Nada.

Ejemplo

clk = Get_Fosc_kHz ();

Intercambiar Prototipo

permuta de char ( entrada de char );

Devoluciones

Intercambiar nibbles del byte de entrada.

Descripción

Función swaps nibbles del inputparámetro. Esta es una rutina "en línea"; El código se genera en el lugar de la llamada, por lo que la llamada no cuenta para el límite de llamadas anidadas .

Requiere

Nada.

Ejemplo

Char de entrada, swapped_input; entrada = 0xAF; swapped_input = swap (entrada); // la rutina devolverá 0xFA, es decir, intercambiar nibbles del parámetro de entrada

Biblioteca ADC El módulo ADC (Convertidor analógico a digital) está disponible con varios módulos PIC MCU. ADC es un circuito electrónico que convierte señales continuas en números digitales discretos. ADC Library le proporciona un trabajo cómodo con el módulo.

Rutinas de la biblioteca  

ADC_Init ADC_Get_Sample



ADC_Leer

ADC_Init Prototipo

void ADC_Init ();

Devoluciones

Nada.

Descripción

Esta rutina inicializa el módulo ADC interno de PIC para que funcione con el reloj RC. El reloj determina el período de tiempo necesario para realizar la conversión de AD (mínimo 12TAD).

Requiere Ejemplo



MCU con módulo ADC incorporado .

ADC_Init (); // Inicializar el módulo ADC con la configuración predeterminada

ADC_Get_Sample Prototipo

unsigned ADC_Get_Sample ( canal corto sin firmar );

Devoluciones

Se leyó un valor sin signo de 10 o 12 bits del canal especificado (depende de MCU).

Descripción

La función adquiere valor analógico del canal especificado. El parámetro channelrepresenta el canal desde el cual se va a adquirir el valor analógico. Consulte la hoja de datos correspondiente para la asignación de canal a pin. Nota: esta función no funciona con la fuente de referencia de tensión externa, solo con la referencia de tensión interna.

Requiere

  

Ejemplo

La MCU con módulo ADC incorporado . Antes de utilizar esta rutina, se debe inicializar el módulo ADC. Ver ADC_Init . Antes de usar la función, asegúrese de configurar los bits TRISx apropiados para designar pines como entradas.

sin signo adc_value; ... adc_value = ADC_Get_Sample (2); // leer el valor analógico del canal 2 del módulo ADC

ADC_Leer Prototipo

ADC_Read sin firmar ( canal corto sin firmar );

Devoluciones

Se leyó un valor sin signo de 10 o 12 bits del canal especificado (depende de MCU).

Descripción

Inicializa el módulo ADC interno de PIC para que funcione con el reloj RC. El reloj determina el período de tiempo

necesario para realizar la conversión de AD (mínimo 12TAD). El parámetro channelrepresenta el canal desde el cual se va a adquirir el valor analógico. Consulte la hoja de datos correspondiente para la asignación de canal a pin. Nota: esta función no funciona con la fuente de referencia de tensión externa, solo con la referencia de tensión interna. Requiere

Ejemplo

 

La MCU con módulo ADC incorporado . Antes de usar la función, asegúrese de configurar los bits TRISx apropiados para designar pines como entradas.

sin firma tmp; ... tmp = ADC_Read (2); canal 2

// Leer valor analógico del

Ejemplo de biblioteca Este código de ejemplo lee el valor analógico del canal 2 y lo muestra en PORTB y PORTC. Copiar código al portapapeles

unsigned int temp_res; void main () { ANSEL = 0x04; ANSELH = 0; digital C1ON_bit = 0; C2ON_bit = 0; TRISA = 0xFF; TRISC = 0; TRISB = 0; hacer { temp_res = ADC_Read (2); conversión AD AD PORTB = temp_res; PORTC = temp_res >> 8; RC0 } while (1); }

Conexión HW

// Configurar el pin AN2 como analógico // Configurar otros pines AN como E / S // Desactivar comparadores // PORTA es la entrada // PORTC es salida // PORTB es la salida // Obtener resultados de 10 bits de la // Enviar 8 bits más bajos a PORTB // Enviar 2 bits más significativos a RC1,

Conexión ADC HW

Biblioteca CAN El mikroC PRO para PIC proporciona una biblioteca (controlador) para trabajar con el módulo CAN . El CAN es un protocolo muy robusto que tiene detección y señalización de errores, autocomprobación y confinamiento de fallas. Los datos CAN y los marcos remotos defectuosos se retransmiten automáticamente, de forma similar a Ethernet. Las tasas de transferencia de datos dependen de la distancia. Por ejemplo, 1 Mbit / s se puede lograr en longitudes de red inferiores a 40 m, mientras que 250 Kbit / s se puede lograr en longitudes de red inferiores a 250 m. A mayor distancia, mayor tasa de bits máxima que se puede alcanzar. La tasa de bits más baja definida por el estándar es de 200 Kbit / s. Los cables utilizados son pares trenzados blindados. CAN soporta dos formatos de mensaje:  Formato estándar, con 11 bits identificadores, y  Formato extendido, con 29 bits identificadores. Importante: 

Consulte la norma CAN sobre la resistencia de terminación del bus CAN .

Rutinas de la biblioteca         

CANSetOperationMode CANGetOperationMode CANInicializar CANSetBaudRate CANSetMask CANSetFilter Puedo leer Puede escribir CANSetTxIdleLevel

CANSetOperationMode Prototipo

void CANSetOperationMode ( modo corto sin firmar , breve wait_flag sin firmar);

Devoluciones

Nada.

Descripción

Establece CAN en el modo solicitado, es decir, copias modeen CANSTAT. El parámetro modedebe ser una de las CAN_OP_MODEconstantes (ver constantes CAN). El parámetro wait_flagdebe ser 0 o 0xFF:  Si se establece en 0xFF, esta es una llamada de bloqueo; la función no "regresará" hasta que se establezca el modo solicitado.  Si es 0, esta es una llamada sin bloqueo. No verifica si el módulo CAN está en el modo solicitado o no. La persona que llama debe usar CANGetOperationModepara verificar el modo de operación correcto antes de realizar la operación específica del modo.

Requiere

El microcontrolador debe estar conectado al transceptor CAN (MCP2551 o similar) que está conectado al bus CAN .

Ejemplo

CANSetOperationMode (_CAN_MODE_CONFIG, 0xFF);

CANGetOperationMode Prototipo

CANGetOperationMode () corto sin firmar ;

Devoluciones

Opmode actual.

Descripción

La función devuelve el modo operativo actual del módulo CAN .

Requiere

El microcontrolador debe estar conectado al transceptor CAN (MCP2551 o similar) que está conectado al bus CAN .

Ejemplo

if (CANGetOperationMode () == _CAN_MODE_NORMAL) {...};

CANInicializar Prototip o

anular CANInitialize ( Char SJW, Char BRP, Char PHSEG1, CharPHSEG2, Char PR OPSEG, Char CAN_CONFIG_FLAGS);

Devoluci ones

Nada.

Descripc ión

Inicializa CAN . Todas las transmisiones pendientes son abortadas. Establece todos los registros de máscara en 0 para permitir todos los mensajes.

Los registros de filtro se establecen de acuerdo con el valor del indicador: if (CAN_CONFIG_FLAGS & _CAN_CONFIG_VALID_XTD_MSG! = 0) // Establezca todos los filtros en XTD_MSG else if (config & _CAN_CONFIG_VALID_STD_MSG! = 0) // Establezca todos los filtros en STD_MSG else // Establezca la mitad de los filtros en el centro de Europa. Parámetros:  SJW como se define en la hoja de datos (1–4)  BRP como se define en la hoja de datos (1–64)  PHSEG1 como se define en la hoja de datos (1–8)  PHSEG2 como se define en la hoja de datos (1–8)  PROPSEG como se define en la hoja de datos (1–8)  CAN_CONFIG_FLAGSse forma a partir de constantes predefinidas (ver constantes CAN ) Requier e

CAN debe estar en modo Config; De lo contrario, la función será ignorada. El microcontrolador debe estar conectado al transceptor CAN (MCP2551 o similar) que está conectado al bus CAN .

Ejemplo

init = _CAN_CONFIG_SAMPLE_THRICE & _CAN_CONFIG_PHSEG2_PRG_ON & _CAN_CONFIG_STD_MSG & _CAN_CONFIG_DBL_BUFFER_ON & _CAN_CONFIG_VALID_XTD_MSG & _CAN_CONFIG_LINE_FILTER_OFF; ... CANInitialize (1, 1, 3, 3, 1, init);

// inicializar CAN

CANSetBaudRate Prototip o

void CANSetBaudRate ( char SJW, char BRP, char PHSEG1, char PHSEG2, char P ROPSEG, char CAN_CONFIG_FLAGS);

Devoluc iones

Nada.

Descripc ión

Ajusta la velocidad de transmisión de CAN . Debido a la complejidad del protocolo CAN , no puede forzar simplemente un valor de bps. En su lugar, use esta función cuando CAN esté en modo Config. Consulte la hoja de datos para más detalles. Parámetros:  SJW como se define en la hoja de datos (1–4)  BRP como se define en la hoja de datos (1–64)  PHSEG1 como se define en la hoja de datos (1–8)  PHSEG2 como se define en la hoja de datos (1–8)  PROPSEG como se define en la hoja de datos (1–8)  CAN_CONFIG_FLAGSse forma a partir de constantes predefinidas (ver constantes CAN )

Requier e

CAN debe estar en modo Config; De lo contrario, la función será ignorada. El microcontrolador debe estar conectado al transceptor CAN (MCP2551 o similar) que está conectado al bus CAN .

Ejemplo

init = _CAN_CONFIG_SAMPLE_THRICE & _CAN_CONFIG_PHSEG2_PRG_ON & _CAN_CONFIG_STD_MSG & _CAN_CONFIG_DBL_BUFFER_ON & _CAN_CONFIG_VALID_XTD_MSG & _CAN_CONFIG_LINE_FILTER_OFF; ... CANSetBaudRate (1, 1, 3, 3, 1, init);

CANSetMask Prototipo

void CANSetMask ( char CAN_MASK, valor largo , char CAN_CONFIG_FLA GS);

Devolucione s

Nada.

Descripción

La máscara de conjuntos de funciones para el filtrado avanzado de mensajes. Dado valuees un bit ajustado a los registros de máscara de búfer apropiados. Parámetros:  CAN_MASKes uno de los valores constantes predefinidos (ver constantes CAN )  value es el valor de registro de la máscara  CAN_CONFIG_FLAGSselecciona el tipo de mensaje para filtrar, ya sea _CAN_CONFIG_XTD_MSGo_CAN_CONFIG_STD_MSG

Requiere

CAN debe estar en modo Config; De lo contrario, la función será ignorada. El microcontrolador debe estar conectado al transceptor CAN (MCP2551 o similar) que está conectado al bus CAN .

Ejemplo

// Establecer todos los bits de máscara en 1, es decir, todos los bits filtrados son relevantes: CANSetMask (_CAN_MASK_B1, -1, _CAN_CONFIG_XTD_MSG); // Tenga en cuenta que -1 es una forma más barata de escribir 0xFFFFFFFF. Complemento hará el truco y lo llenará con unos.

CANSetFilter Prototipo

void CANSetFilter ( char CAN_FILTER, valor largo , charCAN_CONFIG_FLA GS);

Devolucione s

Nada.

Descripción

Función fija el filtro de mensajes. Dado valuees un bit ajustado a los registros de máscara de búfer apropiados. Parámetros:  CAN_FILTERes uno de los valores constantes predefinidos (ver constantes CAN )  value es el valor de registro del filtro  CAN_CONFIG_FLAGSselecciona el tipo de mensaje para filtrar, ya sea _CAN_CONFIG_XTD_MSGo_CAN_CONFIG_STD_MSG

Requiere

CAN debe estar en modo Config; De lo contrario, la función será ignorada. El microcontrolador debe estar conectado al transceptor CAN (MCP2551 o similar) que está conectado al bus CAN .

Ejemplo

// Establezca la identificación del filtro B1_F1 en 3: CANSetFilter (_CAN_FILTER_B1_F1, 3, _CAN_CONFIG_XTD_MSG);

Puedo leer Prototipo

char CANRead ( long * id, char * data, char * datalen, char * CAN_RX_MSG_FLAGS);

Devoluciones

Mensaje del búfer de recepción o cero si no se encuentra ningún mensaje.

Descripción

La función lee el mensaje del búfer de recepción. Si se encuentra al menos un búfer de recepción completo, se extrae y se devuelve. Si no se encuentra ninguno, la función devuelve cero. Parámetros:  id es identificador de mensaje  data Es una matriz de bytes de hasta 8 bytes de longitud.  datalen es la longitud de los datos, de 1 a 8.  CAN_RX_MSG_FLAGSes el valor formado a partir de constantes (ver constantes CAN )

Requiere

CAN debe estar en modo en el que la recepción sea posible. El microcontrolador debe estar conectado al transceptor CAN (MCP2551 o similar) que está conectado al bus CAN .

Ejemplo

char rcv, rx, len, data [8]; ID larga // ...

rx = 0; // ... rcv = CANRead (id, data, len, rx);

Puede escribir Prototipo

unsigned short CanWrite ( largo Identificación, carbón de leña de datos *, carbón de leña datalen, carbón de leña CAN_TX_MSG_FLAGS);

Devoluciones

Devuelve cero si el mensaje no se puede poner en cola (búfer lleno).

Descripción

Si se encuentra al menos un búfer de transmisión vacío, la función envía un mensaje en la cola para su transmisión. Si el búfer está lleno, la función devuelve 0. Parámetros:  ides el identificador de mensaje CAN. Solo se pueden usar 11 o 29 bits según el tipo de mensaje (estándar o extendido)  data Es una matriz de bytes de hasta 8 bytes de longitud.  datalen es la longitud de los datos de 1 a 8  CAN_TX_MSG_FLAGSes el valor formado a partir de constantes (ver constantes CAN )

Requiere

CAN debe estar en modo normal. El microcontrolador debe estar conectado al transceptor CAN (MCP2551 o similar) que está conectado al bus CAN .

Ejemplo

char tx, datos; ID larga // ... tx = _CAN_TX_PRIORITY_0 & _CAN_TX_XTD_FRAME; // ... CANWrite (id, data, 2, tx);

CANSetTxIdleLevel Prototipo

void CANSetTxIdleLevel ( char driveHighState);

Devoluciones

Nada.

Descripción

Esta función establece el estado del pin CANTX cuando es recesivo. Parámetros:  driveHighState:Estado del pin CANTX. Valores válidos: Descripción

Biblioteca predefinida const

El pin CANTX conducirá VDD cuando sea recesivo. Úselo cuando use un bus diferencial para evitar la interferencia de señal en CANTX de otros pines cercanos.

_CAN_DRIVE_HIGH_STATE_ENABLE

El pin CANTX será de tres estados cuando sea recesivo.

_CAN_DRIVE_HIGH_STATE_DISABLE

 Requiere

El microcontrolador debe estar conectado al transceptor CAN (MCP2551 o similar) que está conectado al bus CAN .

Ejemplo

CANSetTxIdleLevel (_CAN_DRIVE_HIGH_STATE_ENABLE);

Constantes CAN Hay una serie de constantes predefinidas en la biblioteca CAN . Para poder utilizar la biblioteca de manera efectiva, debe estar familiarizado con estos. Es posible que desee comprobar el ejemplo al final del capítulo.

CAN_OP_MODE CAN_OP_MODElas constantes definen el modo de operación CAN . La función CANSetOperationModeespera uno de estos como su argumento: const char _CAN_MODE_BITS = 0xE0, // Use esto para acceder a los bits de modo operativo _CAN_MODE_NORMAL = 0x00, _CAN_MODE_SLEEP = 0x20, _CAN_MODE_LOOP = 0x40, _CAN_MODE_LISTEN = 0x60, _CAN_MODE_CONFIG = 0x80;

CAN_CONFIG_FLAGS CAN_CONFIG_FLAGSlas constantes definen banderas relacionadas con la configuración del módulo CAN . Funciona CANInitializey CANSetBaudRateespera uno de estos (o

una combinación bit a bit) como su argumento: const char _CAN_CONFIG_DEFAULT = 0xFF, // 11111111 _CAN_CONFIG_PHSEG2_PRG_BIT = 0x01,

_CAN_CONFIG_PHSEG2_PRG_ON = 0xFF, _CAN_CONFIG_PHSEG2_PRG_OFF = 0xFE, _CAN_CONFIG_LINE_FILTER_BIT = 0x02, _CAN_CONFIG_LINE_FILTER_ON = 0xFF, _CAN_CONFIG_LINE_FILTER_OFF = 0xFD, _CAN_CONFIG_SAMPLE_BIT = 0x04, _CAN_CONFIG_SAMPLE_ONCE = 0xFF, _CAN_CONFIG_SAMPLE_THRICE = 0xFB,

// XXXXXXX1 // XXXXXXX0 // XXXXXX1X // XXXXXX0X // XXXXX1XX // XXXXX0XX

_CAN_CONFIG_MSG_TYPE_BIT = 0x08, _CAN_CONFIG_STD_MSG = 0xFF, // XXXX1XXX _CAN_CONFIG_XTD_MSG = 0xF7, // XXXX0XXX _CAN_CONFIG_DBL_BUFFER_BIT = 0x10, _CAN_CONFIG_DBL_BUFFER_ON = 0xFF, _CAN_CONFIG_DBL_BUFFER_OFF = 0xEF,

// XXX1XXXX // XXX0XXXX

_CAN_CONFIG_MSG_BITS = 0x60, _CAN_CONFIG_ALL_MSG = 0xFF, // X11XXXXX _CAN_CONFIG_VALID_XTD_MSG = 0xDF, // X10XXXXX _CAN_CONFIG_VALID_STD_MSG = 0xBF, // X01XXXXX _CAN_CONFIG_ALL_VALID_MSG = 0x9F; // X00XXXXX Puede usar AND ( &) a nivel de bit para formar un byte de configuración de estos

valores. Por ejemplo: Copiar código al portapapeles

init = _CAN_CONFIG_SAMPLE_THRICE & _CAN_CONFIG_PHSEG2_PRG_ON & _CAN_CONFIG_STD_MSG & _CAN_CONFIG_DBL_BUFFER_ON & _CAN_CONFIG_VALID_XTD_MSG & _CAN_CONFIG_LINE_FILTER_OFF; ... CANInitialize (1, 1, 3, 3, 1, init);

// inicializar CAN

CAN_TX_MSG_FLAGS CAN_TX_MSG_FLAGSLas banderas están relacionadas con la transmisión de

un mensaje CAN : const char _CAN_TX_PRIORITY_BITS = 0x03, _CAN_TX_PRIORITY_0 = 0xFC, _CAN_TX_PRIORITY_1 = 0xFD, _CAN_TX_PRIORITY_2 = 0xFE, _CAN_TX_PRIORITY_3 = 0xFF, _CAN_TX_FRAME_BIT = 0x08, _CAN_TX_STD_FRAME = 0xFF, _CAN_TX_XTD_FRAME = 0xF7,

// // // //

XXXXXX00 XXXXXX01 XXXXXX10 XXXXXX11

// XXXXX1XX // XXXXX0XX

_CAN_TX_RTR_BIT = 0x40, _CAN_TX_NO_RTR_FRAME = 0xFF, // X1XXXXXX _CAN_TX_RTR_FRAME = 0xBF; // X0XXXXXX Puede usar AND ( &) a nivel de bits para ajustar los indicadores apropiados. Por

ejemplo: Copiar código al portapapeles

// valor del formulario que se utilizará con CANSendMessage: send_config = _CAN_TX_PRIORITY_0 & _CAN_TX_XTD_FRAME &

_CAN_TX_NO_RTR_FRAME; ... CANSendMessage (id, data, 1, send_config);

CAN_RX_MSG_FLAGS CAN_RX_MSG_FLAGSSon banderas relacionadas con la recepción del mensaje CAN . Si

se establece un bit particular; el significado correspondiente es VERDADERO o de lo contrario será FALSO. const char _CAN_RX_FILTER_BITS = 0x07, // Use esto para acceder a los bits de filtro _CAN_RX_FILTER_1 = 0x00, _CAN_RX_FILTER_2 = 0x01, _CAN_RX_FILTER_3 = 0x02, _CAN_RX_FILTER_4 = 0x03, _CAN_RX_FILTER_5 = 0x04, _CAN_RX_FILTER_6 = 0x05, _CAN_RX_OVERFLOW = 0x08, // Establecer si no, se borra Desbordado _CAN_RX_INVALID_MSG = 0x10, // Establecer si no, se borra inválida _CAN_RX_XTD_FRAME = 0x20, // Establecer si el mensaje XTD no, se borra _CAN_RX_RTR_FRAME = 0x40, // Establecer si el mensaje RTR no, se borra _CAN_RX_DBL_BUFFERED = 0x80; // Establecer si este mensaje era hardware de doble búfer Puede usar AND ( &) a nivel de bits para ajustar los indicadores apropiados. Por ejemplo: Copiar código al portapapeles

if (MsgFlag & _CAN_RX_OVERFLOW! = 0) { ... // Se ha producido un desbordamiento del receptor. // Hemos perdido nuestro mensaje anterior. }

CAN_MASK CAN_MASKLas constantes definen códigos de máscara. La función CANSetMaskespera

uno de estos como su argumento: # const char _CAN_MASK_B1 = 0, _CAN_MASK_B2 = 1;

CAN_FILTER CAN_FILTERLas constantes definen códigos de filtro. La función CANSetFilterespera

uno de estos como su argumento: const char _CAN_FILTER_B1_F1 = 0, _CAN_FILTER_B1_F2 = 1, _CAN_FILTER_B2_F1 = 2, _CAN_FILTER_B2_F2 = 3, _CAN_FILTER_B2_F3 = 4, _CAN_FILTER_B2_F4 = 5;

Ejemplo de biblioteca Esta es una demostración simple del uso de rutinas de la Biblioteca CAN . El primer nodo inicia la comunicación con el segundo nodo enviando algunos datos a su dirección. El segundo nodo responde devolviendo los datos incrementados en 1. El primer nodo luego hace lo mismo y envía los datos incrementados de vuelta al segundo nodo, etc. Código para el primer nodo CAN:

Copiar código al portapapeles

unsigned char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags; // puede banderas sin firmar char Rx_Data_Len; // longitud de los datos recibidos en bytes char RxTx_Data [8]; // can rx / tx data buffer char Msg_Rcvd; // indicador de recepción const long ID_1st = 12111, ID_2nd = 3; // ID de nodo largo Rx_ID; void main () { PORTC = 0; PORTC TRISC = 0; PORTC como salida

// borrar

Can_Init_Flags = 0; Can_Send_Flags = 0; banderas Can_Rcv_Flags = 0;

// // borrar las

// establece

//

Can_Send_Flags = _CAN_TX_PRIORITY_0 & formulario que se utilizará _CAN_TX_XTD_FRAME & CANWrite _CAN_TX_NO_RTR_FRAME;

// valor de

Can_Init_Flags = _CAN_CONFIG_SAMPLE_THRICE & formulario que se utilizará _CAN_CONFIG_PHSEG2_PRG_ON & CANInit _CAN_CONFIG_XTD_MSG & _CAN_CONFIG_DBL_BUFFER_ON & _CAN_CONFIG_VALID_XTD_MSG;

// valor de

// con

// con

CANInitialize (1,3,3,3,1, Can_Init_Flags); // Inicializar el módulo CAN CANSetOperationMode (_CAN_MODE_CONFIG, 0xFF); // establecer el modo CONFIGURACIÓN CANSetMask (_CAN_MASK_B1, -1, _CAN_CONFIG_XTD_MSG); // establece todos los bits de mask1 a unos CANSetMask (_CAN_MASK_B2, -1, _CAN_CONFIG_XTD_MSG); // establece todos los bits de mask2 a los CANSetFilter (_CAN_FILTER_B2_F4, ID_2nd, _CAN_CONFIG_XTD_MSG); // establecer la id del filtro B2_F4 a la segunda ID de nodo CANSetOperationMode (_CAN_MODE_NORMAL, 0xFF); el modo NORMAL

// establece

RxTx_Data [0] = 9; los datos iniciales para ser enviados

// configurar

CANWrite (ID_1st, RxTx_Data, 1, Can_Send_Flags); mensaje inicial

// enviar

while (1) { // interminable bucle Msg_Rcvd = CANRead (& Rx_ID, RxTx_Data, & Rx_Data_Len, & Can_Rcv_Flags); // recibir mensaje

si ((Rx_ID == ID_2nd) && Msg_Rcvd) { // si el mensaje recibió la identificación de verificación PORTC = RxTx_Data [0]; // identificación correcta, datos de salida en PORTC RxTx_Data [0] ++; // incrementar datos recibidos Delay_ms (10); CANWrite (ID_1st, RxTx_Data, 1, Can_Send_Flags); // devolver datos incrementados } } }

Código para el segundo nodo CAN: Copiar código al portapapeles

unsigned char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags; // puede banderas sin firmar char Rx_Data_Len; // longitud de los datos recibidos en bytes char RxTx_Data [8]; // can rx / tx data buffer char Msg_Rcvd; // indicador de recepción const long ID_1st = 12111, ID_2nd = 3; // ID de nodo largo Rx_ID; void main () { PORTC = 0; PORTC TRISC = 0; PORTC como salida

// borrar

Can_Init_Flags = 0; Can_Send_Flags = 0; banderas Can_Rcv_Flags = 0;

// // borrar las

// establece

//

Can_Send_Flags = _CAN_TX_PRIORITY_0 & formulario que se utilizará _CAN_TX_XTD_FRAME & CANWrite _CAN_TX_NO_RTR_FRAME;

// valor de

Can_Init_Flags = _CAN_CONFIG_SAMPLE_THRICE & formulario que se utilizará _CAN_CONFIG_PHSEG2_PRG_ON & CANInit _CAN_CONFIG_XTD_MSG & _CAN_CONFIG_DBL_BUFFER_ON & _CAN_CONFIG_VALID_XTD_MSG & _CAN_CONFIG_LINE_FILTER_OFF;

// valor de

CANInitialize (1,3,3,3,1, Can_Init_Flags); inicializar el módulo CAN externo CANSetOperationMode (_CAN_MODE_CONFIG, 0xFF); establecer el modo CONFIGURACIÓN CANSetMask (_CAN_MASK_B1, -1, _CAN_CONFIG_XTD_MSG); establece todos los bits de mask1 a unos CANSetMask (_CAN_MASK_B2, -1, _CAN_CONFIG_XTD_MSG); establece todos los bits de mask2 a los

// con

// con

// // // //

CANSetFilter (_CAN_FILTER_B2_F3, ID_1st, _CAN_CONFIG_XTD_MSG); // establecer la id del filtro B2_F3 en el primer ID de nodo CANSetOperationMode (_CAN_MODE_NORMAL, 0xFF); el modo NORMAL

// establece

while (1) { // interminable bucle Msg_Rcvd = CANRead (& Rx_ID, RxTx_Data, & Rx_Data_Len, & Can_Rcv_Flags); // recibir mensaje si ((Rx_ID == ID_1st) && Msg_Rcvd) { // si el mensaje recibió la identificación de verificación PORTC = RxTx_Data [0]; // identificación correcta, datos de salida en PORTC RxTx_Data [0] ++; // incrementar los datos recibidos CANWrite (ID_2nd, RxTx_Data, 1, Can_Send_Flags); // devolver datos incrementados } } }

Conexión HW

Ejemplo de interfaz de transceptor CAN con MCU y bus

Biblioteca CANSPI El módulo SPI está disponible con varias MCU compatibles con PIC. El mikroC PRO para PIC proporciona una biblioteca (controlador) para trabajar con los tableros adicionales CANSPI de mikroElektronika (con MCP2515 o MCP2510) a través de la interfaz SPI . El CAN es un protocolo muy robusto que tiene detección y señalización de errores, autocomprobación y confinamiento de fallas. Los datos CAN y los marcos

remotos defectuosos se retransmiten automáticamente, de forma similar a Ethernet. En el mikroC PRO para PIC, cada rutina de la biblioteca CAN tiene su propia contraparte CANSPI con una sintaxis idéntica. Para obtener más información sobre la red de área del controlador, consulte la biblioteca CAN . Tenga en cuenta que una velocidad de comunicación efectiva depende de SPI y ciertamente es más lenta que la CAN "real" . Las tasas de transferencia de datos dependen de la distancia. Por ejemplo, 1 Mbit / s se puede lograr en longitudes de red inferiores a 40 m, mientras que 250 Kbit / s se puede lograr en longitudes de red inferiores a 250 m. A mayor distancia, mayor tasa de bits máxima que se puede alcanzar. La tasa de bits más baja definida por el estándar es de 200 Kbit / s. Los cables utilizados son pares trenzados blindados. CAN soporta dos formatos de mensaje:  Formato estándar, con 11 bits identificadores y  Formato extendido, con 29 bits identificadores.     

Importante: Consulte la norma CAN sobre la resistencia de terminación del bus CAN . Una velocidad de comunicación CANSPI efectiva depende de SPI y ciertamente es más lenta que la CAN "real" . La biblioteca utiliza el módulo SPI para la comunicación. El usuario debe inicializar el módulo SPI apropiado antes de usar la biblioteca CANSPI . Para MCU con dos módulos SPI es posible inicializar ambos y luego cambiar usando la rutina SPI_Set_Active . El módulo CANSPI se refiere a la placa complementaria CANSPI de mikroElektronika conectada al módulo SPI de MCU .

Árbol de la dependencia de la biblioteca Dependencias externas de la biblioteca CANSPI Las siguientes variables deben definirse en todos los proyectos usando labiblioteca CANSPI :

Descripció n:

Ejemplo:

extern sfr sbitCanSpi_CS;

Chip de selección de línea.

sbit CanSpi_CS atRC0_bit;

extern sfr sbitCanSpi_Rst;

Restablecer línea.

sbit CanSpi_Rst atRC2_bit;

extern sfr sbitCanSpi_CS_Directio n;

Dirección del pin Chip Select.

sbitCanSpi_CS_Direction at TRISC0_ bit;

extern sfr sbitCanSpi_Rst_Directi on;

Dirección del pin de reinicio.

sbitCanSpi_Rst_Direction at TRISC2 _bit;

Rutinas de la biblioteca      

CANSPISetOperationMode CANSPIGetOperationMode CANSPIInicializar CANSPISetBaudRate CANSPISetMask CANSPISetFilter

 

CANSPIRead CANSPIWrite

CANSPISetOperationMode Prototipo

void CANSPISetOperationMode ( Char modo, Char WAIT);

Devoluciones

Nada.

Descripción

Establece el módulo CANSPI en el modo solicitado. Parámetros:  mode:Modo de operación del módulo CANSPI. Valores válidos: CANSPI_OP_MODEconstantes (ver constantes CANSPI ).  WAIT:Solicitud de verificación de cambio de modo CANSPI. Si WAIT == 0, la llamada es no bloqueante. La función no verifica si el módulo CANSPI se cambió al modo solicitado o no. La persona que llama debe usar CANSPIGetOperationModepara verificar el modo de operación correcto antes de realizar la operación específica del modo. Si WAIT != 0, la llamada está bloqueando, la función no "regresará" hasta que se establezca el modo solicitado.

Requiere

Las rutinas CANSPI solo son compatibles con las MCU con el módulo SPI . La MCU debe estar correctamente conectada a la placa CANSPI Extra de mikroElektronika o hardware similar. Vea el ejemplo de conexión en la parte inferior de esta página.

Ejemplo

// configura el módulo CANSPI en modo de configuración (espera dentro de CANSPISetOperationMode hasta que se establezca este modo) CANSPISetOperationMode (_CANSPI_MODE_CONFIG, 0xFF);

CANSPIGetOperationMode Prototipo

char CANSPIGetOperationMode ();

Devoluciones

Modo de funcionamiento actual.

Descripción

La función devuelve el modo de operación actual del módulo CANSPI . Verifique las CANSPI_OP_MODEconstantes (vea constantes CANSPI ) o la hoja de datos del dispositivo para los códigos de modo de operación.

Requiere

Las rutinas CANSPI solo son compatibles con las MCU con el módulo SPI .

La MCU debe estar correctamente conectada a la placa CANSPI Extra de mikroElektronika o hardware similar. Vea el ejemplo de conexión en la parte inferior de esta página. Ejemplo

// comprueba si el módulo CANSPI está en modo Normal y si está haciendo algo. if (CANSPIGetOperationMode () == _CANSPI_MODE_NORMAL) { ... }

CANSPIInicializar Prototip o

void CANSPIInitialize ( char SJW, char BRP, char PHSEG1, char PHSEG2, char P ROPSEG, char CANSPI_CONFIG_FLAGS);

Devoluc iones

Nada.

Descrip ción

Inicializa el módulo CANSPI . El controlador CAN independiente en el módulo CANSPI está configurado para:  Deshabilitar captura CAN  Continuar la operación CAN en modo inactivo  No abortar las transmisiones pendientes.  Reloj Fcan: 4 * Tcy (Fosc)  La velocidad de transmisión se establece de acuerdo con los parámetros dados  Modo CAN: Normal  Los ID de registros de filtro y máscara se establecen en cero  El filtro y el tipo de cuadro de mensaje de máscara se establecen de acuerdo con el CANSPI_CONFIG_FLAGSvalor SAM, SEG2PHTS, WAKFILY DBENbits se establecen de acuerdo con CANSPI_CONFIG_FLAGSel valor. Parámetros:  SJWcomo se define en la hoja de datos del controlador CAN  BRPcomo se define en la hoja de datos del controlador CAN  PHSEG1como se define en la hoja de datos del controlador CAN  PHSEG2como se define en la hoja de datos del controlador CAN  PROPSEGcomo se define en la hoja de datos del controlador CAN  CANSPI_CONFIG_FLAGSse forma a partir de constantes predefinidas (ver constantes CANSPI )

Requier e

Variables globales :  CanSpi_CS: Línea Chip Select  CanSpi_Rst: Restablecer línea  CanSpi_CS_Direction: Dirección del pin Chip Select

 CanSpi_Rst_Direction: Dirección del pin de reinicio Debe ser definido antes de usar esta función. Las rutinas CANSPI solo son compatibles con las MCU con el módulo SPI . El módulo SPI necesita ser inicializado. Ver las rutinas SPIx_Init y SPIx_Init_Advanced . La MCU debe estar correctamente conectada a la placa CANSPI Extra de mikroElektronika o hardware similar. Vea el ejemplo de conexión en la parte inferior de esta página. Ejemplo

// Conexiones del módulo CANSPI sbit CanSpi_CS at RC0_bit; sbit CanSpi_CS_Direction en TRISC0_bit; sbit CanSpi_Rst en RC2_bit; sbit CanSpi_Rst_Direction en TRISC2_bit; // Terminar las conexiones del módulo CANSPI // inicialice el módulo CANSPI con los indicadores de velocidad de transmisión y de mensajes adecuados junto con las reglas de muestreo char CanSPi_Init_Flags; ... CanSPi_Init_Flags = _CANSPI_CONFIG_SAMPLE_THRICE & // valor de formulario que se utilizará _CANSPI_CONFIG_PHSEG2_PRG_ON & // con CANSPIInitialize _CANSPI_CONFIG_XTD_MSG & _CANSPI_CONFIG_DBL_BUFFER_ON & _CANSPI_CONFIG_VALID_XTD_MSG; ... SPI1_Init (); // inicializar el módulo SPI CANSPIInitialize (1,3,3,3,1, CanSpi_Init_Flags); // inicializar el módulo CANSPI externo

CANSPISetBaudRate Prototip o

void CANSPISetBaudRate ( char SJW, char BRP, char PHSEG1, char PHSEG2, char P ROPSEG, char CANSPI_CONFIG_FLAGS);

Devoluc iones

Nada.

Descrip ción

Establece la velocidad en baudios del módulo CANSPI . Debido a la complejidad del protocolo CAN , no puede forzar simplemente un valor de bps. En su lugar, use esta función cuando el módulo CANSPI esté en modo Config. SAM, SEG2PHTSy los WAKFILbits se establecen de acuerdo al CANSPI_CONFIG_FLAGSvalor. Consulte la hoja de datos para más detalles. Parámetros:  SJWcomo se define en la hoja de datos del controlador CAN  BRPcomo se define en la hoja de datos del controlador CAN

   

PHSEG1como se define en la hoja de datos del

controlador CAN PHSEG2como se define en la hoja de datos del controlador CAN PROPSEGcomo se define en la hoja de datos del controlador CAN CANSPI_CONFIG_FLAGSse forma a partir de constantes predefinidas (ver constantes CANSPI )

Requier e

El módulo CANSPI debe estar en modo Config. De lo contrario, la función se ignorará. Ver CANSPISetOperationMode . Las rutinas CANSPI solo son compatibles con las MCU con el módulo SPI . La MCU debe estar correctamente conectada a la placa CANSPI Extra de mikroElektronika o hardware similar. Vea el ejemplo de conexión en la parte inferior de esta página.

Ejemplo

// establece la velocidad de transmisión requerida y las reglas de muestreo char canspi_config_flags; ... CANSPISetOperationMode (CANSPI_MODE_CONFIG, 0xFF); // establecer el modo CONFIGURACIÓN (el módulo CANSPI debe estar en modo de configuración para la configuración de la velocidad en baudios) canspi_config_flags = _CANSPI_CONFIG_SAMPLE_THRICE & _CANSPI_CONFIG_PHSEG2_PRG_ON & _CANSPI_CONFIG_STD_MSG & _CANSPI_CONFIG_DBL_BUFFER_ON & _CANSPI_CONFIG_VALID_XTD_MSG & _CANSPI_CONFIG_LINE_FILTER_OFF; CANSPISetBaudRate (1, 1, 3, 3, 1, canspi_config_flags);

CANSPISetMask Prototipo

void CANSPISetMask ( char CANSPI_MASK, long val, char CANSPI_CONFIG_FL AGS);

Devolucion es

Nada.

Descripción

Configura la máscara para el filtrado avanzado de mensajes. El parámetro valuese ajusta en bits a los registros de máscara apropiados. Parámetros:  CANSPI_MASK: Número de máscara del módulo CANSPI . Valores válidos: CANSPI_MASKconstantes (ver constantes CANSPI )  val: valor de registro de máscara  CANSPI_CONFIG_FLAGS:Selecciona el tipo de mensaje a filtrar. Valores válidos:  _CANSPI_CONFIG_ALL_VALID_MSG,  _CANSPI_CONFIG_MATCH_MSG_TYPE & _CANSPI_CONFIG_STD_MSG,



_CANSPI_CONFIG_MATCH_MSG_TYPE & _CANSPI_CONFIG_XTD_MSG.

(ver constantes CANSPI ) Requiere

El módulo CANSPI debe estar en modo Config. De lo contrario, la función se ignorará. Ver CANSPISetOperationMode . Las rutinas CANSPI solo son compatibles con las MCU con el módulo SPI . La MCU debe estar correctamente conectada a la placa CANSPI Extra de mikroElektronika o hardware similar. Vea el ejemplo de conexión en la parte inferior de esta página.

Ejemplo

// establece la máscara de filtro y el valor de tipo de mensaje apropiados CANSPISetOperationMode (_CANSPI_MODE_CONFIG, 0xFF); // establecer el modo CONFIGURACIÓN (el módulo CANSPI debe estar en el modo de configuración para la configuración de la máscara) // Establecer todos los bits de máscara B1 en 1 (todos los bits filtrados son relevantes): // Tenga en cuenta que -1 es una forma más barata de escribir 0xFFFFFFFF. // Complemento hará el truco y lo llenará con unos. CANSPISetMask (_CANSPI_MASK_B1, -1, _CANSPI_CONFIG_MATCH_MSG_TYPE & _CANSPI_CONFIG_XTD_MSG);

CANSPISetFilter Prototipo

void CANSPISetFilter ( char CANSPI_FILTER, long val, char CANSPI_CONFIG_ FLAGS);

Devolucion es

Nada.

Descripción

Configura el filtro de mensajes. El parámetro valuese ajusta en bits a los registros de filtro apropiados. Parámetros:  CANSPI_FILTER: Número de filtro del módulo CANSPI . Valores válidos: CANSPI_FILTERconstantes (ver constantes CANSPI )  val: valor de registro de filtro  CANSPI_CONFIG_FLAGS:Selecciona el tipo de mensaje a filtrar. Valores válidos:  _CANSPI_CONFIG_ALL_VALID_MSG,  _CANSPI_CONFIG_MATCH_MSG_TYPE & _CANSPI_CONFIG_STD_MSG,  _CANSPI_CONFIG_MATCH_MSG_TYPE & _CANSPI_CONFIG_XTD_MSG. (ver constantes CANSPI )

Requiere

El módulo CANSPI debe estar en modo Config. De lo contrario, la función se ignorará. Ver CANSPISetOperationMode . Las rutinas CANSPI solo son compatibles con las MCU con el módulo SPI . La MCU debe estar correctamente conectada a la placa CANSPI Extra de mikroElektronika o hardware similar. Vea el ejemplo de conexión en la parte inferior de esta página.

Ejemplo

// establece el valor de filtro apropiado y el tipo de mensaje CANSPISetOperationMode (_CANSPI_MODE_CONFIG, 0xFF); // establecer el modo CONFIGURACIÓN (el módulo CANSPI debe estar en modo de configuración para la configuración del filtro) / * Establecer id del filtro B1_F1 a 3: * / CANSPISetFilter (_CANSPI_FILTER_B1_F1, 3, _CANSPI_CONFIG_XTD_MSG);

CANSPIRead Prototipo

Devoluciones

char CANSPIRead ( long * id, char * rd_data, char * data_len, char * CANSPI_RX_MSG_FLAGS);  

0 si no se recibe nada 0xFF si uno de los buffers de recepción está

lleno (mensaje recibido) Descripción

Si se encuentra al menos un búfer de recepción completo, se procesará de la siguiente manera:  El ID de mensaje se recupera y almacena en la ubicación proporcionada por el idparámetro  Los datos del mensaje se recuperan y almacenan en un búfer proporcionado por el rd_dataparámetro  La longitud del mensaje se recupera y almacena en la ubicación proporcionada por el data_lenparámetro  Los indicadores de mensaje se recuperan y almacenan en la ubicación proporcionada por el CANSPI_RX_MSG_FLAGSparámetro Parámetros:  id: identificador de mensaje dirección de almacenamiento  rd_data: búfer de datos (una matriz de bytes de hasta 8 bytes de longitud)  data_len: Dirección de almacenamiento de longitud de datos.  CANSPI_RX_MSG_FLAGS: mensaje señala la dirección de almacenamiento

Requiere

El módulo CANSPI debe estar en un modo en el que la recepción sea posible. Ver CANSPISetOperationMode .

Las rutinas CANSPI solo son compatibles con las MCU con el módulo SPI . La MCU debe estar correctamente conectada a la placa CANSPI Extra de mikroElektronika o hardware similar. Vea el ejemplo de conexión en la parte inferior de esta página. Ejemplo

// compruebe el módulo CANSPI para los mensajes recibidos. Si alguno fue recibido haz algo. char msg_rcvd, rx_flags, data_len; datos de carácter [8]; long msg_id; ... CANSPISetOperationMode (_CANSPI_MODE_NORMAL, 0xFF); // establecer el modo NORMAL (el módulo CANSPI debe estar en el modo en el que es posible recibir) ... rx_flags = 0; // borrar las banderas de mensaje if (msg_rcvd = CANSPIRead (msg_id, data, data_len, rx_flags)) { ... }

CANSPIWrite Prototipo

Devoluciones

char CANSPIWrite ( id largo , char * wr_data, char data_len, char CANSPI_TX_MSG_FLAGS); 

0 si todos los buffers de transmisión están



ocupados 0xFF si al menos un búfer de transmisión está disponible

Descripción

Si se encuentra al menos un búfer de transmisión vacío, la función envía un mensaje en la cola para su transmisión. Parámetros:  id:Identificador de mensaje CAN . Valores válidos: valores de 11 o 29 bits, según el tipo de mensaje (estándar o extendido)  wr_data: Datos a enviar (una matriz de bytes de hasta 8 bytes de longitud)  data_len:longitud de datos. Valores válidos: 1 a 8.  CANSPI_RX_MSG_FLAGS: banderas de mensaje

Requiere

El módulo CANSPI debe estar en modo en el que la transmisión sea posible. Ver CANSPISetOperationMode . Las rutinas CANSPI solo son compatibles con las MCU con el módulo SPI . La MCU debe estar correctamente conectada a la placa CANSPI Extra de mikroElektronika o hardware similar. Vea el ejemplo de conexión en la parte inferior de esta página.

Ejemplo

// enviar mensaje extendida mensaje CAN con el ID y datos apropiados de char tx_flags; datos de carácter [8];

long msg_id; ... CANSPISetOperationMode (_CANSPI_MODE_NORMAL, 0xFF); // establecer el modo NORMAL (CANSPI debe estar en el modo en el que la transmisión es posible) tx_flags = _CANSPI_TX_PRIORITY_0 & _CANSPI_TX_XTD_FRAME; // establecer banderas de mensaje CANSPIWrite (msg_id, datos, 2, tx_flags);

Constantes CANSPI Hay una serie de constantes predefinidas en la biblioteca CANSPI . Debe estar familiarizado con ellos para poder utilizar la biblioteca de manera efectiva. Verifique el ejemplo al final del capítulo.

CANSPI_OP_MODE Las CANSPI_OP_MODEconstantes definen el modo de operación CANSPI . La función CANSPISetOperationMode espera uno de estos como argumento: const char _CANSPI_MODE_BITS = 0xE0, // Use esto para acceder a los bits de modo operativo _CANSPI_MODE_NORMAL = 0x00, _CANSPI_MODE_SLEEP = 0x20, _CANSPI_MODE_LOOP = 0x40, _CANSPI_MODE_LISTEN = 0x60, _CANSPI_MODE_CONFIG = 0x80;

CANSPI_CONFIG_FLAGS Las CANSPI_CONFIG_FLAGSconstantes definen banderas relacionadas con la configuración del módulo CANSPI . Las funciones CANSPIInitialize , CANSPISetBaudRate , CANSPISetMask y CANSPISetFilt eresperan uno de estos (o una combinación bit a bit) como su argumento: const char _CANSPI_CONFIG_DEFAULT = 0xFF, // 11111111 _CANSPI_CONFIG_PHSEG2_PRG_BIT = 0x01, _CANSPI_CONFIG_PHSEG2_PRG_ON = 0xFF, _CANSPI_CONFIG_PHSEG2_PRG_OFF = 0xFE, _CANSPI_CONFIG_LINE_FILTER_BIT = 0x02, _CANSPI_CONFIG_LINE_FILTER_ON = 0xFF, _CANSPI_CONFIG_LINE_FILTER_OFF = 0xFD, _CANSPI_CONFIG_SAMPLE_BIT = 0x04, _CANSPI_CONFIG_SAMPLE_ONCE = 0xFF, _CANSPI_CONFIG_SAMPLE_THRICE = 0xFB,

// XXXXXXX1 // XXXXXXX0 // XXXXXX1X // XXXXXX0X // XXXXX1XX // XXXXX0XX

_CANSPI_CONFIG_MSG_TYPE_BIT = 0x08, _CANSPI_CONFIG_STD_MSG = 0xFF, // XXXX1XXX _CANSPI_CONFIG_XTD_MSG = 0xF7, // XXXX0XXX _CANSPI_CONFIG_DBL_BUFFER_BIT = 0x10, _CANSPI_CONFIG_DBL_BUFFER_ON = 0xFF, _CANSPI_CONFIG_DBL_BUFFER_OFF = 0xEF,

// XXX1XXXX // XXX0XXXX

_CANSPI_CONFIG_MSG_BITS = 0x60, _CANSPI_CONFIG_ALL_MSG = 0xFF, // X11XXXXX _CANSPI_CONFIG_VALID_XTD_MSG = 0xDF, // X10XXXXX _CANSPI_CONFIG_VALID_STD_MSG = 0xBF, // X01XXXXX _CANSPI_CONFIG_ALL_VALID_MSG = 0x9F; // X00XXXXX

Puede usar AND ( &) a nivel de bit para formar un byte de configuración de estos valores. Por ejemplo: Copiar código al portapapeles

init = _CANSPI_CONFIG_SAMPLE_THRICE & _CANSPI_CONFIG_PHSEG2_PRG_ON & _CANSPI_CONFIG_STD_MSG & _CANSPI_CONFIG_DBL_BUFFER_ON & _CANSPI_CONFIG_VALID_XTD_MSG & _CANSPI_CONFIG_LINE_FILTER_OFF; ... CANSPIInitialize (1, 1, 3, 3, 1, init);

// inicializa CANSPI

CANSPI_TX_MSG_FLAGS CANSPI_TX_MSG_FLAGSLas banderas están relacionadas con la transmisión de

un mensaje CAN : const char _CANSPI_TX_PRIORITY_BITS = 0x03, _CANSPI_TX_PRIORITY_0 = 0xFC, _CANSPI_TX_PRIORITY_1 = 0xFD, _CANSPI_TX_PRIORITY_2 = 0xFE, _CANSPI_TX_PRIORITY_3 = 0xFF, _CANSPI_TX_FRAME_BIT = 0x08, _CANSPI_TX_STD_FRAME = 0xFF, _CANSPI_TX_XTD_FRAME = 0xF7,

// // // //

XXXXXX00 XXXXXX01 XXXX10 XXXXXX

// XXXXX1XX // XXXXX0XX

_CANSPI_TX_RTR_BIT = 0x40, _CANSPI_TX_NO_RTR_FRAME = 0xFF, // X1XXXXXX _CANSPI_TX_RTR_FRAME = 0xBF; // X0XXXXXX Puede usar AND ( &) a nivel de bits para ajustar los indicadores apropiados. Por

ejemplo: Copiar código al portapapeles

/ * valor de formulario que se utilizará como indicador de mensaje de envío: * / send_config = _CANSPI_TX_PRIORITY_0 & _CANSPI_TX_XTD_FRAME & _CANSPI_TX_NO_RTR_FRAME; ... CANSPIWrite (id, data, 1, send_config);

CANSPI_RX_MSG_FLAGS CANSPI_RX_MSG_FLAGSSon banderas relacionadas con la recepción

del mensaje CAN . Si se establece un bit en particular, el significado correspondiente es VERDADERO o, de lo contrario, será FALSO. const char _CANSPI_RX_FILTER_BITS = 0x07, // Use esto para acceder a los bits de filtro _CANSPI_RX_FILTER_1 = 0x00, _CANSPI_RX_FILTER_2 = 0x01, _CANSPI_RX_FILTER_3 = 0x02, _CANSPI_RX_FILTER_4 = 0x03, _CANSPI_RX_FILTER_5 = 0x04, _CANSPI_RX_FILTER_6 = 0x05, _CANSPI_RX_OVERFLOW = 0x08, // Establecer si no, se borra Desbordado _CANSPI_RX_INVALID_MSG = 0x10, // Establecer si no, se borra inválida _CANSPI_RX_XTD_FRAME = 0x20, // Establecer si el mensaje XTD no, se borra

_CANSPI_RX_RTR_FRAME = 0x40, // Establecer si el mensaje RTR no, se borra _CANSPI_RX_DBL_BUFFERED = 0x80; // Establecer si este mensaje era hardware de doble búfer

Puede usar AND ( &) a nivel de bits para ajustar los indicadores apropiados. Por ejemplo: Copiar código al portapapeles

if (MsgFlag & _CANSPI_RX_OVERFLOW! = 0) { ... // Se ha producido un desbordamiento del receptor. // Hemos perdido nuestro mensaje anterior. }

CANSPI_MASK Las CANSPI_MASKconstantes definen códigos de máscara. La función CANSPISetMask espera uno de estos como argumento: const char _CANSPI_MASK_B1 = 0, _CANSPI_MASK_B2 = 1;

CANSPI_FILTER Las CANSPI_FILTERconstantes definen códigos de filtro. Funciones CANSPISetFilter espera uno de estos como argumento: const char _CANSPI_FILTER_B1_F1 = 0, _CANSPI_FILTER_B1_F2 = 1, _CANSPI_FILTER_B2_F1 = 2, _CANSPI_FILTER_B2_F2 = 3, _CANSPI_FILTER_B2_F3 = 4, _CANSPI_FILTER_B2_F4 = 5;

Ejemplo de biblioteca Esta es una demostración simple del uso de las rutinas de la biblioteca CANSPI . El primer nodo inicia la comunicación con el segundo nodo enviando algunos datos a su dirección. El segundo nodo responde devolviendo los datos incrementados en 1. El primer nodo luego hace lo mismo y envía los datos incrementados de vuelta al segundo nodo, etc. Código para el primer nodo CANSPI: Copiar código al portapapeles

unsigned char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags; // puede banderas sin firmar char Rx_Data_Len; // longitud de los datos recibidos en bytes char RxTx_Data [8]; // can rx / tx data buffer char Msg_Rcvd; // indicador de recepción const long ID_1st = 12111, ID_2nd = 3; // ID de nodo largo Rx_ID; // Conexiones del módulo CANSPI sbit CanSpi_CS at RC0_bit; sbit CanSpi_CS_Direction en TRISC0_bit; sbit CanSpi_Rst en RC2_bit; sbit CanSpi_Rst_Direction en TRISC2_bit; // Terminar las conexiones del módulo CANSPI void main () {

ANSEL = 0; pines AN como E / S digital ANSELH = 0;

// Configurar

PORTB = 0; PORTB TRISB = 0; PORTB como salida

// borrar

Can_Init_Flags = 0; Can_Send_Flags = 0; las banderas Can_Rcv_Flags = 0;

// // borrar

// establece

//

Can_Send_Flags = _CANSPI_TX_PRIORITY_0 & formulario que se utilizará _CANSPI_TX_XTD_FRAME & CANSPIWrite _CANSPI_TX_NO_RTR_FRAME;

// valor de

Can_Init_Flags = _CANSPI_CONFIG_SAMPLE_THRICE & formulario que se utilizará _CANSPI_CONFIG_PHSEG2_PRG_ON & CANSPIInit _CANSPI_CONFIG_XTD_MSG & _CANSPI_CONFIG_DBL_BUFFER_ON & _CANSPI_CONFIG_VALID_XTD_MSG;

// Valor de

SPI1_Init (); inicializar el módulo SPI1

// con

// con

//

CANSPIInitialize (1,3,3,3,1, Can_Init_Flags); // Inicializar el módulo CANSPI externo CANSPISetOperationMode (_CANSPI_MODE_CONFIG, 0xFF); // establece el modo CONFIGURACIÓN CANSPISetMask (_CANSPI_MASK_B1, -1, _CANSPI_CONFIG_XTD_MSG); // establece todos los bits de mask1 en unos CANSPISetMask (_CANSPI_MASK_B2, -1, _CANSPI_CONFIG_XTD_MSG); // establece todos los bits de mask2 a los CANSPISetFilter (_CANSPI_FILTER_B2_F4, ID_2nd, _CANSPI_CONFIG_XTD_MSG); // establecer la id del filtro B2_F4 a la segunda ID de nodo CANSPISetOperationMode (_CANSPI_MODE_NORMAL, 0xFF); establece el modo NORMAL

//

RxTx_Data [0] = 9; configurar los datos iniciales para ser enviados

//

CANSPIWrite (ID_1st, RxTx_Data, 1, Can_Send_Flags); enviar mensaje inicial

//

while (1) { // interminable bucle Msg_Rcvd = CANSPIRead (& Rx_ID, RxTx_Data, & Rx_Data_Len, & Can_Rcv_Flags); // recibir mensaje si ((Rx_ID == ID_2nd) && Msg_Rcvd) { // si el mensaje recibió la identificación de verificación PORTB = RxTx_Data [0]; // identificación correcta, datos de salida en PORTC RxTx_Data [0] ++; // incrementar datos recibidos Delay_ms (10);

CANSPIWrite (ID_1st, RxTx_Data, 1, Can_Send_Flags); // devolver datos incrementados } } }

Código para el segundo nodo CANSPI: Copiar código al portapapeles

unsigned char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags; // puede banderas sin firmar char Rx_Data_Len; // longitud de los datos recibidos en bytes char RxTx_Data [8]; // can rx / tx data buffer char Msg_Rcvd; // indicador de recepción const long ID_1st = 12111, ID_2nd = 3; // ID de nodo largo Rx_ID; // Conexiones del módulo CANSPI sbit CanSpi_CS at RC0_bit; sbit CanSpi_CS_Direction en TRISC0_bit; sbit CanSpi_Rst en RC2_bit; sbit CanSpi_Rst_Direction en TRISC2_bit; // Terminar las conexiones del módulo CANSPI void main () { ANSEL = 0; pines AN como E / S digital ANSELH = 0; C1ON_bit = 0; Desactivar comparadores C2ON_bit = 0;

// Configurar //

PORTB = 0; PORTB TRISB = 0; PORTB como salida

// borrar

Can_Init_Flags = 0; Can_Send_Flags = 0; las banderas Can_Rcv_Flags = 0;

// // borrar

// establece

//

Can_Send_Flags = _CANSPI_TX_PRIORITY_0 & formulario que se utilizará _CANSPI_TX_XTD_FRAME & CANSPIWrite _CANSPI_TX_NO_RTR_FRAME;

// valor de

Can_Init_Flags = _CANSPI_CONFIG_SAMPLE_THRICE & formulario que se utilizará _CANSPI_CONFIG_PHSEG2_PRG_ON & CANSPIInit _CANSPI_CONFIG_XTD_MSG & _CANSPI_CONFIG_DBL_BUFFER_ON & _CANSPI_CONFIG_VALID_XTD_MSG & _CANSPI_CONFIG_LINE_FILTER_OFF;

// Valor de

SPI1_Init (); // inicializar el módulo SPI1

// con

// con

CANSPIInitialize (1,3,3,3,1, Can_Init_Flags); // inicializar el módulo CANSPI externo CANSPISetOperationMode (_CANSPI_MODE_CONFIG, 0xFF); // establece el modo CONFIGURACIÓN CANSPISetMask (_CANSPI_MASK_B1, -1, _CANSPI_CONFIG_XTD_MSG); // establece todos los bits de mask1 en unos CANSPISetMask (_CANSPI_MASK_B2, -1, _CANSPI_CONFIG_XTD_MSG); // establece todos los bits de mask2 a los CANSPISetFilter (_CANSPI_FILTER_B2_F3, ID_1st, _CANSPI_CONFIG_XTD_MSG); // establecer la id del filtro B2_F3 en el primer ID de nodo CANSPISetOperationMode (_CANSPI_MODE_NORMAL, 0xFF); // establece el modo NORMAL while (1) { // interminable bucle Msg_Rcvd = CANSPIRead (& Rx_ID, RxTx_Data, & Rx_Data_Len, & Can_Rcv_Flags); // recibir mensaje si ((Rx_ID == ID_1st) && Msg_Rcvd) { // si el mensaje recibió la identificación de cheque PORTB = RxTx_Data [0]; // identificación correcta, datos de salida en PORTC RxTx_Data [0] ++; // incrementar los datos recibidos CANSPIWrite (ID_2nd, RxTx_Data, 1, Can_Send_Flags); // devolver datos incrementados } } }

Conexión HW

Ejemplo de interfaz del transceptor CAN MCP2510 con MCU a través de la interfaz SPI

Biblioteca Compact Flash La biblioteca Compact Flash proporciona rutinas para acceder a los datos en la tarjeta Compact Flash (abbr. CF más adelante en el texto). Las tarjetas CF son elementos de memoria ampliamente utilizados, comúnmente utilizados con cámaras digitales. La gran capacidad y el excelente tiempo de acceso de solo unos pocos microsegundos los hacen muy atractivos para las aplicaciones de microcontroladores. En la tarjeta CF, los datos se dividen en sectores. Un sector suele comprender 512 bytes. Las rutinas para el manejo de archivos, las Cf_Fatrutinas, no se realizan directamente sino sucesivamente a través del búfer 512B.   



Importante: Las rutinas para el manejo de archivos solo pueden usarse con el sistema de archivos FAT16. Las funciones de la biblioteca crean y leen archivos solo desde el directorio raíz. Las funciones de biblioteca llenan las tablas FAT1 y FAT2 al escribir en archivos, pero los datos del archivo se leen solo desde la tabla FAT1; es decir, no hay recuperación si la tabla FAT1 se corrompe. Si la tarjeta MMC / SD tiene un registro de inicio maestro (MBR), la biblioteca funcionará con la primera partición primaria (lógica) disponible que tiene un tamaño distinto de cero. Si la tarjeta MMC / SD tiene Volume Record Record (es decir, solo hay una partición lógica y no MBR), la biblioteca funciona con la tarjeta completa como una sola partición. Para obtener más información sobre MBR, unidades físicas y lógicas, particiones primarias / secundarias y tablas de particiones, consulte otros recursos, por ejemplo, Wikipedia y similares.



Antes de la operación de escritura, asegúrese de no sobrescribir el sector de arranque o FAT, ya que podría hacer que su tarjeta en una PC o cámara digital sea ilegible. Las herramientas de mapeo de unidades, como Winhex, pueden ser de gran ayuda.

Árbol de la dependencia de la biblioteca

Dependencias externas de Compact Flash Library Las siguientes variables deben definirse en todos los proyectos utilizando la biblioteca Compact Flash:

Descripción :

Ejemplo:

extern sfr charCF_Data_Port;

Puerto de datos Compact Flash.

char CF_Data_Port at PORTD;

extern sfr sbit CF_RDY;

Línea de señal lista.

sbit CF_RDY atRB7_bit;

extern sfr sbit CF_WE;

Escribir habilitar línea de señal.

sbit CF_WE atLATB6_bit;

extern sfr sbit CF_OE;

Salida habilitar línea de señal.

sbit CF_OE atLATB5_bit;

extern sfr sbit CF_CD1;

Chip de detección de línea de señal.

sbit CF_CD1 atRB4_bit;

extern sfr sbit CF_CE1;

Chip habilita la línea de señal.

sbit CF_CE1 atLATB3_bit;

extern sfr sbit CF_A2;

Dirección pin 2.

sbit CF_A2 atLATB2_bit;

extern sfr sbit CF_A1;

Dirección pin 1.

sbit CF_A1 atLATB1_bit;

extern sfr sbit CF_A0;

Dirección pin 0.

sbit CF_A0 atLATB0_bit;

extern sfr sbitCF_RDY_direction ;

Dirección del pin Listo.

sbitCF_RDY_direction at TRISB7_bit ;

extern sfr sbitCF_WE_direction;

Dirección del pin Habilitar escritura.

sbitCF_WE_direction at TRISB6_bit;

extern sfr sbitCF_OE_direction;

Dirección del pin de habilitación de salida.

sbitCF_OE_direction at TRISB5_bit;

extern sfr sbitCF_CD1_direction ;

Dirección del pin Chip Detect.

sbitCF_CD1_direction at TRISB4_bit ;

extern sfr sbitCF_CE1_direction ;

Dirección del pin chip habilitado.

sbitCF_CE1_direction at TRISB3_bit ;

extern sfr sbitCF_A2_direction;

Dirección del pin Dirección 2.

sbitCF_A2_direction at TRISB2_bit;

extern sfr sbitCF_A1_direction;

Dirección del pin Dirección 1.

sbitCF_A1_direction at TRISB1_bit;

extern sfr sbitCF_A0_direction;

Dirección de la dirección 0 pin.

sbitCF_A0_direction at TRISB0_bit;

Rutinas de la biblioteca  Cf_Init  Cf_Detect  Cf_Enable  Cf_Disable  Cf_Read_Init  Cf_Read_Byte  Cf_Write_Init  Cf_Write_Byte  Cf_Read_Sector  Cf_Write_Sector Rutinas para el manejo de archivos:  Cf_Fat_Init  Cf_Fat_QuickFormat  Cf_Fat_Assign  Cf_Fat_Reset  Cf_Fat_Read  Cf_Fat_Rewrite  Cf_Fat_Append  Cf_Fat_Delete  Cf_Fat_Write  Cf_Fat_Set_File_Date  Cf_Fat_Get_File_Date  Cf_Fat_Get_File_Date_Modified  Cf_Fat_Get_File_Size  Cf_Fat_Get_Swap_File La siguiente rutina es solo para uso interno por compilador:  Cf_Issue_ID_Command

Cf_Init Prototipo

void Cf_Init ();

Devoluciones

Nada.

Descripción

Inicializa los puertos adecuadamente para la comunicación con la tarjeta CF.

Requiere

Variables globales :  CF_Data_Port : Puerto de datos Compact Flash  CF_RDY : Línea de señal lista  CF_WE : Escribir habilitar línea de señal  CF_OE : Línea de señal de habilitación de salida  CF_CD1 : Chip de señal de detección de línea  CF_CE1 : Habilitar línea de señal  CF_A2 : Dirección pin 2  CF_A1 : Dirección pin 1  CF_A0 : Dirección pin 0  

CF_RDY_direction : Dirección del pin Ready CF_WE_direction : Dirección del pin

habilitación de escritura CF_OE_direction : Dirección del pin de habilitación de salida  CF_CD1_direction : Dirección del pin de detección de viruta  CF_CE1_direction : Dirección del pin de habilitación del chip  CF_A2_direction : Dirección del pin Dirección 2  CF_A1_direction : Dirección del pin Dirección 1  CF_A0_direction : Dirección del pin Dirección 0 Debe ser definido antes de usar esta función. 

Ejemplo

// establecer Compact Flash pinout carbón Cf_Data_Port en PORTD; sbit CF_RDY en RB7_bit; sbit CF_WE en LATB6_bit; // para escribir en el pin de salida siempre use latch (familia PIC18 ) sbit CF_OE en LATB5_bit; // para escribir en el pin de salida siempre use latch (familia PIC18 ) sbit CF_CD1 en RB4_bit; sbit CF_CE1 en LATB3_bit; // para escribir en el pin de salida siempre use latch (familia PIC18 ) sbit CF_A2 en LATB2_bit; // para escribir en el pin de salida siempre use latch (familia PIC18 ) sbit CF_A1 at LATB1_bit; // para escribir en el pin de salida siempre use latch (familia PIC18 ) sbit CF_A0 en LATB0_bit; // para escribir en el pin de salida siempre use latch (familia PIC18) sbit sbit sbit sbit sbit sbit sbit

CF_RDY_direction en TRISB7_bit; CF_WE_direction en TRISB6_bit; CF_OE_direction en TRISB5_bit; CF_CD1_direction en TRISB4_bit; CF_CE1_direction en TRISB3_bit; CF_A2_direction en TRISB2_bit; CF_A1_direction en TRISB1_bit;

sbit CF_A0_direction en TRISB0_bit; // fin de cf pinout ... Cf_Init (); // inicializar CF

Cf_Detect Prototipo Devoluciones

corto sin firma Cf_Detect ( void );  

1 - Si se detectó tarjeta CF 0 de lo contrario

Descripción

Comprueba la presencia de la tarjeta CF leyendo el chip detectpin.

Requiere

Los puertos MCU correspondientes deben inicializarse adecuadamente para la tarjeta CF. Ver Cf_Init .

Ejemplo

// Espere hasta que se inserte la tarjeta CF: hacer asm nop; while (! Cf_Detect ());

Cf_Enable Prototipo

void Cf_Enable ( void );

Devoluciones

Nada.

Descripción

Habilita el dispositivo. Se debe llamar a la rutina solo si ha deshabilitado el dispositivo por medio de la rutina Cf_Dable . Estas dos rutinas en conjunto le permiten liberar / ocupar la línea de datos cuando trabaja con múltiples dispositivos.

Requiere

Los puertos MCU correspondientes deben inicializarse adecuadamente para la tarjeta CF. Ver Cf_Init .

Ejemplo

// habilitar flash compacto Cf_Enable ();

Cf_Disable Prototipo

void Cf_Disable ( void );

Devoluciones

Nada.

Descripción

La rutina desactiva el dispositivo y libera las líneas de datos para otros dispositivos. Para volver a habilitar el dispositivo, llame a Cf_Enable . Estas dos rutinas en conjunto le permiten liberar / ocupar la línea de datos cuando trabaja con múltiples dispositivos.

Requiere

Los puertos MCU correspondientes deben inicializarse adecuadamente para la tarjeta CF. Ver Cf_Init .

Ejemplo

// deshabilitar flash compacto Cf_Disable ();

Cf_Read_Init Prototipo

void Cf_Read_Init ( dirección larga sin signo , sector_cuero corto sin firmar );

Devoluciones

Nada.

Descripción

Inicializa la tarjeta CF para lectura. Parámetros:  address: El primer sector en estar preparado para la operación de lectura.  sector_count: Número de sectores a ser preparados para la operación de lectura.

Requiere

Los puertos MCU correspondientes deben inicializarse adecuadamente para la tarjeta CF. Ver Cf_Init .

Ejemplo

// inicialice el flash compacto para leer desde el sector 590 Cf_Read_Init (590, 1);

Cf_Read_Byte Prototipo

corto sin firmar Cf_Read_Byte ( void );

Devoluciones

Devuelve un byte leído desde el búfer del sector Compact Flash. Nota:unsigned Se borra el byte más alto del valor de retorno.

Descripción

Lee un byte de la ubicación del búfer del sector Compact Flash actualmente señalado por los punteros de lectura internos. Estos punteros serán auto-escritos al leerlos.

Requiere

Los puertos MCU correspondientes deben inicializarse adecuadamente para la tarjeta CF. Ver Cf_Init . La tarjeta CF debe estar inicializada para la operación de lectura. Ver Cf_Read_Init .

Ejemplo

// Leer un byte de Compact Flash: Char Data; ... datos = Cf_Read_Byte ();

Cf_Write_Init Prototipo

void Cf_Write_Init ( dirección larga sin signo , sección corta sinsigno);

Devoluciones

Nada.

Descripción

Inicializa la tarjeta CF para escribir. Parámetros:  address: El primer sector en estar preparado para la escritura.  sectcnt: Número de sectores a preparar para la escritura.

Requiere

Los puertos MCU correspondientes deben inicializarse adecuadamente para la tarjeta CF. Ver Cf_Init .

Ejemplo

// inicialice el flash compacto para escribir en el sector 590 Cf_Write_Init (590, 1);

Cf_Write_Byte Prototipo

void Cf_Write_Byte (datos cortos sin firmar);

Devoluciones

Nada.

Descripción

Escribe un byte en la ubicación del búfer del sector Compact Flash actualmente señalado por la escritura de punteros. Estos punteros serán auto-escritos al leerlos. Cuando el búfer del sector está lleno, su contenido se transferirá al sector de memoria flash correspondiente. Parámetros:  data_: byte para ser escrito.

Requiere

Los puertos MCU correspondientes deben inicializarse adecuadamente para la tarjeta CF. Ver Cf_Init . La tarjeta CF debe estar inicializada para la operación de escritura. Ver Cf_Write_Init .

Ejemplo

datos de char_ = 0xAA; ... Cf_Write_Byte (data_);

Cf_Read_Sector Prototipo

void Cf_Read_Sector ( unsigned long sector_number, unsigned short * buffer);

Devoluciones

Nada.

Descripción

Lee un sector (512 bytes). Los datos de lectura se almacenan en el búfer proporcionado por el bufferparámetro. Parámetros:  sector_number: Sector a leer.  buffer: Búfer de datos de al menos 512 bytes de longitud.

Requiere

Los puertos MCU correspondientes deben inicializarse adecuadamente para la tarjeta CF. Ver Cf_Init .

Ejemplo

// leer datos cortos sin firmar del sector 22 [512]; ... Cf_Read_Sector (22, data);

Cf_Write_Sector Prototipo

void Cf_Write_Sector ( unsigned long sector_number, unsigned short* buffer);

Devoluciones

Nada.

Descripción

Escribe 512 bytes de datos proporcionados por el bufferparámetro en un sector de CF. Parámetros:  sector_number: Sector al que se escribirá.  buffer: Búfer de datos de 512 bytes de longitud.

Requiere

Los puertos MCU correspondientes deben inicializarse adecuadamente para la tarjeta CF. Ver Cf_Init .

Ejemplo

// escribir al sector 22 datos cortos sin firmar [512]; ... Cf_Write_Sector (22, datos);

Cf_Fat_Init Prototipo Devoluciones

corto sin firma Cf_Fat_Init ();   

0 - Si la tarjeta CF se detectó y se inicializó con

éxito 1 - si no se encontró el sector de arranque FAT16 255 - si la tarjeta no fue detectada

Descripción

Inicializa la tarjeta CF, lee el sector de arranque CF FAT16 y extrae los datos necesarios que necesita la biblioteca.

Requiere

Nada.

Ejemplo

// Inicia la biblioteca FAT si (! Cf_Fat_Init ()) {// Inicia la biblioteca FAT ... }

Cf_Fat_QuickFormat Prototipo

unsigned char Cf_Fat_QuickFormat ( char * cf_fat_label);

Devoluciones

Descripción



0 - Si se detectó una tarjeta CF, se formateó

 

correctamente y se inicializó. 1 - si el formato FAT16 no tuvo éxito 255 - si la tarjeta no fue detectada

Formatos a FAT16 e inicializa la tarjeta CF. Parámetros:  cf_fat_label:Etiqueta de volumen (11 caracteres de longitud). Si se proporcionan menos de 11 caracteres, la etiqueta se rellenará con espacios. Si se pasa una cadena nula, el volumen no se etiquetará.  

Nota : Esta rutina se puede utilizar en su lugar o junto con la rutina Cf_Fat_Init . Si la tarjeta CF ya contiene un sector de inicio válido, permanecerá sin cambios (excepto el campo de etiqueta de volumen) y solo se borrarán las tablas FAT y ROOT. Además, se establecerá la nueva etiqueta de volumen.

Requiere

Nada.

Ejemplo

// --- formatear e inicializar la biblioteca FAT if (! Cf_Fat_QuickFormat (& cf_fat_label)) { ... }

Cf_Fat_Assign Prototipo

Devoluciones

Descripción

corto sin signo Cf_Fat_Assign ( char * filename, charfile_cre_attr); 

0 Si el archivo no existe y no se crea ningún



archivo nuevo. 1 si el archivo ya existe o el archivo no existe pero se crea un nuevo archivo.

Asigna archivos para operaciones de archivos (leer, escribir, eliminar ...). Todas las operaciones de archivo subsiguientes se aplicarán sobre el archivo asignado. Parámetros:  filename:Nombre del archivo que debe asignarse para las operaciones de archivo. El nombre del archivo debe estar en formato DOS 8.3 (nombre_archivo.extensión). El nombre y la extensión del archivo serán rellenados automáticamente con espacios por la biblioteca si tienen menos de la longitud requerida (es decir, "mikro.tx" -> "mikro .tx"), por lo que el usuario no tiene que ocuparse de eso. El nombre del archivo y la extensión no distinguen entre mayúsculas y minúsculas. La biblioteca los convertirá automáticamente en



un caso adecuado, de modo que el usuario no tiene que ocuparse de eso. Además, para mantener la compatibilidad con la versión anterior de esta biblioteca, los nombres de los archivos se pueden ingresar como una cadena MAYÚSCULAS de 11 bytes de longitud sin caracteres de punto entre el nombre del archivo y la extensión (es decir, "MIKROELETXT" -> MIKROELE.TXT) . En este caso, los últimos 3 caracteres de la cadena se consideran una extensión de archivo. file_cre_attr: Creación de archivos y distintivos de atributos. Cada bit corresponde al atributo apropiado del archivo: Poco

Máscara

Descripción

0

0x01

Solo lectura

1

0x02

Oculto

2

0x04

Sistema

3

0x08

Etiqueta de volumen

4

0x10

Subdirectorio

5

0x20

Archivo

6

0x40

Dispositivo (solo uso interno, nunca encontrado en el disco)

0x80

Bandera de creación de archivo. Si el archivo no existe y se establece este indicador, se creará un nuevo archivo con el nombre especificado.

7

Nota: los nombres de archivo largos (LFN) no son compatibles. Requiere

La tarjeta CF y la biblioteca CF deben inicializarse para las operaciones de archivo. Ver Cf_Fat_Init .

Ejemplo

// crear archivo con atributos de archivo si no existe ya Cf_Fat_Assign ("MIKRO007.TXT", 0xA0);

Cf_Fat_Reset Prototipo

void Cf_Fat_Reset ( unsigned long * size);

Devoluciones

Nada.

Descripción

Abre el archivo actualmente asignado para su lectura. Parámetros:  size:búfer para almacenar el tamaño del archivo a. Después de que el archivo se haya abierto para leer, su tamaño se devuelve a través de este parámetro.

Requiere

La tarjeta CF y la biblioteca CF deben inicializarse para las operaciones de archivo. Ver Cf_Fat_Init . El archivo debe ser asignado previamente. Ver Cf_Fat_Assign .

Ejemplo

tamaño largo sin firmar ; ... Cf_Fat_Reset (tamaño);

Cf_Fat_Read Prototipo

void Cf_Fat_Read ( short * bdata sin signo);

Devoluciones

Nada.

Descripción

Lee un byte del archivo asignado actualmente abierto para leer. Tras la ejecución de la función, los punteros del archivo se establecerán en el siguiente carácter del archivo. Parámetros:  bdata:búfer para almacenar el byte de lectura a. A través de este parámetro, se devuelve el byte de lectura de esta función.

Requiere

La tarjeta CF y la biblioteca CF deben inicializarse para las operaciones de archivo. Ver Cf_Fat_Init . El archivo debe ser asignado previamente. Ver Cf_Fat_Assign . El archivo debe estar abierto para su lectura. Ver Cf_Fat_Reset .

Ejemplo

personaje char ... Cf_Fat_Read (& carácter);

Cf_Fat_Rewrite Prototipo

void Cf_Fat_Rewrite ();

Devoluciones

Nada.

Descripción

Abre el archivo actualmente asignado para la escritura. Si el archivo no está vacío, su contenido será borrado.

Requiere

La tarjeta CF y la biblioteca CF deben inicializarse para las operaciones de archivo. Ver Cf_Fat_Init .

El archivo debe ser asignado previamente. Ver Cf_Fat_Assign . Ejemplo

// abrir archivo para escribir Cf_Fat_Rewrite ();

Cf_Fat_Append Prototipo

void Cf_Fat_Append ();

Devoluciones

Nada.

Descripción

Abre el archivo asignado actualmente para anexar. Sobre esta función, los punteros del archivo de ejecución se colocarán después del último byte en el archivo, por lo que cualquier operación posterior de escritura del archivo comenzará desde allí.

Requiere

La tarjeta CF y la biblioteca CF deben inicializarse para las operaciones de archivo. Ver Cf_Fat_Init . El archivo debe ser asignado previamente. Ver Cf_Fat_Assign .

Ejemplo

// abrir archivo para agregar Cf_Fat_Append ();

Cf_Fat_Delete Prototipo

void Cf_Fat_Delete ();

Devoluciones

Nada.

Descripción

Borra el archivo actualmente asignado de la tarjeta CF.

Requiere

La tarjeta CF y la biblioteca CF deben inicializarse para las operaciones de archivo. Ver Cf_Fat_Init . El archivo debe ser asignado previamente. Ver Cf_Fat_Assign .

Ejemplo

// borrar el archivo actual Cf_Fat_Delete ();

Cf_Fat_Write Prototipo

void Cf_Fat_Write ( char * fdata, unsigned data_len);

Devoluciones

Nada.

Descripción

Escribe el número solicitado de bytes en el archivo asignado actualmente abierto para escritura. Parámetros:  fdata: Datos a escribir.  data_len: Número de bytes a escribir.

Requiere

La tarjeta CF y la biblioteca CF deben inicializarse para las operaciones de archivo. Ver Cf_Fat_Init . El archivo debe ser asignado previamente. Ver Cf_Fat_Assign . El archivo debe estar abierto para escritura. Consulte Cf_Fat_Rewrite o Cf_Fat_Append .

Ejemplo

char file_contents [42]; ... Cf_Fat_Write (file_contents, 42); // escribir datos en el archivo asignado

Cf_Fat_Set_File_Date Prototipo

void Cf_Fat_Set_File_Date ( unsigned int year, unsigned shortmonth, unsigned short day, unsigned short hours, unsigned shortminute, unsigned short seconds);

Devoluciones

Nada.

Descripción

Establece el sello de fecha / hora. Cualquier operación subsiguiente de escritura de archivos escribirá este sello en los atributos de hora / fecha del archivo asignado actualmente. Parámetros:  year:año atributo Valores válidos: 1980-2107.  month:atributo del mes. Valores válidos: 1-12  day:atributo del día. Valores válidos: 1-31  hours:Atributo de horas. Valores válidos: 0-23  mins:atributo de minutos. Valores válidos: 059.  seconds:atributo de segundos Valores válidos: 0-59.

Requiere

La tarjeta CF y la biblioteca CF deben inicializarse para las operaciones de archivo. Ver Cf_Fat_Init . El archivo debe ser asignado previamente. Ver Cf_Fat_Assign . El archivo debe estar abierto para escritura. Consulte Cf_Fat_Rewrite o Cf_Fat_Append .

Ejemplo

Cf_Fat_Set_File_Date (2005,9,30,17,41,0);

Cf_Fat_Get_File_Date Prototipo

void Cf_Fat_Get_File_Date ( unsigned int * year, unsigned short * month, unsigned short * day, unsigned short * hours, unsigned short* mins);

Devoluciones

Nada.

Descripción

Lee los atributos de hora / fecha del archivo asignado actualmente.

Parámetros:  year:buffer para almacenar el atributo del año a. Al ejecutarse la función, el atributo año se devuelve a través de este parámetro.  month:buffer para almacenar el atributo del mes a. A la ejecución de la función, el atributo del mes se devuelve a través de este parámetro.  day:buffer para almacenar el atributo del día a. A la ejecución de la función, el atributo día se devuelve a través de este parámetro.  hours:búfer para almacenar las horas atribuidas a. A la ejecución de la función, el atributo horas se devuelve a través de este parámetro.  mins:buffer para almacenar el atributo de minutos a. A la ejecución de la función, el atributo de minutos se devuelve a través de este parámetro. Requiere

La tarjeta CF y la biblioteca CF deben inicializarse para las operaciones de archivo. Ver Cf_Fat_Init . El archivo debe ser asignado previamente. Ver Cf_Fat_Assign .

Ejemplo

año sin firmar char mes, día, horas, minutos; ... Cf_Fat_Get_File_Date (& year, & month, & day, & hours, & mins);

Cf_Fat_Get_File_Date_Modified Prototipo

void Cf_Fat_Get_File_Date_Modified ( unsigned int * year, unsigned short * month, unsigned short * day, unsigned short * hours, unsigned short * mins);

Devoluciones

Nada.

Descripción

Recupera la fecha / hora de la última modificación del archivo asignado actualmente. Parámetros:  year:buffer para almacenar el año de modificación del atributo a. Tras la ejecución de la función, el atributo de modificación se devuelve a través de este parámetro.  month:buffer para almacenar el mes del atributo de modificación a. Tras la ejecución de la función, el mes de modificación del atributo se devuelve a través de este parámetro.  day:buffer para almacenar el día del atributo de modificación a. Tras la ejecución de la función, el atributo de modificación se devuelve a través de este parámetro.





hours:buffer para almacenar horas de

modificación del atributo a. Tras la ejecución de la función, se devuelve el atributo de modificación a través de este parámetro. mins:buffer para almacenar minutos de modificación del atributo a. Tras la ejecución de la función, el atributo de modificación de minutos se devuelve a través de este parámetro.

Requiere

La tarjeta CF y la biblioteca CF deben inicializarse para las operaciones de archivo. Ver Cf_Fat_Init . El archivo debe ser asignado previamente. Ver Cf_Fat_Assign .

Ejemplo

año sin firmar char mes, día, horas, minutos; ... Cf_Fat_Get_File_Date_Modified (& year, & month, & day, & hours, & mins);

Cf_Fat_Get_File_Size Prototipo

sin signo largo Cf_Fat_Get_File_Size ();

Devoluciones

Tamaño del archivo actualmente asignado en bytes.

Descripción

Esta función lee el tamaño del archivo actualmente asignado en bytes.

Requiere

La tarjeta CF y la biblioteca CF deben inicializarse para las operaciones de archivo. Ver Cf_Fat_Init . El archivo debe ser asignado previamente. Ver Cf_Fat_Assign .

Ejemplo

unsigned long my_file_size; ... my_file_size = Cf_Fat_Get_File_Size ();

Cf_Fat_Get_Swap_File Prototipo

Devoluciones

unsigned long Cf_Fat_Get_Swap_File ( unsigned long sectores_cnt, char * filename, char file_attr); 

 Descripción

Número del sector de inicio para el archivo de intercambio recién creado, si había suficiente espacio libre en la tarjeta CF para crear el archivo del tamaño requerido. 0 de lo contrario

Esta función se utiliza para crear un archivo de intercambio de nombre y tamaño predefinidos en el medio CF. Si ya existe un archivo con el nombre especificado en el medio,

la búsqueda de sectores consecutivos ignorará los sectores ocupados por este archivo. Por lo tanto, se recomienda borrar dicho archivo si existe antes de llamar a esta función. Si no se borra y todavía hay espacio suficiente para un nuevo archivo de intercambio, esta función lo eliminará después de asignar un nuevo espacio de memoria para un nuevo archivo de intercambio. El propósito del archivo de intercambio es hacer que la lectura y la escritura en el medio de CF sea lo más rápida posible, utilizando las funciones Cf_Read_Sector () y Cf_Write_Sector () directamente, sin dañar el sistema FAT. El archivo de intercambio se puede considerar como una "ventana" en el medio donde el usuario puede escribir / leer datos libremente. Su propósito principal en la biblioteca de mikroC es ser usado para la adquisición rápida de datos; cuando la adquisición crítica de tiempo ha finalizado, los datos pueden reescribirse en un archivo "normal" y formatearse de la manera más adecuada. Parámetros:  sectors_cnt: número de sectores consecutivos que el usuario desea que tenga el archivo de intercambio.  filename:Nombre del archivo que debe asignarse para las operaciones de archivo. El nombre del archivo debe estar en formato DOS 8.3 (nombre_archivo.extensión). El nombre y la extensión del archivo serán rellenados automáticamente con espacios por la biblioteca si tienen menos de la longitud requerida (es decir, "mikro.tx" -> "mikro .tx"), por lo que el usuario no tiene que ocuparse de eso. El nombre del archivo y la extensión no distinguen entre mayúsculas y minúsculas. La biblioteca los convertirá automáticamente en un caso adecuado, de modo que el usuario no tiene que ocuparse de eso. Además, para mantener la compatibilidad con la versión anterior de esta biblioteca, los nombres de los archivos se pueden ingresar como una cadena MAYÚSCULAS de 11 bytes de longitud sin caracteres de punto entre el nombre del archivo y la extensión (es decir, "MIKROELETXT" -> MIKROELE.TXT) . En este caso, los últimos 3 caracteres de la cadena se consideran una extensión de archivo.  file_attr:Creación de archivos y distintivos de atributos. Cada bit corresponde al atributo apropiado del archivo: Poco

Máscara

Descripción

0

0x01

Solo lectura

1

0x02

Oculto

2

0x04

Sistema

3

0x08

Etiqueta de volumen

4

0x10

Subdirectorio

5

0x20

Archivo

6

0x40

Dispositivo (solo uso interno, nunca encontrado en el disco)

7

0x80

No utilizado

Nota: los nombres de archivo largos (LFN) no son compatibles. Requiere

La tarjeta CF y la biblioteca CF deben inicializarse para las operaciones de archivo. Ver Cf_Fat_Init .

Ejemplo

// -------------- Intente crear un archivo de intercambio con atributo de archivo, cuyo tamaño será de al menos 1000 sectores. // Si tiene éxito, envía el No. de sector de inicio sobre UART de tamaño largo sin firmar ; ... size = Cf_Fat_Get_Swap_File (1000, "mikroE.txt", 0x20); si (tamaño) { UART1_Write (0xAA); UART1_Write (Lo (tamaño)); UART1_Write (Hola (tamaño)); UART1_Write (Mayor (tamaño)); UART1_Write (el más alto (tamaño)); UART1_Write (0xAA); }

Ejemplo de biblioteca Este ejemplo consta de varios bloques que demuestran diversos aspectos del uso de la biblioteca Cf_Fat16. Estos son:  Creación de nuevo archivo y escritura en él;  Abrir el archivo existente y volver a escribirlo (escribir desde el inicio del archivo);  Abrir el archivo existente y agregarle datos (escritura desde el final del archivo);  Abrir un archivo y leer datos desde él (enviarlo al terminal USART);  Creando y modificando varios archivos a la vez;  Lectura de contenidos de archivo;  Eliminar archivo (s);  Creación del archivo de intercambio (ver Ayuda para más detalles); Copiar código al portapapeles

// establecer Compact Flash pinout carbón Cf_Data_Port en PORTD; sbit CF_RDY en RB7_bit;

sbit CF_WE en LATB6_bit; // para escribir en el pin de salida siempre use latch (familia PIC18 ) sbit CF_OE en LATB5_bit; // para escribir en el pin de salida siempre use latch (familia PIC18 ) sbit CF_CD1 en RB4_bit; sbit CF_CE1 en LATB3_bit; // para escribir en el pin de salida siempre use latch (familia PIC18 ) sbit CF_A2 en LATB2_bit; // para escribir en el pin de salida siempre use latch (familia PIC18 ) sbit CF_A1 at LATB1_bit; // para escribir en el pin de salida siempre use latch (familia PIC18 ) sbit CF_A0 en LATB0_bit; // para escribir en el pin de salida siempre use latch (familia PIC18) sbit CF_RDY_direction en TRISB7_bit; sbit CF_WE_direction en TRISB6_bit; sbit CF_OE_direction en TRISB5_bit; sbit CF_CD1_direction en TRISB4_bit; sbit CF_CE1_direction en TRISB3_bit; sbit CF_A2_direction en TRISB2_bit; sbit CF_A1_direction en TRISB1_bit; sbit CF_A0_direction en TRISB0_bit; // fin de cf pinout const LINE_LEN = 39; char err_txt [20] = "FAT16 no encontrado"; char file_contents [LINE_LEN] = "XX CF FAT16 library de Anton Rieckertn"; char filename [14] = "MIKRO00x.TXT"; // Nombres de archivos sin firmar en bucle corto , loop2; sin firmar largo i, tamaño; búfer de char [512]; // UART1 escribe texto y nueva línea (retorno de carro + salto de línea) void UART1_Write_Line ( char * uart_text) { UART1_Write_Text (uart_text); UART1_Write (13); UART1_Write (10); } // Crea un nuevo archivo y escribe algunos datos en él vacío M_Create_New_File () { nombre de archivo [7] = 'A'; Cf_Fat_Set_File_Date (2005,6,21,10,35,0); // Establecer información de fecha y hora del archivo Cf_Fat_Assign (& filename, 0xA0); // Encuentra el archivo existente o crea uno nuevo Cf_Fat_Rewrite (); // Para borrar el archivo y comenzar con nuevos datos para (loop = 1; loop canCloseTCP = 0; // 0 - no cerrar socket // de lo contrario - cerrar socket if (localPort! = 80) solicitud web en el puerto 80 { retorno (0); }

// Escucho solo la

// obtener 10 primeros bytes solo de la solicitud, el resto no importa aquí para (i = 0; i > 4) * 10 + (día & 0x0F); // Transformar día mes = ((mes & 0x10) >> 4) * 10 + (mes & 0x0F); // transformar mes } // -------------------- Salida de valores a LCD void Display_Time () { Lcd_Chr (1, 6, (día / 10) + 48); // Imprimir decenas de dígitos de la variable del día Lcd_Chr (1, 7, (día% 10) + 48); // Imprimir un dígito del día variable Lcd_Chr (1, 9, (mes / 10) + 48); Lcd_Chr (1,10, (mes% 10) + 48); Lcd_Chr (1,15, año + 48); // Imprimir año variable (inicio del año 2010) Lcd_Chr Lcd_Chr Lcd_Chr Lcd_Chr Lcd_Chr Lcd_Chr

(2, 6, (2, 7, (2, 9, (2,10, (2,12, (2,13,

(horas / 10) + 48); (horas% 10) + 48); (minutos / 10) + 48); (minutos% 10) + 48); (segundos / 10) + 48); (segundos% 10) + 48);

} // ------------------ Ejecuta todo el proyecto void Init_Main () { TRISB = 0; PORTB = 0xFF; TRISB = 0xff; ANSEL = 0; ANSELH = 0; C1ON_bit = 0; C2ON_bit = 0; Soft_I2C_Init (); Lcd_Init (); Lcd_Cmd (_LCD_CLEAR); Lcd_Cmd (_LCD_CURSOR_OFF); Lcd_Out LCD Lcd_Chr Lcd_Chr Lcd_Chr Lcd_Out Lcd_Chr Lcd_Chr Lcd_Out }

(1,1, "Fecha:"); (1,8, '.'); (1,11, '.'); (1,16, '.'); (2,1, "Time:"); (2,8, ':'); (2,11, ':'); (1,12, "201");

// Configurar pines AN como E / S digital // Desactivar comparadores // // // //

Inicializar la comunicación Soft I2C Inicializar LCD Pantalla LCD clara apagar el cursor

// Preparar y generar texto estático en

// inicio del año 2010

// ----------------- Main procedimiento void main () {

Delay_ms (500); Init_Main ();

// Realizar la inicialización

while (1) { Read_Time (); Transform_Time (); Display_Time (); }

// // // //

Endless loop Tiempo de lectura de RTC (PCF8583) Formato de fecha y hora Preparar y mostrar en LCD

}

Software SPI Library El mikroC PRO para PIC proporciona rutinas para implementar la comunicación de software SPI . Estas rutinas son independientes del hardware y se pueden utilizar con cualquier MCU. El software SPI Library proporciona una comunicación fácil con otros dispositivos a través de SPI : convertidores A / D, convertidores D / A, MAX7219, LTC1290, etc. Configuración de la biblioteca:  SPI al modo maestro  Valor del reloj = 20 kHz.  Datos muestreados en el medio del intervalo.  Reloj en estado inactivo bajo.  Datos muestreados en el medio del intervalo.  Datos transmitidos de menor a mayor borde. La biblioteca configura SPI en el modo maestro, reloj = 20kHz, datos muestreados en el medio del intervalo, estado de inactividad del reloj bajo y datos transmitidos de borde bajo a alto. Importante: La biblioteca de software SPI implementa actividades basadas en el tiempo, por lo que las interrupciones deben desactivarse al usarlas.

Dependencias externas de la biblioteca de software SPI Las siguientes variables deben definirse en todos los proyectos usando la biblioteca de software SPI:

Descripció n:

Ejemplo:

extern sfr sbitSoftSpi_SDI;

Datos en línea.

sbit SoftSpi_SDI atRC4_bit;

extern sfr sbitSoftSpi_SDO;

Línea de salida de datos.

sbit SoftSpi_SDO atRC5_bit;

extern sfr sbitSoftSpi_CLK;

Línea de reloj

sbit SoftSpi_CLK atRC3_bit;

extern sfr sbitSoftSpi_SDI_Direct ion;

Dirección de los

sbitSoftSpi_SDI_Direction at TRISC 4_bit;

datos en el pin. extern sfr sbitSoftSpi_SDO_Direct ion;

Dirección del pin Data Out

sbitSoftSpi_SDO_Direction at TRISC 5_bit;

extern sfr sbitSoftSpi_CLK_Direct ion;

Dirección del pin del reloj.

sbitSoftSpi_CLK_Direction at TRISC 3_bit;

Rutinas de la biblioteca   

Soft_SPI_Init Soft_SPI_Leer Soft_SPI_Write

Soft_SPI_Init Prototipo

void Soft_SPI_Init ();

Devoluciones

Nada.

Descripción

Configura e inicializa el módulo de software SPI .

Requiere

Variables globales:  SoftSpi_SDI: Datos en linea  SoftSpi_SDO: Línea de datos  SoftSpi_CLK: Línea de reloj de datos  SoftSpi_SDI_Direction: Dirección de los datos en el pin.  SoftSpi_SDO_Direction: Dirección del pin de salida de datos  SoftSpi_CLK_Direction: Dirección del pin del reloj de datos Debe ser definido antes de usar esta función.

Ejemplo

// Conexiones del módulo de software SPI sbit SoftSpi_SDI en RC4_bit; sbit SoftSpi_SDO en RC5_bit; sbit SoftSpi_CLK en RC3_bit; sbit SoftSpi_SDI_Direction en TRISC4_bit; sbit SoftSpi_SDO_Direction en TRISC5_bit; sbit SoftSpi_CLK_Direction en TRISC3_bit; // Terminar las conexiones del módulo SPI del software ... Soft_SPI_Init (); // Init Soft_SPI

Soft_SPI_Leer

Prototipo

sin signo Soft_SPI_Read ( char sdata);

Devoluciones

Byte recibido a través del bus SPI.

Descripción

Esta rutina realiza 3 operaciones simultáneamente. Proporciona reloj para el bus SPI del software , lee un byte y envía un byte. Parámetros:  sdata: Datos a enviar.

Requiere

El SPI suave debe inicializarse antes de usar esta función. Ver la rutina Soft_SPI_Init .

Ejemplo

breve data_read sin firmar; char data_send; ... // Leer un byte y asignarlo a la variable data_read // (el byte data_send se enviará a través de SPI durante la operación de lectura) data_read = Soft_SPI_Read (data_send);

Soft_SPI_Write Prototipo

void Soft_SPI_Write ( char sdata);

Devoluciones

Nada.

Descripción

Esta rutina envía un byte a través del bus Software SPI . Parámetros:  sdata: Datos a enviar.

Requiere

El SPI suave debe inicializarse antes de usar esta función. Ver la rutina Soft_SPI_Init .

Ejemplo

// Escribir un byte en el bus Soft SPI Soft_SPI_Write (0xAA);

Ejemplo de biblioteca Este código demuestra el uso de rutinas de biblioteca para la comunicación Soft_SPI. Además, este ejemplo demuestra cómo trabajar con el convertidor D / A de 12 bits MCP4921 de Microchip. Copiar código al portapapeles

// Conexiones del módulo DAC sbit Chip_Select at RC0_bit; sbit SoftSpi_CLK en RC3_bit; sbit SoftSpi_SDI en RC4_bit; sbit SoftSpi_SDO en RC5_bit;

sbit Chip_Select_Direction sbit SoftSpi_CLK_Direction sbit SoftSpi_SDI_Direction sbit SoftSpi_SDO_Direction // Terminar las conexiones

en TRISC0_bit; en TRISC3_bit; en TRISC4_bit; en TRISC5_bit; del módulo DAC

valor int sin firmar ; void InitMain () { TRISA0_bit = 1; entrada TRISA1_bit = 1; entrada Chip_Select = 1; Chip_Select_Direction = 0; salida Soft_SPI_Init (); }

// Establecer el pin RA0 como // Establecer el pin RA1 como // Deselecciona DAC // Establecer el pin CS # como // Inicializar Soft_SPI

// incrementos del CAD (0..4095) -> tensión de salida (0..Vref) void DAC_Output ( unsigned int valueDAC) { Char temp; Chip_Select = 0; // Enviar alto byte temp = (valueDAC >> 8) & 0x0F; temp [3..0] temp | = 0x30; DAC, ver la hoja de datos de MCP4921 Soft_SPI_Write (temp); través de Soft SPI // Enviar Low Byte temp = valueDAC; temp [7..0] Soft_SPI_Write (temp); Soft SPI Chip_Select = 1;

// Seleccionar chip DAC // Almacene valueDAC [11..8] a // Definir la configuración de // Enviar alto byte a

// Almacenar valueDAC [7..0] a // Enviar byte bajo a través de // Deseleccionar chip DAC

} void main () { ANSEL = 0; digitales ANSELH = 0; C1ON_bit = 0; C2ON_bit = 0; InitMain (); principal valor = 2048; DAC da

// Configurar AN pins como // Desactivar comparadores // Realizar la inicialización // Cuando se inicia el programa, // la salida en el rango medio

while (1) { if ((RA0_bit) && (valor 0)) {

// Bucle sin fin // Si se presiona el botón RA0 // valor de incremento // Si se presiona el botón RA1

value--; }

// valor decremento

} DAC_Output (valor); Delay_ms (1); repetición de tecla } }

// Enviar valor al chip DAC // Ralentizar el ritmo de

Software UART Library El mikroC PRO for PIC proporciona rutinas para implementar la comunicación UART del software . Estas rutinas son independientes del hardware y se pueden utilizar con cualquier MCU. El software UART Library proporciona una comunicación fácil con otros dispositivos a través del protocolo RS232. Importante: la biblioteca de software UART implementa actividades basadas en el tiempo, por lo que las interrupciones deben deshabilitarse al usarlas.

Rutinas de la biblioteca    

Soft_UART_Init Soft_UART_Leer Soft_UART_escribir Soft_UART_Break

Soft_UART_Init Prototipo

Devoluciones

char Soft_UART_Init ( char * port, char rx_pin, char tx_pin, long firmadabaud_rate, char invertida);   

Descripción

2 - error, la velocidad en baudios solicitada es

demasiado baja 1 - Error, la velocidad de transmisión solicitada es demasiado alta. 0 - inicialización exitosa

Configura e inicializa el módulo de software UART . Parámetros:  port: puerto a utilizar.  rx_pin: establece rx_pin para ser utilizado.  tx_pin: establece tx_pin para ser utilizado.  baud_rate:velocidad de transmisión a establecer. La velocidad de transmisión máxima depende del reloj y las condiciones de trabajo de la MCU.  inverted:bandera de salida invertida. Cuando se establece en un valor distinto de cero, se utiliza la lógica invertida en la salida. Las rutinas de software de UART usan la rutina Delay_Cyc . Si la velocidad en baudios solicitada es demasiado baja, el parámetro calculado para la

llamada Delay_Cycexcede el Delay_Cycrango del argumento. Si la velocidad en baudios solicitada es demasiado alta, el error de redondeo del Delay_Cycargumento corrompe los tiempos de UART del software . Requiere

Nada.

Ejemplo

Esto inicializará el software UART y establecerá la comunicación a 14400 bps : error de char ; ... error = Soft_UART_Init (& PORTC, 7, 6, 14400, 0); // Inicializar Soft UART a 14400 bps

Soft_UART_Leer Prototipo

char Soft_UART_Read ( char * error);

Devoluciones

Byte recibido a través de UART.

Descripción

La función recibe un byte a través del software UART . Esta es una llamada a la función de bloqueo (espera el bit de inicio). El programador puede desbloquearlo llamando a la rutina Soft_UART_Break . Parámetros:  error: Bandera de error El código de error se devuelve a través de esta variable.  0 - No hay error  1 - Detener error de bit  255- abortar usuario, llamado Soft_UART_Break

Requiere

El software UART debe inicializarse antes de usar esta función. Ver la rutina Soft_UART_Init .

Ejemplo

char data_, error; ... // esperar hasta que se reciban los datos hacer data = Soft_UART_Read (& error); mientras (error); // Ahora podemos trabajar con datos: if (data_) {...}

Soft_UART_escribir Prototipo

void Soft_UART_Write ( char udata);

Devoluciones

Nada.

Descripción

Esta rutina envía un byte a través del bus de software UART . Parámetros:  udata: Datos a enviar.

Requiere

El software UART debe inicializarse antes de usar esta función. Ver la rutina Soft_UART_Init . Tenga en cuenta que durante la transmisión, el software UART no puede recibir datos; el protocolo de transferencia de datos debe configurarse de tal forma que se evite la pérdida de información.

Ejemplo

char some_byte = 0x0A; ... // Escribir un byte a través de Soft UART Soft_UART_Write (some_byte);

Soft_UART_Break Prototipo

void Soft_UART_Break ();

Devoluciones

Nada.

Descripción

Soft_UART_Read está bloqueando la rutina y puede bloquear el flujo del programa. Llamar a esta rutina desde la interrupción desbloqueará la ejecución del programa. Este mecanismo es similar a WDT . Nota: Las interrupciones se deben desactivar antes de usar las rutinas de Software UART nuevamente (vea la nota al principio de esta página).

Requiere

Nada.

Ejemplo

char data1, error, contador = 0; interrupción del vacío () { if (INTCON.T0IF) { if (contador> = 20) { Soft_UART_Break (); contador = 0; contador } else counter ++; incrementos

// reiniciar

// contador de

INTCON.T0IF = 0; // Borrar indicador de interrupción de desbordamiento del temporizador0 } } void main () {

OPTION_REG = 0x04; ajustado a 1:32

// preescalador TMR0

... if (Soft_UART_Init (& PORTC, 7, 6, 9600, 0) == 0) Soft_UART_Write (0x55); ... // prueba Soft_UART_Read con el mecanismo de prevención de bloqueo INTCON.GIE = 1; // Habilitación de interrupción global INTCON.T0IE = 1; // Habilitar la interrupción de desbordamiento del temporizador 0 data1 = Soft_UART_Read (& error); INTCON.GIE = 0; // Desactivación de la interrupción global }

Ejemplo de biblioteca Este ejemplo demuestra el intercambio de datos simple a través del software UART . Si MCU está conectada a la PC, puede probar el ejemplo desde la herramienta de terminal mikroC PRO for PIC USART . Copiar código al portapapeles

char i, error, byte_read;

// variables auxiliares

void main () { ANSEL = 0; digital ANSELH = 0; TRISB = 0x00; (señalización de error) PORTB = 0;

// Configurar pines AN como E / S

// Establecer PORTB como salida // No hay error

error = Soft_UART_Init (& PORTC, 7, 6, 14400, 0); // Inicializar Soft UART a 14400 bps si (error> 0) { PORTB = error; // Señalizar error inicial mientras que (1); // Detener programa } Delay_ms (100); para (i = 'z'; i> = 'A'; i--) { hasta 'A' Soft_UART_Write (i); Delay_ms (100); }

// Enviar bytes desde 'z'

while (1) { byte_read = Soft_UART_Read (& error); indicador de error si (error) un error PORTB = error; else

// Endless loop // Leer byte, luego probar el // Si se detectó // señalizarlo en PORTB

Soft_UART_Write (byte_read); detectado, devuelve el byte leído } }

// Si el error no fue

Biblioteca de sonidos El mikroC PRO para PIC proporciona una biblioteca de sonidos para proporcionar a los usuarios las rutinas necesarias para la señalización de sonido en sus aplicaciones. La generación de sonido necesita hardware adicional, como un altavoz piezoeléctrico (el ejemplo de la interfaz de un altavoz piezoeléctrico se encuentra en el esquema al final de esta página).

Rutinas de la biblioteca  

Sound_Init Sonido_jugar

Sound_Init Prototipo

void Sound_Init ( char * snd_port, char snd_pin);

Devoluciones

Nada.

Descripción

Configura el pin MCU apropiado para la generación de sonido. Parámetros:  snd_port: dirección del puerto de salida de sonido  snd_pin: pin de salida de sonido

Requiere

Nada.

Ejemplo

// Inicialice el pin RC3 para reproducir sonido Sound_Init (& PORTC, 3);

Sonido_jugar Prototipo

void Sound_Play ( unsigned freq_in_hz, unsigned duration_ms);

Devoluciones

Nada.

Descripción

Genera la señal de onda cuadrada en el pin apropiado. Parámetros:  freq_in_hz: frecuencia de señal en Hertz (Hz)  duration_ms: duración de la señal en milisegundos (ms) Nota: El rango de frecuencia está limitado por el parámetro Delay_Cyc . La frecuencia máxima que puede ser producida por esta función es Freq_max = Fosc/(80*3). La frecuencia mínima es Freq_min =

Fosc/(80*255). La frecuencia generada puede diferir del freq_in_hzparámetro debido a la aritmética de enteros.

Requiere

Para escuchar el sonido, necesita un altavoz piezoeléctrico (u otro hardware) en el puerto designado. Además, debe llamar a Sound_Init para preparar el hardware para la salida antes de usar esta función.

Ejemplo

// Reproducir sonido de 1KHz en 100ms de duración. Reproducción de sonido (1000, 100);

Ejemplo de biblioteca El ejemplo es una simple demostración de cómo usar la biblioteca de sonidos para reproducir tonos en un altavoz piezoeléctrico. Copiar código al portapapeles

void Tone1 () { Juego de sonido (659, 250); }

// Frecuencia = 659Hz, duración = 250ms

void Tone2 () { Juego de sonido (698, 250); }

// Frecuencia = 698Hz, duración = 250ms

void Tone3 () { Sound_Play (784, 250); } void Melody Tone1 (); Tone1 (); Tone1 (); Tone1 (); Tone1 (); Tone3 (); } void ToneA Juego de } void ToneC Juego de } tono vacío Juego de }

() { Tone2 Tone2 Tone2 Tone2 Tone2 Tone3

(); (); (); (); (); ();

Tone3 Tone3 Tone3 Tone3 Tone3 Tone2

// Frecuencia = 784Hz, duración = 250ms // Toca la melodía "Casa amarilla" (); Tone3 (); (); Tone3 (); (); (); Tone3 (); (); (); Tone2 (); Tone1 ();

() { sonido (880, 50); () { sonido (1046, 50); () { sonido (1318, 50);

void Melody2 () { sin signo i corto ; para (i = 9; i> 0; i--) { ToneA (); ToneC (); ToneE (); } } void main () { ANSEL = 0;

// Configurar AN pins como digitales

ANSELH = 0; C1ON_bit = 0; C2ON_bit = 0; TRISB = 0xF8;

// Desactivar comparadores // Configurar RB7..RB3 como entrada

Sound_Init (& PORTC, 3); Reproducción de sonido (880, 1000); 880Hz por 1 segundo while (1) { if (Button (& PORTB, 7,1,1)) Tone1 (); while (RB7_bit); if (Button (& PORTB, 6,1,1)) Tone2 (); while (RB6_bit); if (Button (& PORTB, 5,1,1)) Tone3 (); while (RB5_bit); if (Button (& PORTB, 4,1,1)) Melody2 (); while (RB4_bit); if (Button (& PORTB, 3,1,1)) Melodía(); while (RB3_bit); } }

Conexión HW

// Reproducir sonido a

// RB7 reproduce Tone1 // Espera a que se suelte el botón // RB6 reproduce Tone2 // Espera a que se suelte el botón // RB5 reproduce Tone3 // Espera a que se suelte el botón // RB4 reproduce Melody2 // Espera a que se suelte el botón // RB3 reproduce Melody // Espera a que se suelte el botón

Ejemplo de conexión a la biblioteca de sonidos

Biblioteca SPI El mikroC PRO para PIC proporciona una biblioteca para que se sienta cómodo con el trabajo SPI en modo Maestro. El PIC MCU puede comunicarse fácilmente con otros dispositivos a través de SPI : convertidores A / D, convertidores D / A, MAX7219, LTC1290, etc. Importante: 

Las rutinas SPI requieren que especifique el módulo que desea usar. Para seleccionar el SPI deseado , simplemente cambie la letra xen el prototipo para un número de 1a 2.



 

El número de módulos SPI por MCU difiere de un chip a otro. Por favor, lea la hoja de datos correspondiente antes de utilizar esta biblioteca. Algunas MCU tienen múltiples módulos SPI . La conmutación entre los módulos SPI en la biblioteca SPI se realiza mediante la función SPI_Set_Active (el módulo SPI debe inicializarse previamente). Algunas de las MCU no admiten la rutina SPIx_Init_Advanced . Por favor, consulte la hoja de datos correspondiente. Ciertas líneas SPI en algunas MCU de familia mejoradas PIC16 se pueden enrutar a través de pines alternativos. Estos pines se seleccionan configurando el registro APFCON y el registro TRIS apropiado.

Rutinas de la biblioteca     

SPIx_Init SPIx_Init_Advanced SPIx_Read SPIx_Write SPI_Set_Active

Rutinas genéricas  

SPI_Read SPI_Write

SPIx_Init Prototipo

void SPIx_Init ();

Devoluciones

Nada.

Descripción

Esta rutina configura y habilita el módulo SPI con las siguientes configuraciones:  modo maestro  reloj fosc / 4  reloj en estado inactivo bajo  datos transmitidos en el borde bajo al alto  datos de entrada muestreados en el medio del intervalo

Requiere

Necesitas PIC MCU con hardware integrado SPI .

Ejemplo

// Inicialice el módulo SPI1 con la configuración predeterminada SPI1_Init ();

SPIx_Init_Advanced Prototipo

anular SPIx_Init_Advanced ( unsigned short master_slav, corto sin signo data_sample, corto sin signo clock_idle, unsigned short transmit_edge);

Devolucio nes

Nada.

Descripció n

Configura e inicializa SPI . SPIx_Init o SPIx_Init_Advanced debe llamarse antes de usar otras funciones de la biblioteca SPI . Parámetros mode, data_sampley clock_idleconfigure el módulo SPI, y puede tener los siguientes valores: Descripción

Biblioteca predefinida const

Modo de trabajo SPI: Master clock = Fosc/4

_SPI_MASTER_OSC_DIV4

Master clock = Fosc/16

_SPI_MASTER_OSC_DIV16

Master clock = Fosc/64

_SPI_MASTER_OSC_DIV64

Master clock source TMR2

_SPI_MASTER_TMR2

Slave select enabled

_SPI_SLAVE_SS_ENABLE

Slave select disabled

_SPI_SLAVE_SS_DIS

Intervalo de muestreo de datos: Input data sampled in middle of interval

_SPI_DATA_SAMPLE_MIDDLE

Input data sampled at the end of interval

_SPI_DATA_SAMPLE_END

SPI reloj estado inactivo: Clock idle HIGH

_SPI_CLK_IDLE_HIGH

Clock idle LOW

_SPI_CLK_IDLE_LOW

Borde de transmisión: Data transmit on low to high edge

_SPI_LOW_2_HIGH

Data transmit on high to low edge

_SPI_HIGH_2_LOW

Requiere

Necesitas PIC MCU con hardware integrado SPI .

Ejemplo

// Establezca el módulo SPI1 en modo maestro, reloj = Fosc / 4, datos muestreados en el medio del intervalo, estado de inactividad del reloj bajo y datos transmitidos de borde bajo a alto: SPI1_Init_Advanced (_SPI_MASTER_OSC_DIV_DIV4_LIV_LIV_LAMPAD_PK_DIV_DID_SAM PLE_MIDDLE, _SPI_CLK_IDK_IDL__SIV_CLK_IDL__DIV4

SPIx_Read Prototipo

SPIx_Read corto sin firmar ( buffer corto sin firmar );

Devoluciones

Devuelve los datos recibidos.

Descripción

Lee un byte del bus SPI. Parámetros:  buffer: datos ficticios para la generación de reloj (consulte la hoja de datos del dispositivo para los detalles de implementación de los módulos SPI)

Requiere

Necesitas PIC MCU con hardware integrado SPI . SPI debe ser inicializado y la comunicación establecida antes de usar esta función. Consulte SPIx_Init_Advanced o SPIx_Init .

Ejemplo

toma corta , amortiguador; ... take = SPI1_Read (buffer);

SPIx_Write Prototipo

void SPIx_Write (datos cortos sin firmar);

Devoluciones

Nada.

Descripción

Escribe byte a través del bus SPI. Parámetros:



wrdata: datos a enviar

Requiere

Necesitas PIC MCU con hardware integrado SPI . SPI debe ser inicializado y la comunicación establecida antes de usar esta función. Consulte SPIx_Init_Advanced o SPIx_Init .

Ejemplo

// escribir un byte en el bus SPI carbón de amortiguación; ... SPI1_Write (buffer);

SPI_Set_Active Prototipo

void SPI_Set_Active ( char (* read_ptr) ( char ), void (* write_ptr) ( char ))

Devoluciones

Nada.

Descripción

Establece el módulo SPI activo que será utilizado por las rutinas SPI . Parámetros:  read_ptr: SPIx_Read handler  write_ptr: SPIx_Write manejador

Requiere

La rutina está disponible solo para MCU con dos módulos SPI. El módulo SPI usado debe inicializarse antes de usar esta función. Ver el SPIx_Init , SPIx_Init_Advanced

Ejemplo

SPI_Set_Active (& SPI2_Read, & SPI2_Write); // Establece el módulo SPI2 activo

SPI_Read Prototipo

SPI_Read corto sin firmar ( buffer corto sin firmar );

Devoluciones

Devuelve los datos recibidos.

Descripción

Lee un byte del bus SPI. Esta es una rutina genérica que utiliza el módulo SPI activo previamente activado por la rutina SPI_Set_Active . Parámetros:  buffer: datos ficticios para la generación de reloj (consulte la hoja de datos del dispositivo para los detalles de implementación de los módulos SPI)

Requiere

Necesitas PIC MCU con hardware integrado SPI . SPI debe ser inicializado y la comunicación establecida antes de usar esta función. Consulte SPIx_Init_Advanced o SPIx_Init .

Ejemplo

toma corta , amortiguador; ... take = SPI_Read (búfer);

SPI_Write Prototipo

void SPI_Write (datos cortos sin firmar);

Devoluciones

Nada.

Descripción

Escribe byte a través del bus SPI. Esta es una rutina genérica que utiliza el módulo SPI activo previamente activado por la rutina SPI_Set_Active . Parámetros:  wrdata: datos a enviar

Requiere

Necesitas PIC MCU con hardware integrado SPI . SPI debe ser inicializado y la comunicación establecida antes de usar esta función. Consulte SPIx_Init_Advanced o SPIx_Init .

Ejemplo

// escribir un byte en el bus SPI carbón de amortiguación; ... SPI_Write (buffer);

Ejemplo de biblioteca El código muestra cómo usar las funciones de la biblioteca SPI para la comunicación entre el módulo SPI de la MCU y el convertidor D / A de 12 bits MCP4921 de Microchip Copiar código al portapapeles

// Conexiones del módulo DAC sbit Chip_Select at RC0_bit; sbit Chip_Select_Direction en TRISC0_bit; // Terminar las conexiones del módulo DAC valor int sin firmar ; void InitMain () { TRISA0_bit = 1; entrada TRISA1_bit = 1; entrada Chip_Select = 1; Chip_Select_Direction = 0; salida SPI1_Init (); }

// Establecer el pin RA0 como // Establecer el pin RA1 como // Deselecciona DAC // Establecer el pin CS # como // Inicializar módulo SPI

// incrementos del CAD (0..4095) -> tensión de salida (0..Vref) void DAC_Output ( unsigned int valueDAC) { Char temp; Chip_Select = 0; // Enviar alto byte

// Seleccionar chip DAC

temp = (valueDAC >> 8) & 0x0F; temp [3..0] temp | = 0x30; consulte la hoja de datos MCP4921 SPI1_Write (temp); través de SPI // Enviar Low Byte temp = valueDAC; temp [7..0] SPI1_Write (temp); SPI Chip_Select = 1;

// Almacene valueDAC [11..8] a // Defina la configuración DAC, // Enviar alto byte a

// Almacene valueDAC [7..0] a // Enviar byte bajo a través de // Deseleccionar chip DAC

} void main () { ANSEL = 0; ANSELH = 0; InitMain (); principal valor = 2048; DAC da

// Realizar la inicialización // Cuando se inicia el programa, // la salida en el rango medio

while (1) { if ((RA0_bit) && (valor 0)) { value--; } } DAC_Output (valor); Delay_ms (1); repetición de tecla } }

Conexión HW

// Bucle sin fin // Si se presiona el botón RA0 // valor de incremento // Si se presiona el botón RA1 // valor decremento // Enviar valor al chip DAC // Ralentizar el ritmo de

Conexión SPI HW

Biblioteca extraíble SPI mikroC PRO para bibliotecas PIC > Bibliotecas de hardware >

Biblioteca extraíble SPI El módulo SPI Remappable está disponible con estas MCU: 18F2xJ11, 18F4xJ11, 18F2xJ50 y 18F4xJ50. mikroC PRO for PIC proporciona una biblioteca para inicializar el modo Esclavo y un trabajo cómodo con el modo Maestro. PIC puede comunicarse fácilmente con otros dispositivos a través de SPI : convertidores A / D, convertidores D / A, MAX7219, LTC1290, etc. Nota: Antes de usar esta biblioteca, asegúrese de que la Biblioteca de selección de pin periférico y la Biblioteca SPI estén marcadas en el Administrador de bibliotecas , y de que se hayan asignado los pines apropiados.

Árbol de la dependencia de la biblioteca Rutinas de la biblioteca    

SPI_Remappable_Init SPI_Remappable_Init_Advanced SPI_Remappable_Read SPI_Remappable_Write

SPI_Remappable_Init Prototipo

void SPI_Remappable_Init ();

Devolucion es

Nada.

Descripció n

Configura e inicializa el módulo SPI Remappable con la configuración predeterminada. SPI_Remappable_Init_Advancedo SPI_Remappable_I nit_Initdebe llamarse antes de usar otras funciones de SPI Remappable Library. Los ajustes predeterminados son:  modo maestro  reloj fosc / 4  reloj en estado inactivo bajo  datos transmitidos en el borde bajo al alto  datos de entrada muestreados en el medio del intervalo Nota: Antes de usar esta biblioteca, asegúrese de que la Biblioteca de selección de pin periférico esté marcada en el Administrador de bibliotecas y de que se hayan asignado los pines apropiados.

Requiere

Necesitará PIC MCU con SPI de hardware integrado y función extraíble.

Ejemplo

// Inicialice el módulo SPI Remappable con la configuración predeterminada SPI_Remappable_Init ();

SPI_Remappable_Init_Advanced Prototipo

void SPI_Remappable_Init_Advanced (b> master_slav unsigned short, corto sin signo data_sample, corto sin signo clock_idle, corto sin signotransmit_edge);

Devolucio nes

Nada.

Descripci ón

Configura e inicializa el módulo SPI Remappable. SPI_Remappable_Init_Advancedo SPI_Rema ppable_Initdebe llamarse antes de usar otras funciones de la Biblioteca SPI . Nota: Antes de usar esta biblioteca, asegúrese de que la Biblioteca de selección de pin periférico esté marcada en el Administrador de bibliotecas y de que se hayan asignado los pines apropiados. Parámetros mode, data_sample, clock_idley transmit_edgeconfigurar el módulo SPI, y pueden tener los siguientes valores: Descripción

Biblioteca predefinida const

Modo de trabajo SPI: Master clock = Fosc/4

_SPI_REMAPPABLE_MASTER_OSC_DIV4

Master clock = Fosc/16

_SPI_REMAPPABLE_MASTER_OSC_DIV16

Master clock = Fosc/64

_SPI_REMAPPABLE_MASTER_OSC_DIV64

Master clock source TMR2

_SPI_REMAPPABLE_MASTER_TMR2

Slave select enabled

_SPI_REMAPPABLE_SLAVE_SS_ENABLE

Slave select disabled

_SPI_REMAPPABLE_SLAVE_SS_DIS

Intervalo de muestreo de datos: Input data sampled in middle of interval

_SPI_REMAPPABLE_DATA_SAMPLE_MIDDLE

Input data sampled at the end of interval

_SPI_REMAPPABLE_DATA_SAMPLE_END

SPI reloj estado inactivo: Clock idle HIGH

_SPI_REMAPPABLE_CLK_IDLE_HIGH

Clock idle LOW

_SPI_REMAPPABLE_CLK_IDLE_LOW

Borde de transmisión: Data transmit

_SPI_REMAPPABLE_LOW_2_HIGH

on low to high edge

Data transmit on high to low edge

_SPI_REMAPPABLE_HIGH_2_LOW

Requiere

Necesita PIC MCU con SPI de hardware integrado y función extraíble.

Ejemplo

// Establecer el tipo de programa en el que el usuario está en la mitad del intervalo, el estado de ralentí del reloj y los datos transmitidos de menor a mayor borde: SPI_Remappable_Init_Advanced (_SPI_REMAPPABLE_MASTER_OSC_DIV4, _SPI_REMAPPABLE_DATA_SAM_PJP__PADER_P.P.P.P.P.P._P.P.

SPI_Remappable_Read Prototipo

SPI_Remappable_Read corto sin firmar ( buffer corto sin firmar );

Devoluciones

Devuelve los datos recibidos.

Descripción

Lee un byte del bus SPI. Parámetros:  buffer: datos ficticios para la generación de reloj (consulte la hoja de datos del dispositivo para los detalles de implementación de los módulos SPI)

Requiere

Necesita PIC MCU con SPI de hardware integrado y función extraíble. SPI debe ser inicializado y la comunicación establecida antes de usar esta función. Consulte SPI_Remappable_Init_Advanced o SPI_Remappable_Init .

Ejemplo

toma corta , amortiguador; ... take = SPI_Remappable_Read (búfer);

SPI_Remappable_Write Prototipo

void SPI_Remappable_Write (datos cortos sin firmar);

Devoluciones

Nada.

Descripción

Escribe un byte dataen SSPBUF e inmediatamente inicia la transmisión.

Requiere

Necesita PIC MCU con SPI de hardware integrado y función extraíble. SPI debe ser inicializado y la comunicación establecida antes de usar esta función. Consulte SPI_Remappable_Init_Advanced o SPI_Remappable_Init .

Ejemplo

SPI_Remappable_Write (1);

Biblioteca SPI Ethernet ENC28J60 El ENC28J60es un controlador Ethernet autónomo con un interfaz periférico serie estándar de la industria (SPI). Está diseñado para servir como una interfaz de red Ethernet para cualquier controlador equipado con SPI . El ENC28J60cumple con todas las especificaciones IEEE 802.3. Incorpora una serie de esquemas de filtrado de paquetes para limitar los paquetes entrantes. También proporciona un módulo DMA interno para un rápido rendimiento de datos y cálculos de suma de comprobación de IP asistidos por hardware . La comunicación con el controlador host se implementa a través de dos pines de interrupción y el SPI, con velocidades de datos de hasta 10 Mb / s. Se utilizan dos pines dedicados para el enlace de LED y la indicación de actividad de la red. Esta biblioteca está diseñada para simplificar el manejo del hardware subyacente ( ENC28J60). Funciona con cualquier PIC con SPI integrado y más de 4 Kb de memoria ROM. Se recomienda un reloj de 38 a 40 MHz para obtener un reloj SPI de 8 a 10 Mhz , de lo contrario, el PIC debe ser cronometrado por ENC28J60la salida del reloj debido a su error de silicio en el hardware SPI . Si intenta bajar la velocidad del reloj PIC, es posible que se cuelgue la placa o se pierdan algunas solicitudes. La biblioteca SPI Ethernet ENC28J60 admite:  Protocolo IPv4.  Solicitudes de ARP .  Solicitudes de eco ICMP .  Peticiones UDP  Solicitudes de TCP (sin pila, sin reconstrucción de paquetes).  Cliente ARP con caché.  Cliente DNS  Cliente UDP  Cliente DHCP  La fragmentación de paquetes NO es compatible. Importante: 









Debido a las limitaciones de RAM / Flash de PIC16, la biblioteca PIC16 NO tiene ARP , DNS , UDP y soporte de cliente DHCP implementado. La variable de biblioteca global SPI_Ethernet_userTimerSecse utiliza para realizar un seguimiento del tiempo para todas las implementaciones de clientes ( ARP , DNS , UDP y DHCP ). Es responsabilidad del usuario incrementar esta variable cada segundo en su código si se utiliza alguno de los clientes. Para los usuarios avanzados, hay archivos de encabezado ( "__EthEnc28j60.h"y "__EthEnc28j60Private.h") en las carpetas Uses \ P16 y Uses \ P18 del compilador con una descripción de todas las rutinas y variables globales, relevantes para el usuario, implementadas en la biblioteca SPI Ethernet ENC28J60. El módulo SPI de hardware apropiado debe inicializarse antes de usar cualquiera de las rutinas de la biblioteca SPI Ethernet ENC28J60. Consulte la biblioteca SPI . Para las MCU con dos módulos SPI es posible inicializar ambos y luego cambiar usando la SPI_Set_Active()rutina.

Árbol de la dependencia de la biblioteca

Dependencias externas de la biblioteca SPI Ethernet ENC28J60 Las siguientes variables deben definirse en todos los proyectos utilizando la biblioteca SPI Ethernet ENC28J60:

Descripci ón:

Ejemplos:

extern sfr sbitSPI_Ethernet_CS;

Pin de selección de chip ENC28J60 .

sbit SPI_Ethernet_CS atRC1_bit;

extern sfr sbitSPI_Ethernet_RST;

Perno de reinicio ENC28J60 .

sbit SPI_Ethernet_Rst atRC0_bit;

extern sfr sbitSPI_Ethernet_CS_Dir ection;

Dirección del pin de selección de chip ENC28J60 .

sbitSPI_Ethernet_CS_Direction at T RISC1_bit;

extern sfr sbitSPI_Ethernet_RST_Di rection;

Dirección del pin de reinicio ENC28J60 .

sbitSPI_Ethernet_Rst_Direction at TRISC0_bit;

Las siguientes rutinas deben definirse en todos los proyectos utilizando la biblioteca SPI Ethernet ENC28J60:

unsigned intSPI_Ethernet_UserTCP(unsigned char *remoteHost, unsigned int remotePort, unsigned intlocalPort, unsigned intreqLength, TEthPktFlags*flags);

Descripción:

Ejemplos:

Controlador de solicitud TCP.

Consulte el ejemplo de la biblioteca en la parte inferior de esta página para la implementación del código.

unsigned intSPI_Ethernet_UserUDP(unsigned char *remoteHost, unsigned int remotePort, unsigned intlocalPort, unsigned intreqLength, TEthPktFlags*flags);

Controlador de solicitudes UDP.

Consulte el ejemplo de la biblioteca en la parte inferior de esta página para la implementación del código.

Rutinas de la biblioteca PIC16 y PIC18:             

SPI_Ethernet_Init SPI_Ethernet_Enable SPI_Ethernet_Disable SPI_Ethernet_doPacket SPI_Ethernet_putByte SPI_Ethernet_putBytes SPI_Ethernet_putString SPI_Ethernet_putConstString SPI_Ethernet_putConstBytes SPI_Ethernet_getByte SPI_Ethernet_getBytes SPI_Ethernet_UserTCP SPI_Ethernet_UserUDP

Sólo PIC18:           

SPI_Ethernet_getIpAddress SPI_Ethernet_getGwIpAddress SPI_Ethernet_getDnsIpAddress SPI_Ethernet_getIpMask SPI_Ethernet_confNetwork SPI_Ethernet_arpResolve SPI_Ethernet_sendUDP SPI_Ethernet_dnsResolve SPI_Ethernet_initDHCP SPI_Ethernet_doDHCPLeaseTime SPI_Ethernet_renewDHCP

SPI_Ethernet_Init Prototipo

void SPI_Ethernet_Init ( unsigned char * mac, unsigned char * ip, unsigned charfullDuplex);

Devolucione s

Nada.

Descripción

Esta es la rutina del módulo MAC . Se inicializa el ENC28J60controlador. Esta función se divide internamente en 2 partes para ayudar al enlazador cuando se queda corto de memoria. ENC28J60 configuración del controlador (los parámetros que no se mencionan aquí están configurados por defecto):  recibir dirección de inicio búfer: 0x0000.  recibir el extremo del tope dirección: 0x19AD.  transmitir dirección de inicio búfer: 0x19AE.

transmitir la dirección final buffer: 0x1FFF. Memoria RAM de lectura / escritura de punteros en modo de incremento automático.  los filtros de recepción se establecen en los valores predeterminados: CRC + MAC Unic ast + MAC Broadcast en modo OR.  Control de flujo con cuadros de pausa de TX y RX en modo dúplex completo.  Los cuadros se rellenan a 60bytes + CRC .  El tamaño máximo de paquete se establece en 1518.  Intervalo entre paquetes de respaldo: 0x15en modo dúplex completo; 0x12en modo half duplex.  Intervalo entre paquetes sin respaldo: 0x0012en modo dúplex completo; 0x0C12en modo half duplex.  La ventana de colisión está configurada 63en modo semidúplex para acomodar algunas ENC28J60revisiones de errores de silicio.  La salida de CLKOUT está deshabilitada para reducir la generación de EMI.  loopback semidúplex desactivado.  Configuración de LED : por defecto (estado de enlace LEDA, actividad de enlace LEDB). Parámetros:  mac: Búfer RAM que contiene una dirección MAC válida .  ip: Búfer RAM que contiene una dirección IP válida .  fullDuplex:Interruptor de modo dúplex Ethernet. Valores válidos: 0(modo semidúplex) y 1(modo dúplex completo).  

Requiere

Variables globales :  

SPI_Ethernet_CS: Línea Chip Select SPI_Ethernet_CS_Direction: Dirección del pin

Chip Select SPI_Ethernet_RST: Restablecer línea SPI_Ethernet_RST_Direction: Dirección del pin de reinicio Debe ser definido antes de usar esta función.  

El módulo SPI necesita ser inicializado. Ver las rutinas SPIx_Init y SPIx_Init_Advanced . Ejemplo

#define SPI_Ethernet_HALFDUPLEX 0 #define SPI_Ethernet_FULLDUPLEX 1 // mE ethernet NIC pinout sfr sbit SPI_Ethernet_Rst en RC0_bit; sfr sbit SPI_Ethernet_CS en RC1_bit;

sfr sbit SPI_Ethernet_Rst_Direction en TRISC0_bit; sfr sbit SPI_Ethernet_CS_Direction en TRISC1_bit; // terminar las definiciones de ethernet NIC unsigned char myMacAddr [6] = {0x00, 0x14, 0xA5, 0x76, 0x19, 0x3f}; // mi dirección MAC no firmada char myIpAddr = {192, 168, 1, 60}; // mi dirección IP SPI1_Init (); SPI_Ethernet_Init (myMacAddr, myIpAddr, SPI_Ethernet_FULLDUPLEX);

SPI_Ethernet_Enable Prototip o

void SPI_Ethernet_Enable ( unsigned char enFlt);

Devoluci ones

Nada.

Descripci ón

Esta es la rutina del módulo MAC . Esta rutina permite el tráfico de red apropiado en el ENC28J60módulo por medio de sus filtros de recepción (unicast, multicast, broadcast, crc). El tipo específico de tráfico de red se habilitará si se establece un bit correspondiente del parámetro de entrada de esta rutina. Por lo tanto, se puede habilitar más de un tipo de tráfico de red al mismo tiempo. Para este propósito, las constantes de biblioteca predefinidas (consulte la tabla a continuación) se pueden ORed para formar el valor de entrada apropiado. Parámetros:  enFlt:tráfico de red / recibir banderas de filtro. Cada bit corresponde al filtro de tráfico / recepción de red apropiado: Po co

Másc ara

Descripción

Biblioteca predefinida const

0

0x01

Tráfico de difusión MAC / indicador de filtro de recepción. Cuan do se establece, el trá fico de transmisión MA C se habilitará.

_SPI_Ethernet_BR OADCAST

1

0x02

Tráfico de multidifusión M

_SPI_Ethernet_MU LTICAST

AC / indicador de filtro de recepción.Cuan do se establece, se habilitará el tráfico de multidifusión M AC .

2

0x04

no utilizado

ninguna

3

0x08

no utilizado

ninguna

4

0x10

no utilizado

ninguna

CRC marca de verificación. Cuando se establece, los paquetes con elcampo CRC n o válido se descartarán.

_SPI_Ethernet_CR C

5

0x20

6

0x40

no utilizado

ninguna

0x80

Tráfico de unidifusión MA C / indicador de filtro de recepción. Cuan do se establece, el trá fico de unidifusión MA C se habilitará.

_SPI_Ethernet_UN ICAST

7

Nota : 

El filtrado avanzado está disponible en el ENC28J60módulo, por ejemplo Pattern Match, Magic Packety Hash Tableno se puede habilitar con esta rutina. Además, todos

los filtros, excepto CRC , habilitados con esta rutina funcionarán en modo OR, lo que significa que el paquete se recibirá si alguno de los filtros habilitados lo acepta. Esta rutina cambiará la configuración del filtro de recepción sobre la marcha. De ninguna manera, no interferirá con la habilitación / inhabilitación de la lógica de recepción / transmisión o cualquier otra parte del ENC28J60módulo. El ENC28J60módulo debe estar correctamente configurado por medio de la rutina SPI_Ethernet_Init .



Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init .

Ejemplo

SPI_Ethernet_Enable (_SPI_Ethernet_CRC | _SPI_Ethernet_UNICAST); // habilitar el control de CRC y el tráfico de unidifusión

SPI_Ethernet_Disable Prototip o

void SPI_Ethernet_Disable ( unsigned char disFlt);

Devoluci ones

Nada.

Descripci ón

Esta es la rutina del módulo MAC . Esta rutina desactiva el tráfico de red apropiado en el ENC28J60módulo por medio de sus filtros de recepción (unicast, multicast, broadcast, crc). El tipo específico de tráfico de red se desactivará si se establece un bit correspondiente del parámetro de entrada de esta rutina. Por lo tanto, más de un tipo de tráfico de red se puede desactivar al mismo tiempo. Para este propósito, las constantes de biblioteca predefinidas (consulte la tabla a continuación) se pueden ORed para formar el valor de entrada apropiado. Parámetros:  disFlt:tráfico de red / recibir banderas de filtro. Cada bit corresponde al filtro de tráfico / recepción de red apropiado: Po co

Másc ara

Descripción

0

0x01

Tráfico de difusión MAC /

Biblioteca predefinida const _SPI_Ethernet_BR OADCAST

indicador de filtro de recepción. Cuan do se establece,el tráf ico de transmisión MA C se deshabilitará.

1

0x02

Tráfico de multidifusión M AC / indicador de filtro de recepción. Cuan do se establece, el trá fico de multidifusión M AC se deshabilitará.

2

0x04

no utilizado

ninguna

3

0x08

no utilizado

ninguna

4

0x10

no utilizado

ninguna

_SPI_Ethernet_MU LTICAST

CRC marca de verificación.

5

0x20

6

0x40

Cuando se establece, la verificación C RC se deshabilitará y se aceptarán los paquetes con el campo CRC n o válido .

no utilizado

_SPI_Ethernet_CR C

ninguna

7

0x80

Tráfico de unidifusión MA C / indicador de filtro de recepción. Cuan do se establece, el trá fico de unidifusión MA C se deshabilitará.

_SPI_Ethernet_UN ICAST

Nota : Filtrado avanzado disponible en el ENC28J60módulo, como Pattern Match, Magic Packety Hash Tableno puede ser deshabilitado por esta rutina. Esta rutina cambiará la configuración del filtro de recepción sobre la marcha. De ninguna manera, no interferirá con la habilitación / inhabilitación de la lógica de recepción / transmisión o cualquier otra parte del ENC28J60módulo. El ENC28J60módulo debe estar correctamente configurado por medio de la rutina SPI_Ethernet_Init .







Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init .

Ejemplo

SPI_Ethernet_Disable (_SPI_Ethernet_CRC | _SPI_Ethernet_UNICAST); // deshabilitar la comprobación de CRC y el tráfico de unidifusión

SPI_Ethernet_doPacket Prototipo Devoluciones

unsigned char SPI_Ethernet_doPacket ();









0 - tras el procesamiento exitoso de paquetes

(cero paquetes recibidos o recibidos paquete procesado exitosamente). 1- En caso de error de recepción o recibir corrupción del búfer. ENC28J60el controlador necesita ser reiniciado. 2- el paquete recibido no nos fue enviado (ni nuestra dirección IP , ni nuestra dirección de transmisión IP ). 3- El paquete IP recibido no fue IPv4.



4 - El paquete recibido fue de tipo desconocido

para la biblioteca. Descripción

Esta es la rutina del módulo MAC . Procesa el siguiente paquete recibido si existe. Los paquetes se procesan de la siguiente manera:  Las solicitudes de ARP e ICMP son contestadas automáticamente.  Tras la solicitud de TCP , se llama a la función SPI_Ethernet_UserTCPpara su posterior procesamiento.  cuando se solicita UDP , se llama a la función SPI_Ethernet_UserUDPpara su posterior procesamiento. Nota: SPI_Ethernet_doPacket debe llamarse tan a menudo como sea posible en el código del usuario.

Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init .

Ejemplo

if (SPI_Ethernet_doPacket () == 0) (1) { procesar paquetes recibidos ... }

//

SPI_Ethernet_putByte Prototipo

void SPI_Ethernet_putByte ( unsigned char v);

Devoluciones

Nada.

Descripción

Esta es la rutina del módulo MAC . Almacena un byte a la dirección señalada por el ENC28J60puntero de escritura actual ( EWRPT). Parámetros:  v: valor para almacenar

Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init .

Ejemplo

datos de char_; ... SPI_Ethernet_putByte (datos); // poner un byte en el búfer ENC28J60

SPI_Ethernet_putBytes Prototipo

void SPI_Ethernet_putBytes ( unsigned char * ptr, unsigned int n);

Devoluciones

Nada.

Descripción

Esta es la rutina del módulo MAC . Almacena el número solicitado de bytes en la ENC28J60RAM a partir de la ubicación actual del ENC28J60puntero de escritura ( EWRPT). Parámetros:  ptr: RAM buffer que contiene bytes para escribir en la ENC28J60 memoria RAM .  n: Número de bytes a escribir.

Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init .

Ejemplo

char * buffer = "mikroElektronika"; ... SPI_Ethernet_putBytes (buffer, 16); // poner una matriz de RAM en el búfer ENC28J60

SPI_Ethernet_putConstBytes Prototipo

void SPI_Ethernet_putConstBytes ( const unsigned char * ptr, unsigned int n);

Devoluciones

Nada.

Descripción

Esta es la rutina del módulo MAC . Almacena el número solicitado de const bytes en la ENC28J60RAM a partir de la ubicación actual del ENC28J60puntero de escritura ( EWRPT). Parámetros:  ptr:Const buffer que contiene bytes para escribir en la ENC28J60 memoria RAM .  n: Número de bytes a escribir.

Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init .

Ejemplo

const char * buffer = "mikroElektronika"; ... SPI_Ethernet_putConstBytes (buffer, 16); // poner una matriz const en el búfer ENC28J60

SPI_Ethernet_putString Prototipo

unsigned int SPI_Ethernet_putString ( unsigned char * ptr);

Devoluciones

Número de bytes escritos en la ENC28J60

memoria RAM .

Descripción

Esta es la rutina del módulo MAC . Almacena toda la cadena (excluyendo la terminación nula) en la ENC28J60 RAM a partir de la ubicación actual del ENC28J60puntero de escritura ( EWRPT). Parámetros:  ptr:cadena para escribir en la ENC28J60 memoria RAM .

Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init .

Ejemplo

char * buffer = "mikroElektronika"; ... SPI_Ethernet_putString (buffer); // poner una cadena de RAM en el búfer ENC28J60

SPI_Ethernet_putConstString Prototipo

unsigned int SPI_Ethernet_putConstString ( const unsigned char * ptr);

Devoluciones

Número de bytes escritos en la ENC28J60

Descripción

Esta es la rutina del módulo MAC . Almacena toda la cadena de const (excluyendo la terminación nula) en la ENC28J60 RAM a partir de la ubicación actual del ENC28J60puntero de escritura ( EWRPT). Parámetros:  ptr:cadena constante para escribir en la ENC28J60 memoria RAM .

Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init .

Ejemplo

const char * buffer = "mikroElektronika"; ... SPI_Ethernet_putConstString (buffer); // poner una cadena constante en el búfer ENC28J60

memoria RAM .

SPI_Ethernet_getByte Prototipo

unsigned char SPI_Ethernet_getByte ();

Devoluciones

Byte leído desde la ENC28J60

Descripción

Esta es la rutina del módulo MAC . Obtiene un byte desde la dirección apuntada por el ENC28J60puntero de lectura actual ( ERDPT).

memoria RAM .

Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init .

Ejemplo

char buffer; ... buffer = SPI_Ethernet_getByte (); // leer un byte desde el búfer ENC28J60

SPI_Ethernet_getBytes Prototipo

void SPI_Ethernet_getBytes ( unsigned char * ptr, unsigned int addr, unsigned int n);

Devoluciones

Nada.

Descripción

Esta es la rutina del módulo MAC . Obtiene el número de bytes asimilados de la ENC28J60 RAM a partir de la dirección dada. Si 0xFFFFse pasa el valor de como parámetro de dirección, la lectura comenzará desde la ubicación actual del ENC28J60puntero de lectura ( ERDPT). Parámetros:  ptr:búfer para almacenar bytes leídos de la ENC28J60 memoria RAM .  addr: ENC28J60 Dirección de inicio de RAM . Los valores válidos: 0.. 8192.  n: Número de bytes a leer.

Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init .

Ejemplo

búfer de char [16]; ... SPI_Ethernet_getBytes (buffer, 0x100, 16); // leer 16 bytes, comenzando desde la dirección 0x100

SPI_Ethernet_UserTCP Prototipo

Devoluciones

Descripción

unsigned int SPI_Ethernet_UserTCP ( unsigned char * remoteHost, unsigned int remotePort, unsigned int localPort, unsigned int reqLength, TEthPktFlags * flags);  

0 - No debe haber una respuesta a la solicitud.

Longitud del campo de datos de respuesta TCP / HTTP - de lo contrario.

Esta es la rutina del módulo TCP . Se llama internamente por la biblioteca. El usuario accede a la solicitud TCP / HTTP utilizando algunas de las rutinas SPI_Ethernet_get. El usuario coloca datos en el búfer de transmisión mediante el uso de algunas de las rutinas

SPI_Ethernet_put. La función debe devolver la longitud en bytes de la respuesta TCP / HTTP , o 0 si no hay nada que transmitir. Si no hay necesidad de responder a las solicitudes TCP / HTTP , simplemente defina esta función con return (0) como una sola declaración. Parámetros:  remoteHost:Dirección IP del cliente .  remotePort:puerto TCP del cliente .  localPort: Puerto al que se envía la solicitud.  reqLength: Longitud de campo de datos de solicitud TCP / HTTP .  flags: La estructura consistía en dos campos de bits: Copiar código al portapapeles

typedef struct { unsigned canCloseTCP: 1; // indicador que cierra el socket sin firmar isBroadcast: 1; // indicador que indica que el paquete IP se ha recibido a través de la dirección de difusión de subred (no se utiliza para la familia PIC16) } TEthPktFlags;

Nota: El código fuente de la función se proporciona con proyectos de ejemplo apropiados. El código debe ser ajustado por el usuario para lograr la respuesta deseada. Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init .

Ejemplo

Esta función es llamada internamente por la biblioteca y no debe ser llamada por el código del usuario.

SPI_Ethernet_UserUDP Prototipo

Devoluciones

Descripción

unsigned int SPI_Ethernet_UserUDP ( unsigned char * remoteHost, unsigned int remotePort, unsigned int destPort, unsigned int reqLength, TEthPktFlags * flags);  

0 - No debe haber una respuesta a la solicitud.

Longitud del campo de datos de respuesta UDP - de lo contrario.

Esta es la rutina del módulo UDP . Se llama internamente por la biblioteca. El usuario accede a la solicitud UDP utilizando algunas de las rutinas SPI_Ethernet_get. El usuario coloca datos en el búfer de transmisión mediante el uso de algunas de las rutinas SPI_Ethernet_put. La función debe devolver la longitud en

bytes de la respuesta UDP , o 0 si no hay nada que transmitir. Si no necesita responder a las solicitudes UDP , simplemente defina esta función con un retorno (0) como una sola declaración. Parámetros:  remoteHost:Dirección IP del cliente .  remotePort: Puerto del cliente.  destPort: Puerto al que se envía la solicitud.  flags: La estructura consistía en dos campos de bits: Copiar código al portapapeles

typedef struct { unsigned canCloseTCP: 1; // el indicador que cierra el socket TCP (no relevante para UDP) sin firma isBroadcast: 1; // indicador que indica que el paquete IP se ha recibido a través de la dirección de difusión de subred (no se utiliza para la familia PIC16) } TEthPktFlags;

Nota: El código fuente de la función se proporciona con proyectos de ejemplo apropiados. El código debe ser ajustado por el usuario para lograr la respuesta deseada. Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init .

Ejemplo

Esta función es llamada internamente por la biblioteca y no debe ser llamada por el código del usuario.

SPI_Ethernet_getIpAddress Prototipo

unsigned char * SPI_Ethernet_getIpAddress ();

Devoluciones

Puntero a la variable global con dirección IP .

Descripción

Esta rutina debe usarse cuando el servidor DHCP está presente en la red para obtener la dirección IP asignada . Nota: El usuario siempre debe copiar la dirección IP de la ubicación de RAM que devuelve esta rutina en su propio búfer de dirección IP . ¡Estas ubicaciones no deben ser alteradas por el usuario en ningún caso!

Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init . Disponible solo para MCU de la familia PIC18 .

Ejemplo

unsigned char ipAddr [4]; // búfer de direcciones IP de usuario ... memcpy (ipAddr, SPI_Ethernet_getIpAddress (), 4); // obtener la dirección IP

SPI_Ethernet_getGwIpAddress Prototipo

unsigned char * SPI_Ethernet_getGwIpAddress ();

Devoluciones

Puntero a la variable global que contiene la dirección IP de la puerta de enlace .

Descripción

Esta rutina debe usarse cuando el servidor DHCP está presente en la red para obtener la dirección IP de la puerta de enlace asignada . Nota: El usuario siempre debe copiar la dirección IP de la ubicación de RAM que devuelve esta rutina en su propio búfer de dirección IP de puerta de enlace . ¡Estas ubicaciones no deben ser alteradas por el usuario en ningún caso!

Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init . Disponible solo para MCU de la familia PIC18 .

Ejemplo

unsigned char gwIpAddr [4]; // búfer de direcciones IP de la puerta de enlace del usuario ... memcpy (gwIpAddr, SPI_Ethernet_getGwIpAddress (), 4); // obtener la dirección IP de la puerta de enlace

SPI_Ethernet_getDnsIpAddress Prototipo

unsigned char * SPI_Ethernet_getDnsIpAddress ()

Devoluciones

Puntero a la variable global que contiene la dirección IP del DNS .

Descripción

esta rutina debe usarse cuando el servidor DHCP está presente en la red para obtener la dirección IPasignada del DNS . Nota: El usuario siempre debe copiar la dirección IP de la ubicación de RAM que devuelve esta rutina en su propio búfer de dirección IP de DNS . ¡Estas ubicaciones no deben ser alteradas por el usuario en ningún caso!

Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init . Disponible solo para MCU de la familia PIC18 .

Ejemplo

unsigned char dnsIpAddr [4]; // búfer de dirección IP de usuario DNS ... memcpy (dnsIpAddr, SPI_Ethernet_getDnsIpAddress (), 4); // obtener la dirección del servidor DNS

SPI_Ethernet_getIpMask Prototipo

unsigned char * SPI_Ethernet_getIpMask ()

Devoluciones

Puntero a la variable global que contiene la máscara de subred IP .

Descripción

Esta rutina debe usarse cuando el servidor DHCP está presente en la red para recuperar la máscara de subred IP asignada . Nota: El usuario siempre debe copiar la dirección IP de la ubicación de RAM que devuelve esta rutina en su propio búfer de máscara de subred IP . ¡Estas ubicaciones no deben ser alteradas por el usuario en ningún caso!

Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init . Disponible solo para MCU de la familia PIC18 .

Ejemplo

unsigned char IpMask [4]; // búfer de máscara de subred IP de usuario ... memcpy (IpMask, SPI_Ethernet_getIpMask (), 4); // obtener máscara de subred IP

SPI_Ethernet_confNetwork

Prototipo

void SPI_Ethernet_confNetwork ( char * ipMask, char * gwIpAddr, char * dnsIpAddr);

Devoluciones

Nada.

Descripción

Configura los parámetros de red ( IP máscara de subred, puerta de enlace IP dirección, DNS IP dirección) cuando DHCP no se utiliza. Parámetros:  ipMask: Máscara de subred IP .  gwIpAddrDirección IP de la puerta de enlace .  dnsIpAddr: Dirección IP del DNS . Nota: los parámetros de red mencionados anteriormente deben configurarse con esta rutina solo si no se utiliza el módulo DHCP . De lo contrario, DHCP anulará esta configuración.

Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init . Disponible solo para MCU de la familia PIC18 .

Ejemplo

char ipMask [4] = {255, 255, 255, 0}; // máscara de red (por ejemplo: 255.255.255.0) char gwIpAddr [4] = {192, 168, 1, 1}; // dirección IP de la puerta de enlace (enrutador) char dnsIpAddr [4] = {192, 168, 1, 1}; // dirección IP del servidor DNS ... SPI_Ethernet_confNetwork (ipMask, gwIpAddr, dnsIpAddr); // establecer los parámetros de configuración de red

SPI_Ethernet_arpResolve Prototipo

Devoluciones

Descripción

unsigned char * SPI_Ethernet_arpResolve ( unsigned char * ip, unsigned char tmax); 

MAC dirección detrás de la IP Address - La solicitado IP dirección se resolvió.



0 de lo contrario

Esta es la rutina del módulo ARP . Envía una solicitud de ARP para una dirección IP determinada y espera la respuesta de ARP . Si se resolvió ladirección IP solicitada , se utiliza una entrada de efectivo ARP para almacenar la configuración. ARP Cash puede almacenar hasta 3 entradas. Para la estructura de efectivo de ARP , consulte

el "eth_enc28j60LibDef.h"archivo de encabezado en la carpeta Uses / P18 del compilador. Parámetros:  ip: Dirección IP a resolver.  tmax: tiempo en segundos para esperar una respuesta. Nota: Los servicios de Ethernet no se detienen mientras esta rutina espera la respuesta de ARP . Los paquetes entrantes se procesarán normalmente durante este tiempo. Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init . Disponible solo para MCU de la familia PIC18 .

Ejemplo

unsigned char IpAddr [4] = {192, 168, 1, 1}; // Dirección IP ... SPI_Ethernet_arpResolve (IpAddr, 5); // obtener la dirección MAC detrás de la dirección IP anterior, espere 5 segundos para la respuesta

SPI_Ethernet_sendUDP Prototipo

Devoluciones

unsigned char SPI_Ethernet_sendUDP ( unsigned char * destIP, unsigned int sourcePort, unsigned int destPort, unsigned char * pkt, unsigned intpktLen);  

1- El paquete UDP se envió con éxito. 0 de lo contrario

Descripción

Esta es la rutina del módulo UDP . Envía un paquete UDP en la red. Parámetros:  destIP:Dirección IP del host remoto .  sourcePort:Número de puerto de origen UDP local .  destPort:número de puerto UDP de destino .  pkt: paquete para transmitir.  pktLen: Longitud en bytes del paquete a transmitir.

Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init . Disponible solo para MCU de la familia PIC18 .

Ejemplo

unsigned char IpAddr [4] = {192, 168, 1, 1}; dirección IP remota ...

//

SPI_Ethernet_sendUDP (IpAddr, 10001, 10001, "Hola", 5); // enviar el mensaje de saludo a la dirección IP anterior, desde el puerto UDP 10001 al puerto UDP 10001

SPI_Ethernet_dnsResolve Prototipo

Devoluciones

unsigned char * SPI_Ethernet_dnsResolve ( unsigned char * host, unsigned chartmax); 

 Descripción

puntero a la ubicación donde se encuentra la dirección IP : se resolvió el nombre de host solicitado. 0 de lo contrario

Esta es la rutina del módulo DNS . Envía una solicitud de DNS para el nombre de host dado y espera la respuesta de DNS . Si el nombre de host solicitado se resolvió, su dirección IP se almacena en la variable global de la biblioteca y la rutina devuelve un puntero que contiene esta dirección. El puerto UDP53 se utiliza como puerto DNS . Parámetros:  host: Nombre de host a resolver.  tmax: tiempo en segundos para esperar una respuesta. Nota : 



Los servicios de Ethernet no se detienen mientras esta rutina espera la respuesta del DNS . Los paquetes entrantes se procesarán normalmente durante este tiempo. El usuario siempre debe copiar la dirección IP de la ubicación de RAM que devuelve esta rutina en su propio búfer de dirección IP del host resuelto . ¡Estas ubicaciones no deben ser alteradas por el usuario en ningún caso!

Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init . Disponible solo para MCU de la familia PIC18 .

Ejemplo

unsigned char * remoteHostIpAddr [4]; // búfer de direcciones IP del host del usuario ... // servidor SNTP: // Zurich, Suiza: Integrated Systems Lab, Swiss Fed. Inst. de tecnología // 129.132.2.21: swisstime.ethz.ch // Área de servicio: Suiza y Europa memcpy (remoteHostIpAddr, SPI_Ethernet_dnsResolve ("swisstime.ethz.ch", 5), 4);

SPI_Ethernet_initDHCP Prototipo

Devolucion es

Descripción

unsigned char SPI_Ethernet_initDHCP ( unsigned char tmax); 

1 - Los parámetros de red se obtuvieron con



éxito. 0 de lo contrario

Esta es la rutina del módulo DHCP . Envía una solicitud DHCP para los parámetros de red ( IP , puerta de enlace, direcciones DNS y máscara de subred IP ) y espera la respuesta de DHCP . Si los parámetros solicitados se obtuvieron con éxito, sus valores se almacenan en las variables globales de la biblioteca. Estos parámetros se pueden obtener utilizando las rutinas de obtención de IP de la biblioteca adecuadas :  SPI_Ethernet_getIpAddress busca la dirección IP .  SPI_Ethernet_getGwIpAddress busca la dirección IP de la puerta de enlace .  SPI_Ethernet_getDnsIpAddress - obtiene la direc ción IP del DNS .  SPI_Ethernet_getIpMask - buscar máscara de subred IP . El puerto UDP68 se utiliza como puerto de cliente DHCP y el puerto UDP67 se utiliza como puerto de servidor DHCP . Parámetros:  tmax: tiempo en segundos para esperar una respuesta. Nota : 



Los servicios de Ethernet no se detienen mientras esta rutina espera la respuesta del DNS . Los paquetes entrantes se procesarán normalmente durante este tiempo. Cuando se usa el módulo DHCP , la variable de biblioteca global SPI_Ethernet_userTimerSecse usa para mantener un registro del tiempo. Es responsabilidad del usuario incrementar esta variable cada segundo en su código.

Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init . Disponible solo para MCU de la familia PIC18 .

Ejemplo

...

SPI_Ethernet_initDHCP (5); // obtener la configuración de red del servidor DHCP, espere 5 segundos para obtener la respuesta ...

SPI_Ethernet_doDHCPLeaseTime Prototipo Devoluciones

unsigned char SPI_Ethernet_doDHCPLeaseTime ();



0 - El tiempo de arrendamiento aún no ha



expirado. 1 - El tiempo de arrendamiento ha expirado, es hora de renovarlo.

Descripción

Esta es la rutina del módulo DHCP . Se encarga del tiempo de concesión de la dirección IPal disminuir el contador de la biblioteca de tiempo de concesión global. Cuando este tiempo expire, es hora de contactar al servidor DHCP y renovar el contrato de arrendamiento.

Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init . Disponible solo para MCU de la familia PIC18 .

Ejemplo

mientras (1) { ... if (SPI_Ethernet_doDHCPLeaseTime ()) ... // es hora de renovar el arrendamiento de la dirección IP }

SPI_Ethernet_renewDHCP Prototipo

Devoluciones

unsigned char SPI_Ethernet_renewDHCP ( unsigned char tmax); 

1 - En caso de éxito (el tiempo de



arrendamiento fue renovado). 0 - De lo contrario (solicitud de renovación expirada).

Descripción

Esta es la rutina del módulo DHCP . Envía la solicitud de renovación del tiempo de concesión de la dirección IP al servidor DHCP . Parámetros:  tmax: tiempo en segundos para esperar una respuesta.

Requiere

El módulo de Ethernet tiene que ser inicializado. Ver SPI_Ethernet_Init .

Disponible solo para Ejemplo

MCU de la familia PIC18 .

mientras (1) { ... if (SPI_Ethernet_doDHCPLeaseTime ()) SPI_Ethernet_renewDHCP (5); // es hora de renovar el arrendamiento de la dirección IP, con 5 segundos para una respuesta ... }

Ejemplo de biblioteca Este código muestra cómo usar la mini biblioteca de Ethernet:  La junta responderá a las solicitudes de eco de ARP e ICMP.  La junta responderá a las solicitudes UDP en cualquier puerto:  devuelve la solicitud en caracteres superiores con un encabezado hecho de IP de host remoto y número de puerto  la placa responderá a las solicitudes HTTP en el puerto 80, método GET con rutas de acceso:  / volverá a la página principal de HTML  / s devolverá el estado del tablero como cadena de texto  / t0 ... / t7 cambiará de RD0 a RD7 bit y devolverá la página principal HTML  Todas las demás solicitudes devuelven también la página principal HTML. Copiar código al portapapeles

#include "__EthEnc28j60.h" // indicadores de configuración de dúplex #define Spi_Ethernet_HALFDUPLEX 0x00 // half duplex #define Spi_Ethernet_FULLDUPLEX 0x01 // full duplex // mE ehternet NIC pinout sfr sbit SPI_Ethernet_Rst en RC0_bit; sfr sbit SPI_Ethernet_CS en RC1_bit; sfr sbit SPI_Ethernet_Rst_Direction en TRISC0_bit; sfr sbit SPI_Ethernet_CS_Direction en TRISC1_bit; // terminar las definiciones de ethernet NIC / ************************************************** *********** * ROM cadenas constantes * / const unsigned char httpHeader [] = "HTTP / 1.1 200 OKnContent-type:"; encabezado HTTP const unsigned char httpMimeTypeHTML [] = "text / htmlnn"; HTML MIME type const unsigned char httpMimeTypeScript [] = "text / plainnn"; TEXT MIME type unsigned char httpMethod [] = "GET /"; / * * página web, dividida en 2 partes: * cuando se queda corto de ROM, los datos fragmentados se manejan de manera más eficiente por el enlazador * * esta página HTML llama a los tableros para obtener su estado y se construye con javascript * /

// // //

const char * indexPage = // Cambiar la dirección IP de la página para actualizar " Mini servidor web PIC + ENC28J60 Recargar

ADC
AN2
AN3


"; const char * indexPage2 = "
PORTB


PORTD
Esta es la solicitud HTTP # "; / *********************************** * RAM variables * / unsigned char myMacAddr [6] = {0x00, 0x14, 0xA5, 0x76, 0x19, 0x3f}; // mi dirección MAC no firmada char myIpAddr [4] = {192, 168, 20, 60}; // mi dirección IP unsigned char getRequest [15]; // HTTP request buffer unsigned char dyna [30]; // buffer para respuesta dinámica sin signo largo httpCounter = 0; // contador de peticiones HTTP / ******************************************* * funciones * / / *

* ponga la cadena constante apuntada por s al búfer de transmisión ENC. * / / * unsigned int putConstString (const char * s) { unsigned int ctr = 0; mientras (* s) { Spi_Ethernet_putByte (* s ++); ctr ++; } retorno (ctr); } * / / * * será mucho más rápido usar la rutina Spi_Ethernet_putConstString de la biblioteca * En lugar de la rutina putConstString anterior. Sin embargo, el código será un poco * un poco más grande. El usuario debe elegir entre tamaño y velocidad y elegir la implementación que * le encomienda mejor. Si elige ir con la definición putConstString anterior * la línea #define a continuación debe ser comentada. * * / #define putConstString SPI_Ethernet_putConstString / * * poner la cadena apuntada por s al búfer de transmisión ENC * / / * unsigned int putString (char * s) { unsigned int ctr = 0; mientras (* s) { Spi_Ethernet_putByte (* s ++); ctr ++; } retorno (ctr); } * / / * * será mucho más rápido usar la rutina Spi_Ethernet_putString de la biblioteca * En lugar de la rutina putString anterior. Sin embargo, el código será un poco * un poco más grande. El usuario debe elegir entre tamaño y velocidad y elegir la implementación que * le encomienda mejor. Si elige ir con la definición de putString anterior * la línea #define a continuación debe ser comentada. * * / #define putString SPI_Ethernet_putString / * * Esta función es llamada por la biblioteca. * el usuario accede a la solicitud HTTP mediante llamadas sucesivas a Spi_Ethernet_getByte () * el usuario pone datos en el búfer de transmisión mediante llamadas sucesivas a Spi_Ethernet_putByte () * la función debe devolver la longitud en bytes de la respuesta HTTP, o 0 si no hay nada que transmitir

* * Si no necesita responder a las solicitudes HTTP, * simplemente defina esta función con un retorno (0) como una sola declaración * * / unsigned int SPI_Ethernet_UserTCP ( unsigned char * remoteHost, unsigned int remotePort, unsigned int localPort, unsigned int reqLength, TEthPktFlags * flags) { unsigned int len = 0; // mi longitud de respuesta unsigned int i; // entero de propósito general // ¿deberíamos cerrar el socket TCP después de enviar la respuesta? // la biblioteca cierra el socket tcp de forma predeterminada si el indicador canClose no se restablece aquí // flags-> canClose = 0; // 0 - no cerrar socket // de lo contrario - cerrar socket if (localPort! = 80) solicitud web en el puerto 80 { retorno (0); }

// Escucho solo la

// obtener 10 primeros bytes solo de la solicitud, el resto no importa aquí para (i = 0; i canClose = 0; // 0 - no cerrar socket // de lo contrario - cerrar socket if (localPort! = 80) solicitud web en el puerto 80 { retorno (0); }

// Escucho solo la

// obtener 10 primeros bytes solo de la solicitud, el resto no importa aquí para (i = 0; i 512-pos) { * num = 512-pos; } más * num = cuenta; devuelve EXT_BUFFER + pos; } TFT_16bit_Set_Ext_Buffer (ReadExternalBuffer);

TFT_16bit_Set_Active Prototipo

void TFT_16bit_Set_Active ( void (* Set_Index_Ptr) ( sin signo corto ), void (* Write_Command_Ptr) ( sin signo corto ), void (* Write_Data_Ptr) ( sin signo int ));

Devoluciones

Nada.

Descripción

Esta función establece los punteros apropiados para las rutinas básicas definidas por el usuario con el fin de habilitar múltiples modos de trabajo.

Parámetros:  Set_Index_Ptr: Controlador Set_Index.  Write_Command_Ptr: _Write_Command handler.  Write_Data_Ptr: Write_Data handler. Requiere

Ninguna.

Ejemplo

Por favor, vea la hoja de datos del controlador para las descripciones del modo de trabajo. void Set_Index ( índice corto sin signo ) { // Establecer índice } void Write_Command ( cmd corto sin signo ) { // Write Command } void Write_Data ( unsigned int _data) { // Write Data } void main () { ... TFT_Set_Active (Set_Index, Write_Command, Write_Data); TFT_Init_HX8352A (320, 240); ... }

TFT_16bit_Set_Default_Mode Prototipo

void TFT_16bit_Set_Default_Mode ();

Devoluciones

Nada.

Descripción

Esta función establece TFT en el modo de trabajo predeterminado. Parámetros:  Ninguna.

Requiere

Ninguna.

Ejemplo

TFT_16bit_Set_Default_Mode (); TFT_Init_HX8352A (320, 240);

TFT_16bit_Set_Font Prototipo

void TFT_16bit_Set_Font ( const char far * activeFont, unsigned intfont_color, char font_orientation);

Devoluciones

Nada.

Descripción

Establece la fuente, su color y su orientación. Parámetros:  activeFont:fuente deseada Actualmente, solo se TFT_16bit_defaultFontadmite (Tahoma14x16).  font_color: establece el color de la fuente: Valor

Descripción

CL_AQUA_16bit

Color aguamarina

CL_BLACK_16bit

De color negro

CL_BLUE_16bit

Color azul

CL_FUCHSIA_16bit

Color fucsia

CL_GRAY_16bit

color gris

CL_GREEN_16bit

Color verde

CL_LIME_16bit

Color lima

CL_MAROON_16bit

Color marrón

CL_NAVY_16bit

azul marino

CL_OLIVE_16bit

Color verde oliva

CL_PURPLE_16bit

Color púrpura

CL_RED_16bit

color rojo

CL_SILVER_16bit

Color plata

CL_TEAL_16bit

De color verde azulado

CL_WHITE_16bit

el color blanco

CL_YELLOW_16bit 

Color amarillo

font_orientation: establece la orientación de

la fuente: Valor

Descripción

FO_HORIZONTAL_16bit

Orientación horizontal

FO_VERTICAL_16bit

Orientación vertical

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFTapropiada .

Ejemplo

TFT_16bit_Set_Font (TFT_16bit_defaultFont, CL_BLACK_16bit, FO_HORIZONTAL_16bit);

TFT_16bit_Set_Ext_Font Prototipo

void TFT_16bit_Set_Ext_Font ( unsigned long * activeFont, unsigned int font_color, char font_orientation);

Devoluciones

Nada.

Descripción

Establece la fuente, su color y su orientación. La fuente se encuentra en un recurso externo Parámetros:  activeFont:fuente deseada Este parámetro representa la dirección en el recurso externo desde donde comienzan los datos de la fuente.  font_color: establece el color de la fuente: Valor

Descripción

CL_AQUA_16bit

Color aguamarina

CL_BLACK_16bit

De color negro

CL_BLUE_16bit

Color azul

CL_FUCHSIA_16bit

Color fucsia

CL_GRAY_16bit

color gris



CL_GREEN_16bit

Color verde

CL_LIME_16bit

Color lima

CL_MAROON_16bit

Color marrón

CL_NAVY_16bit

azul marino

CL_OLIVE_16bit

Color verde oliva

CL_PURPLE_16bit

Color púrpura

CL_RED_16bit

color rojo

CL_SILVER_16bit

Color plata

CL_TEAL_16bit

De color verde azulado

CL_WHITE_16bit / td>

el color blanco

CL_YELLOW_16bit

Color amarillo

font_orientation: establece la orientación de

la fuente: Valor

Descripción

FO_HORIZONTAL_16bit

Orientación horizontal

FO_VERTICAL_16bit

Orientación vertical

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFT apropiada .

Ejemplo

TFT_16bit_Set_Ext_Font (173296, CL_BLACK_16bit, FO_HORIZONTAL_16bit);

TFT_16bit_Write_Char Prototipo

void TFT_16bit_Write_Char ( unsigned int c, unsigned int x, unsigned int y);

Devoluciones

Nada.

Descripción

Escribe un char en el TFT en las coordenadas (x, y).  c: char para ser escrito.  x: Posición char en el eje x.  y: Posición char en el eje y.

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFT apropiada .

Ejemplo

TFT_16bit_Write_Char ('A', 22,23);

TFT_16bit_Write_Text Prototipo

void TFT_16bit_Write_Text ( unsigned char * text, unsigned int x, unsigned inty);

Devoluciones

Nada.

Descripción

Escribe texto en el TFT en las coordenadas (x, y). Parámetros:  text: Texto a escribir.  x: Posición del texto en el eje x.  y: Posición del texto en el eje y.

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFT apropiada .

Ejemplo

TFT_16bit_Write_Text ("TFT DEMO de la biblioteca de 16 bits, ¡BIENVENIDO!", 0, 0);

TFT_16bit_Write_Const_Text Prototipo

void TFT_16bit_Write_Const_Text ( const far char * text, unsigned int x, unsigned int y);

Devoluciones

Nada.

Descripción

Escribe el texto ubicado en la memoria del programa en la TFT en las coordenadas (x, y). Parámetros:  text: Texto a escribir.  x: Posición del texto en el eje x.  y: Posición del texto en el eje y.

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFT apropiada .

Ejemplo

const char ctext [] = "mikroElektronika"; ... TFT_16bit_Write_Const_Text (ctext, 0, 0);

TFT_16bit_Fill_Screen Prototipo

void TFT_16bit_Fill_Screen ( sin signo int color);

Devoluciones

Nada.

Descripción

Rellena el bloque de memoria de pantalla con el color dado. Parámetros:  color: color a rellenar: Valor

Descripción

CL_AQUA_16bit

Color aguamarina

CL_BLACK_16bit

De color negro

CL_BLUE_16bit

Color azul

CL_FUCHSIA_16bit

Color fucsia

CL_GRAY_16bit

color gris

CL_GREEN_16bit

Color verde

CL_LIME_16bit

Color lima

CL_MAROON_16bit

Color marrón

CL_NAVY_16bit

azul marino

CL_OLIVE_16bit

Color verde oliva

CL_PURPLE_16bit

Color púrpura

CL_RED_16bit

color rojo

CL_SILVER_16bit

Color plata

CL_TEAL_16bit

De color verde azulado

CL_WHITE_16bit

el color blanco

CL_YELLOW_16bit

Color amarillo

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFT apropiada .

Ejemplo

TFT_16bit_Fill_Screen (CL_BLACK_16bit);

TFT_16bit_Dot Prototipo

void TFT_16bit_Dot ( int x, int y, unsigned int color);

Devoluciones

Nada.

Descripción

Dibuja un punto en el TFT en las coordenadas (x, y). Parámetros:  x: Posición del punto en el eje x.  y: Posición del punto en el eje y.  color:parámetro de color Valores válidos: Valor

Descripción

CL_AQUA_16bit

Color aguamarina

CL_BLACK_16bit

De color negro

CL_BLUE_16bit

Color azul

CL_FUCHSIA_16bit

Color fucsia

CL_GRAY_16bit

color gris

CL_GREEN_16bit

Color verde

CL_LIME_16bit

Color lima

CL_MAROON_16bit

Color marrón

CL_NAVY_16bit

azul marino

CL_OLIVE_16bit

Color verde oliva

CL_PURPLE_16bit

Color púrpura

CL_RED_16bit

color rojo

CL_SILVER_16bit

Color plata

CL_TEAL_16bit

De color verde azulado

CL_WHITE_16bit

el color blanco

CL_YELLOW_16bit

Color amarillo

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFT apropiada .

Ejemplo

TFT_16bit_Dot (50, 50, CL_BLACK_16bit);

TFT_16bit_Set_Pen Prototipo

void TFT_16bit_Set_Pen ( unsigned int pen_color, char pen_width);

Devoluciones

Nada.

Descripción

Establece los parámetros de color y grosor para dibujar elementos de línea, círculo y rectángulo. Parámetros:  pen_color: Establece el color. Valor

Descripción

CL_AQUA_16bit

Color aguamarina

CL_BLACK_16bit

De color negro



CL_BLUE_16bit

Color azul

CL_FUCHSIA_16bit

Color fucsia

CL_GRAY_16bit

color gris

CL_GREEN_16bit

Color verde

CL_LIME_16bit

Color lima

CL_MAROON_16bit

Color marrón

CL_NAVY_16bit

azul marino

CL_OLIVE_16bit

Color verde oliva

CL_PURPLE_16bit

Color púrpura

CL_RED_16bit

color rojo

CL_SILVER_16bit

Color plata

CL_TEAL_16bit

De color verde azulado

CL_WHITE_16bit

el color blanco

CL_YELLOW_16bit

Color amarillo

pen_width: conjuntos de espesor.

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFT apropiada .

Ejemplo

TFT_16bit_Set_Pen (CL_BLACK_16bit, 10);

TFT_16bit_Set_Brush Prototip o

void TFT_16bit_Set_Brush ( char brush_enabled, unsigned int brush_color, chargradient_enabled, char gradient_o rientation, unsigned intgradient_color_from, unsigned int gradient_color_to);

Devoluci ones

Nada.

Descripc ión

Establece el color y el degradado que se utilizarán para rellenar círculos o rectángulos. Parámetros:  brush_enabled: habilitar el relleno del cepillo.



Valor

Descripción

1

Habilitar relleno de pincel.

0

Desactivar el relleno del cepillo.

brush_color: establecer el color de relleno del

cepillo. Valor

Descripción

CL_AQUA_16bit

Color aguamarina

CL_BLACK_16bit

De color negro

CL_BLUE_16bit

Color azul

CL_FUCHSIA_16bit

Color fucsia

CL_GRAY_16bit

color gris

CL_GREEN_16bit

Color verde

CL_LIME_16bit

Color lima

CL_MAROON_16bit

Color marrón

CL_NAVY_16bit

azul marino

CL_OLIVE_16bit

Color verde oliva

CL_PURPLE_16bit

Color púrpura





CL_RED_16bit

color rojo

CL_SILVER_16bit

Color plata

CL_TEAL_16bit

De color verde azulado

CL_WHITE_16bit

el color blanco

CL_YELLOW_16bit

Color amarillo

gradient_enabled: habilitar gradiente Valor

Descripción

1

Habilitar gradiente.

0

Desactivar gradiente.

gradient_orientation: establece la orientación del

gradiente:



Valor

Descripción

LEFT_TO_RIGHT_16bit

Orientación de gradiente de izquierda a derecha

TOP_TO_BOTTOM

Orientación de gradiente de arriba a abajo

gradient_color_from: Establece el color de

gradiente inicial. Valor

Descripción

CL_AQUA_16bit

Color aguamarina

CL_BLACK_16bit

De color negro

CL_BLUE_16bit

Color azul

CL_FUCHSIA_16bit

Color fucsia



CL_GRAY_16bit

color gris

CL_GREEN_16bit

Color verde

CL_LIME_16bit

Color lima

CL_MAROON_16bit

Color marrón

CL_NAVY_16bit

azul marino

CL_OLIVE_16bit

Color verde oliva

CL_PURPLE_16bit

Color púrpura

CL_RED_16bit

color rojo

CL_SILVER_16bit

Color plata

CL_TEAL_16bit

De color verde azulado

CL_WHITE_16bit

el color blanco

CL_YELLOW_16bit

Color amarillo

gradient_color_to: establece el color degradado

final. Valor

Descripción

CL_AQUA_16bit

Color aguamarina

CL_BLACK_16bit

De color negro

CL_BLUE_16bit

Color azul

CL_FUCHSIA_16bit

Color fucsia

CL_GRAY_16bit

color gris

CL_GREEN_16bit

Color verde

CL_LIME_16bit

Color lima

CL_MAROON_16bit

Color marrón

CL_NAVY_16bit

azul marino

CL_OLIVE_16bit

Color verde oliva

CL_PURPLE_16bit

Color púrpura

CL_RED_16bit

color rojo

CL_SILVER_16bit

Color plata

CL_TEAL_16bit

De color verde azulado

CL_WHITE_16bit

el color blanco

CL_YELLOW_16bit

Color amarillo

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFTapropiada .

Ejemplo

// Habilitar degradado de color negro a blanco, orientación izquierda-derecha TFT_16bit_Set_Brush (0, 0, 1, LEFT_TO_RIGHT_16bit, CL_BLACK_16bit, CL_WHITE_16bit);

TFT_16bit_Line Prototipo

void TFT_16bit_Line ( int x1, int y1, int x2, int y2);

Devoluciones

Nada.

Descripción

Dibuja una línea desde (x1, y1) a (x2, y2). Parámetros:  x1: Coordenada x de la línea de inicio.  y1: Coordenada y del final de la línea.  x2: Coordenada x de la línea de inicio.



y2: Coordenada y del final de la línea.

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFT apropiada .

Ejemplo

TFT_16bit_Line (0, 0, 239, 127);

TFT_16bit_H_Line Prototipo

void TFT_16bit_H_Line ( int x_start, int x_end, int y_pos);

Devoluciones

Nada.

Descripción

Dibuja una línea horizontal en TFT. Parámetros:  x_start: Coordenada x de la línea de inicio.  x_end: Coordenada x del final de la línea.  y_pos: y coordenada de linea horizontal.

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFTapropiada .

Ejemplo

// Dibuja una línea horizontal entre los puntos (10,20) y (50,20) TFT_16bit_H_Line (10, 50, 20);

TFT_16bit_V_Line Prototipo

void TFT_16bit_V_Line ( int y_start, int y_end, int x_pos);

Devoluciones

Nada.

Descripción

Dibuja una línea vertical en TFT. Parámetros:  y_start: Coordenada y de la línea de inicio.  y_end: Coordenada y del final de la línea.  x_pos: coordenada x de linea vertical.

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFTapropiada .

Ejemplo

// Dibuja una línea vertical entre los puntos (10,5) y (10,25) TFT_16bit_V_Line (5, 25, 10);

TFT_16bit_Rectangle Prototip o

void TFT_16bit_Rectangle ( int x_upper_left, int y_upper_left, intx_bottom_rig ht, int y_bottom_right);

Devoluci ones

Nada.

Descripci ón

Dibuja un rectángulo en TFT. Parámetros:  x_upper_left: Coordenada x de la esquina superior izquierda del rectángulo.  y_upper_left: Coordenada y de la esquina superior izquierda del rectángulo.  x_bottom_right: Coordenada x de la esquina inferior derecha del rectángulo.  y_bottom_right: Coordenada y de la esquina inferior derecha del rectángulo.

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFT apropiada .

Ejemplo

TFT_16bit_Rectangle (20, 20, 219, 107);

TFT_16bit_Rectangle_Round_Edges Prototipo

void TFT_16bit_Rectangle_Round_Edges ( unsigned int x_upper_left, unsigned int y_upper_left, unsigned int x_bottom_right, unsigned int y_bottom_right, unsigned int round_radius);

Devoluciones

Nada.

Descripción

Dibuja un borde redondeado rectángulo en TFT. Parámetros:  x_upper_left: Coordenada x de la esquina superior izquierda del rectángulo.  y_upper_left: Coordenada y de la esquina superior izquierda del rectángulo.  x_bottom_right: Coordenada x de la esquina inferior derecha del rectángulo.  y_bottom_right: Coordenada y de la esquina inferior derecha del rectángulo.  round_radius: Radio del borde redondeado.

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFT apropiada .

Ejemplo

TFT_16bit_Rectangle_Round_Edges (20, 20, 219, 107, 12);

TFT_16bit_Circle

Prototipo

void TFT_16bit_Circle ( int x_center, int y_center, int radius);

Devoluciones

Nada.

Descripción

Dibuja un círculo en TFT. Parámetros:  x: Coordenada x del centro del círculo.  y: Y coordenada del centro del círculo.  r: tamaño del radio.

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFT apropiada .

Ejemplo

TFT_16bit_Circle (120, 64, 110);

TFT_16bit_Image Prototipo

void TFT_16bit_Image ( sin signo int izquierda, sin signo intarriba, código constante hasta ahora sin firmar * imagen corta , sin signo , extensión corta );

Devoluciones

Nada.

Descripción

Muestra una imagen en una ubicación deseada. Parámetros:  left: Posición del borde izquierdo de la imagen.  top:Posición del borde superior de la imagen.  image:Imagen a mostrar. La matriz de mapa de bits se encuentra en la memoria de código.  stretch: estira la imagen por un factor dado (si es 2, doblará la imagen).

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFT apropiada .

Ejemplo

TFT_16bit_Image (0, 0, imagen, 1);

TFT_16bit_Ext_Image Prototipo

void TFT_16bit_Ext_Image ( sin signo int izquierda, sin signo intarriba, sin firmar imagen larga , sin signo estiramiento corto );

Devoluciones

Nada.

Descripción

Muestra una imagen de un recurso externo en una dirección deseada. Parámetros:  left: Posición del borde izquierdo de la imagen.  top:Posición del borde superior de la imagen.  image:Imagen a mostrar. Este parámetro representa la dirección en el recurso externo desde donde comienzan los datos de la imagen.  stretch: estira la imagen por un factor dado (si es 2, doblará la imagen).

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFT apropiada .

Ejemplo

TFT_16bit_Image (0, 0, 153608, 1);

TFT_16bit_Partial_Image Prototipo

void TFT_16bit_Partial_Image ( sin signo int izquierda, sin signo int arriba, sin signo int ancho, sin signo int alto, código const hasta ahora sin signo imagen corta *, sin signo corto tramo);

Devoluciones

Nada.

Descripción

Muestra un área parcial de la imagen en una ubicación deseada. Parámetros:  left: coordenada izquierda de la imagen.  top: Coordenada superior de la imagen.  width: ancho de la imagen deseada.  height: altura deseada de la imagen.  image:Imagen a mostrar. La matriz de mapa de bits se encuentra en la memoria de código.  stretch: estira la imagen por un factor dado (si es 2, doblará la imagen).

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFT apropiada .

Ejemplo

// Dibuja una parte 10x15 de la imagen comenzando desde la esquina superior izquierda en la coordenada (10,12) TFT_16bit_Partial_Image (10, 12, 10, 15, imagen, 1);

TFT_16bit_Ext_Partial_Image

Prototipo

void TFT_16bit_Ext_Partial_Image ( sin signo int izquierda, sin signo int arriba, sin signo int ancho, sin signo int altura, sin signo larga imagen, sin signo corto tramo);

Devoluciones

Nada.

Descripción

Muestra un área parcial de la imagen, ubicada en un recurso externo, en una ubicación deseada de la pantalla. Parámetros:  left: coordenada izquierda de la imagen.  top: Coordenada superior de la imagen.  width: ancho de la imagen deseada.  height: altura deseada de la imagen.  image:Imagen a mostrar. Este parámetro representa la dirección en el recurso externo desde donde comienzan los datos de la imagen.  stretch: estira la imagen por un factor dado (si es 2, doblará la imagen).

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFT apropiada .

Ejemplo

TFT_16bit_Ext_Partial_Image (159,0,160,120,0,1);

TFT_16bit_Image_Jpeg Prototipo

Devoluciones

char TFT_16bit_Image_Jpeg ( unsigned int left, unsigned int top, code const lejos unsigned short * image); 

0 - Si la imagen está cargada y se muestra con



éxito. 1 - si se produjo un error.

Descripción

Muestra una imagen JPEG en una ubicación deseada. Parámetros:  left: coordenada izquierda de la imagen.  top: Coordenada superior de la imagen.  image:Imagen a mostrar. La matriz de mapa de bits se encuentra en la memoria de código.

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFT apropiada .

Ejemplo

TFT_16bit_Image_Jpeg (0, 0, imagen);

TFT_16bit_RGBToColor16bit

Prototipo

unsigned int TFT_16bit_RGBToColor16bit ( char rgb_red, charrgb_green, char rgb_blue);

Devoluciones

Devuelve un valor de color en el siguiente orden de bits: 5 bits de color rojo, 6 bits de color verde y 5 bits de color azul.

Descripción

Convierte el formato 5: 6: 5 RGB en formato de color verdadero. Parámetros:  rgb_red: Componente rojo de la imagen.  rgb_green: Componente verde de la imagen.  rgb_blue: Componente azul de la imagen.

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFT apropiada .

Ejemplo

color16 = TFT_16bit_RGBToColor16bit (150, 193, 65);

TFT_16bit_Color16bitToRGB Prototipo

void TFT_16bit_Color16bitToRGB ( sin signo int color, char * rgb_red, char * rgb_green, char * rgb_blue);

Devoluciones

Nada.

Descripción

Convierte el color verdadero en formato 5: 6: 5 RGB. Parámetros:  color: Color verdadero para convertir.  rgb_red: Componente rojo del color de entrada.  rgb_green: Componente verde del color de entrada.  rgb_blue: Componente azul del color de entrada.

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFTapropiada .

Ejemplo

TFT_16bit_Color16bitToRGB (start_color, & red_start, & green_start, & blue_start);

TFT_16bit_Rotate_180 Prototipo

void TFT_16bit_Rotate_180 ( char rotate );

Devoluciones

Nada.

Descripción

Gira la pantalla TFT. Parámetros:  rotate:Parámetro para pantalla giratoria. Valores válidos:  0: la pantalla no se girará.  1 - la pantalla girará 180 grados.

Requiere

El módulo TFT necesita ser inicializado. Por favor, vea la rutina de inicialización TFT apropiada .

Ejemplo

// Girar la pantalla TFT de 180 grados TFT_16bit_Rotate_180 (1); // Inicializar la pantalla TFT TFT_Init_HX8352A (240, 320);

Biblioteca de panel táctil El mikroC PRO para PIC proporciona una biblioteca para trabajar con el panel táctil.

Árbol de la dependencia de la biblioteca Dependencias externas de la biblioteca del panel táctil Las siguientes variables deben definirse en todos los proyectos usando la Biblioteca de Panel Táctil:

Descripción :

Ejemplo:

extern sfr sbit DriveA;

Línea DriveA.

sbit DriveA atRC0_bit;

extern sfr sbit DriveB;

Línea DriveB.

sbit DriveB atRC1_bit;

extern sfr sbitDriveA_Direction ;

Dirección del pin DriveA.

sbitDriveA_Direction at TRISC0_bit ;

extern sfr sbitDriveB_Direction ;

Dirección del pin DriveB.

sbitDriveB_Direction at TRISC1_bit ;

Rutinas de la biblioteca        

TP_Init TP_Set_ADC_Threshold TP_Press_Detect TP_Get_Coordinates TP_Calibrate_Bottom_Left TP_Calibrate_Upper_Right TP_Get_Calibration_Consts TP_Set_Calibration_Consts

TP_Init

Prototipo

void TP_Init ( unsigned int display_width, unsigned intdisplay_height, char readX_ChNo, char readY_ChN o);

Descripción

Inicializar panel táctil. El valor umbral predeterminado del panel táctil ADC se establece en 3900.

Parámetros

   

display_width: establecer el ancho de

visualización. display_height: establecer la altura de visualización. readX_ChNo:lea la coordenada X del canal ADC deseado . readY_ChNo:lea la coordenada Y del canal ADC deseado .

Devolucione s

Nada.

Requiere

Antes de llamar a esta función inicialice el módulo ADC .

Ejemplo

ADC_Init (); ADC TP_Init (128, 64, 6, 7); táctil, dimensiones 128x64

// Initalizar el módulo // Inicializar panel

TP_Set_ADC_Threshold Prototipo

void TP_Set_ADC_Threshold ( umbral int sin signo );

Descripción

Establezca un valor de umbral ADC personalizado , llame a esta función después TP_Init.

Parámetros



threshold:valor de umbral ADC personalizado .

Devoluciones

Nada.

Requiere

TP_Init Tiene que ser llamado antes de usar esta rutina.

Ejemplo

TP_Set_ADC_Threshold (3900); umbral ADC del panel táctil

TP_Press_Detect Prototipo

char TP_Press_Detect ();

// Establecer el

Descripción

Detecta si el panel táctil ha sido presionado.

Parámetros

Ninguna.

Devoluciones

 

1 - Si se presiona el panel táctil. 0 de lo contrario

Requiere

Variables globales :  DriveA: DriveA.  DriveB: DriveB.  DriveA_Direction: Dirección del pin DriveA.  DriveB_Direction: Dirección del pin DriveB. Debe ser definido antes de usar esta función.

Ejemplo

// Conexiones del módulo del panel táctil sbit DriveA at RC0_bit; sbit DriveB en RC1_bit; sbit DriveA_Direction en TRISC0_bit; sbit DriveB_Direction at TRISC1_bit; // Terminar las conexiones del módulo del panel táctil if (TP_Press_Detect ()) { ... }

TP_Get_Coordinates Prototipo

char TP_Get_Coordinates ( unsigned int * x_coordinate, unsigned int * y_coordinate);

Descripción

Obtén las coordenadas del panel táctil y guárdalas en x_coordinatey y_coordinateparámetros.

Parámetros

Devoluciones



x_coordinate: X coordenada del lugar de



contacto. y_coordinate: Y coordenada del lugar de contacto.



0 - si la lectura está dentro del rango de



dimensión de visualización. 1 - si la lectura está fuera del rango de dimensión de la pantalla.

Requiere

Nada.

Ejemplo

if (TP_Get_Coordinates (& x_coord, & y_coord) == 0) { ... }

TP_Calibrate_Bottom_Left Prototipo

void TP_Calibrate_Bottom_Left ();

Descripción

Calibrar la esquina inferior izquierda del panel táctil.

Parámetros

Ninguna.

Devoluciones

Nada.

Requiere

Nada.

Ejemplo

TP_Calibrate_Bottom_Left (); esquina inferior izquierda

// Calibración de la

TP_Calibrate_Upper_Right Prototipo

void TP_Calibrate_Upper_Right ();

Descripción

Calibrar la esquina superior derecha del panel táctil.

Parámetros

Ninguna.

Devoluciones

Nada.

Requiere

Nada.

Ejemplo

TP_Calibrate_Upper_Right (); esquina superior derecha

// Calibración de la

TP_Get_Calibration_Consts Prototipo

void TP_Get_Calibration_Consts ( unsigned int * x_min, unsigned int * x_max, unsigned int * y_min, unsigned int * y_max);

Descripción

Obtiene constantes de calibración después de la calibración se lleva a cabo y los almacena en x_min, x_max, y_miny y_maxparámetros.

Parámetros

   

x_min: Coordenada x de la esquina inferior

izquierda del área de trabajo. x_max: Coordenada x de la esquina superior derecha del área de trabajo. y_min: Coordenada y de la esquina inferior izquierda del área de trabajo. y_max: y coordenada de la esquina superior derecha del área de trabajo.

Devoluciones

Nada.

Requiere

Nada.

Ejemplo

TP_Get_Calibration_Consts (& x_min, & y_min, & x_max, & y_max); // Obtener constantes de calibración

TP_Set_Calibration_Consts Prototipo

void TP_Set_Calibration_Consts ( unsigned int x_min, unsigned int x_max, unsigned inty_min, unsigned int y_max);

Descripción

Establece las constantes de calibración.

Parámetros

   

x_min: Coordenada x de la esquina inferior

izquierda del área de trabajo. x_max: Coordenada x de la esquina superior derecha del área de trabajo. y_min: Coordenada y de la esquina inferior izquierda del área de trabajo. y_max: y coordenada de la esquina superior derecha del área de trabajo.

Devoluciones

Nada.

Requiere

Nada.

Ejemplo

TP_Set_Calibration_Consts (148, 3590, 519, 3370); // Establecer las constantes de calibración

Ejemplo de biblioteca La siguiente demostración de dibujo prueba las rutinas de la biblioteca del Panel táctil: Copiar código al portapapeles

// Conexiones del módulo Glcd

char GLCD_DataPort en PORTD; sbit sbit sbit sbit sbit sbit

GLCD_CS1 en RB0_bit; GLCD_CS2 en RB1_bit; GLCD_RS en RB2_bit; GLCD_RW en RB3_bit; GLCD_EN en RB4_bit; GLCD_RST en RB5_bit;

sbit GLCD_CS1_Direction at TRISB0_bit; sbit GLCD_CS2_Direction at TRISB1_bit; sbit GLCD_RS_Direction at TRISB2_bit; sbit GLCD_RW_Direction at TRISB3_bit; sbit GLCD_EN_Direction at TRISB4_bit; sbit GLCD_RST_Direction at TRISB5_bit; // Terminar las conexiones del módulo Glcd // Conexiones del módulo del panel táctil sbit DriveA at RC0_bit; sbit DriveB en RC1_bit; sbit DriveA_Direction en TRISC0_bit; sbit DriveB_Direction at TRISC1_bit; // Terminar las conexiones del módulo del panel táctil bit write_erase; char pen_size; char write_msg [] = "WRITE"; del menú GLCD char clear_msg [] = "CLEAR"; char erase_msg [] = "ERASE"; unsigned int x_coord, y_coord; void Initialize () { DriveA_Direction = 0; el pin DriveA como salida DriveB_Direction = 0; el pin DriveB como salida ANSEL = 3; pines AN0 y AN1 como entradas analógicas ANSELH = 0; pines AN como E / S digital TRISA = 3; C1ON_bit = 0; comparadores C2ON_bit = 0;

// Mensajes

// Establecer // Establecer // Configure los // y otros

// Desactivar

Glcd_Init (); GLCD Glcd_Fill (0); GLCD

// Inicializar // Borrar

ADC_Init (); ADC TP_Init (128, 64, 0, 1); panel táctil TP_Set_ADC_Threshold (900); el umbral ADC del panel táctil }

// Inicializar // Inicializar // Establecer

void Calibrate () { Glcd_Dot (0,63,1); punto inferior izquierdo Glcd_Write_Text ("TOUCH BOTTOM LEFT", 12,3,1);

// Dibujar el

TP_Calibrate_Bottom_Left (); de la esquina inferior izquierda Delay_ms (1000);

// Calibración

Glcd_Dot (0,63,0); punto inferior izquierdo Glcd_Dot (127,0,1); punto superior derecho Glcd_Write_Text ("", 12,3,1); Glcd_Write_Text ("TOUCH UPPER RIGHT", 12,4,1); TP_Calibrate_Upper_Right (); de la esquina superior derecha

// Borrar el // dibujar el

// Calibración

Delay_ms (1000); } void main () { Inicializar(); Glcd_Write_Text ("CALIBRATION", 32,3,1); Delay_ms (1000); Glcd_Fill (0); Calibrar();

// Borrar GLCD

Glcd_Fill (0); Glcd_Write_Text ("WRITE ON SCREEN", 20, 5, 1); Delay_ms (1000); Glcd_Fill (0); Glcd_V_Line (0,7,0,1); Glcd_Write_Text (clear_msg, 1,0,0); Glcd_V_Line (0,7,97,1); Glcd_Write_Text (erase_msg, 98,0,0);

// Borrar GLCD

// Menú de la pluma: Glcd_Rectangle (41,0,52,9,1); Glcd_Box (45,3,48,6,1); Glcd_Rectangle (63,0,70,7,1); Glcd_Box (66,3,67,4,1); Glcd_Rectangle (80,0,86,6,1); Glcd_Dot (83,3,1); write_erase = 1; pen_size = 1; mientras (1) { if (TP_Press_Detect ()) { // Después de que se detecte un PRESS, lea XY y conviértalo a un espacio de 128x64 si (TP_Get_Coordinates (& x_coord, & y_coord) == 0) { if ((x_coord