Autor Tema: Cursillo en C18 para PICS DESDE CERO  (Leído 250332 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #60 en: 06 de Junio de 2007, 23:39:18 »
bueno, ya averigue un poco, el protocolo LIN es una comonucación monoalambrica, 1 solo hilo, en donde existen 1 Master y hasta 16 Esclavos por nodo, y su aplicación comun es en la red de control de los perifericos de un automovil, parabrisas, aire acondicionado, lunas, puertas, etc etc, es primo hermano del bus CAN, y como comente los ejemplos se remiten a los automoviles, m... no se si en el proteus se podra simular esto.... por ahora me enfocare al protocolo RS232 nomas, este tema quedara pendiente, ademas no tengo carro donde experimentar  :mrgreen:
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #61 en: 07 de Junio de 2007, 15:59:52 »
suena llamativo ese protocolo micro_cadaver, con el caudal de prestaciones que traen estos 18f ya uno no se da abasto, es como sacar ropa de un cajón y siempre encontraras mas ropa.
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado barg

  • PIC10
  • *
  • Mensajes: 45
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #62 en: 12 de Junio de 2007, 12:21:26 »
¿Sabe alguien como seria el protoco SPI en C18?Yo la verdad es que no tengo mucha idea de este protocolo y menos en C18 :oops: :oops:

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #63 en: 12 de Junio de 2007, 12:37:52 »
¿Sabe alguien como seria el protoco SPI en C18?Yo la verdad es que no tengo mucha idea de este protocolo y menos en C18 :oops: :oops:

En el C18 Libraries estan los comandos para el SPI y para los demás módulos.
El documento es el  ds51297

Ahora , si no entiendes como funciona el SPI, tampoco entenderás los comandos.  El lenguaje C te allana algunas cosas pero no te va a hacer que tus cosas funcionen si no sabes qué estas haciendo.  Te recomiendo leas sobre el tema antes de conectar algo porque sino tienes grandes chances de no hacerlo andar
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #64 en: 12 de Junio de 2007, 15:58:16 »
claro que si, primero lee algo sobre el protocolo SPI (difiere un poco del I2C), luego estudia la parte del modulo SSP en el datasheet de tu pic, y nos posteas tus dudas de una forma más concreta.
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado barg

  • PIC10
  • *
  • Mensajes: 45
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #65 en: 12 de Junio de 2007, 17:43:54 »
Muchas gracias por vuestra ayuda, pero al final voy a optar por otro camino en este proyecto.Aunque creo que en un futuro no muy lejano, cuando tenga mas tiempo  :?, volvere a estudiar este tema  :)

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #66 en: 13 de Junio de 2007, 00:24:37 »
bueno señores ya encontre una aplicacion para el modulo EUSART (GRACIAS JUAN  :-/), haremos una simple comunicacion con la PC (protocolo RS232) y el pic tendra un LCD 2X16 para observar el estado del proceso. asi que vayan repasando el LCD porque comenzaremos con ejemplos de aplicación en el C18 y luego lo complementaremos con el EUSART y finalmente el proyecto.

sobre el programa que va en la PC aun no tengo detalles pero ya les tendre más noticias, lo que ahora toca es el LCD.  :-)
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #67 en: 14 de Junio de 2007, 02:43:07 »
RUTINA PARA UN LCD 16X2 CON BUS DE DATOS A 4BITS

El siguiente codigo lo vengo modificando de el siguiente hilo  http://www.todopic.com.ar/foros/index.php?topic=17005.0
donde la amiga  :g) Mulderson amablemente compartio. La modificación que hice solo es para que se acomode al hardware que uso y le agregue una rutina para escribir strings (cadenas de caracteres) en el LCD, ubicados en la memoria de programa y en la memoria de datos.

Programa:
Escribe en el LCD.
Código: C
  1. #include <p18f2525.h>
  2. #include <delays.h>                             // Rutinas de retardo
  3. #include "C:\PIC\18F\EUART\LCD4b2x16.h"//ruta del archivo en mi PC
  4.  
  5. #pragma config OSC = XT,FCMEN = OFF,IESO = OFF //CONFIG1H
  6. #pragma config PWRT = ON,BOREN = OFF,BORV = 0 //CONFIG2L
  7. #pragma config WDT = OFF,WDTPS = 32768 //CONFIG2H
  8. #pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = PORTC//CONFIG3H
  9. #pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF//CONFIG4L
  10. #pragma config CP0 = ON,CP1 = ON,CP2 = ON//CONFIG5L
  11. #pragma config CPB = ON,CPD = ON//CONFIG5H
  12. #pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON//CONFIG6L
  13. #pragma config WRTB = ON,WRTC = ON,WRTD = ON//CONFIG6H
  14. #pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON//CONFIG7L
  15. #pragma config EBTRB = ON//CONFIG7H
  16. //******************************************************//
  17. //******************************************************//
  18. //
  19. //
  20. //              Programa Principal
  21. //
  22. //
  23. //******************************************************//
  24. //******************************************************//
  25. char mensaje[]="Henry";
  26.  
  27. void main(void)
  28. {
  29.         TRISA = 0X00;
  30.         TRISB = 0XF0;
  31.         TRISC = 0X00;
  32.         PORTA = 0X00;
  33.         PORTB = 0X00;
  34.         PORTC = 0X00;
  35.         Inicializa_LCD();
  36.         Comando_LCD(CURSOR_OFF & BLINK_ON);
  37.         Dato_LCD('#');//un dato
  38.         Datos_LCD(" PERU ");//una cadena desde la memoria de programa
  39.         Dato_String_LCD(mensaje);//una cadena desde la memoria de datos
  40.  
  41.         //con este comando pasamos a la linea 2 del LCD
  42.         Comando_LCD(DDRAM_LINEA_2);
  43.         Datos_LCD("micro_cadaver");
  44.         while(1);
  45. }

aca el archivo #include "C:\PIC\18F\EUART\LCD4b2x16.h"
Código: C
  1. /******************************************************/
  2. /*
  3. /* Manejo de un Display de Cristal Liquido LCD 16X4   */
  4. /* de 16 caracteres por 4 lineas, con una interface   */
  5. /* de 4 lineas:                                       */
  6. /*
  7. /*      LCD                         PIC
  8. /* ------------------------------------
  9. /*      D4  (11)                -->     RB0
  10. /*      D5  (12)                -->     RB1
  11. /*      D6  (13)                -->     RB2
  12. /*      D7  (14)                -->     RB3
  13. /*
  14. /*      RS  (4)                 -->     RC0
  15. /*      RW  (5)                 -->     RC1
  16. /*      E   (6)                 -->     RC2
  17. /*
  18. /******************************************************/
  19. /* Conexiones del LCD al Microcontrolador */
  20. #define PIN_RS  LATCbits.LATC0  // Define la Columna 1
  21. #define PIN_RW  LATCbits.LATC1  // Define la Columna 2
  22. #define PIN_E   LATCbits.LATC2  // Define la Columna 3
  23.  
  24. /* Configuracion del Display y cursor */
  25. #define DON                             0b00001111  /* Display encendido   */
  26. #define DOFF                    0b00001011  /* Display apagado     */
  27. #define CURSOR_HOME             0b00000010  /* Cursor encendido    */
  28. #define CURSOR_ON               0b00001111  /* Cursor encendido    */
  29. #define CURSOR_OFF              0b00001101  /* Cursor apagado      */
  30. #define BLINK_ON                0b00001111  /* Cursor con parpadeo */
  31. #define BLINK_OFF               0b00001110  /* Cursor sin parpadeo */
  32. #define CLEAR                   0b00000001  /* Display encendido   */
  33.  
  34. /* Modo de entrada */
  35. #define INCREMENT               0b00000110  /* Incrementa la posicion del cursor */
  36. #define DECREMENT               0b00000100  /* Decrementa la posicion del cursor */
  37.  
  38.  
  39. /* Configuracion de los desplazamientos del cursor y del Display*/
  40. #define SHIFT_CUR_LEFT          0b00010011  /* Corrimiento del cursor a la izquierda  */
  41. #define SHIFT_CUR_RIGHT         0b00010111  /* Corrimiento del cursor a la derecha    */
  42. #define SHIFT_DISP_LEFT         0b00011011  /* Corrimiento del display a la izquierda */
  43. #define SHIFT_DISP_RIGHT        0b00011111  /* Corrimiento del display a la derecha   */
  44.  
  45.  
  46. /* Funciones de inicializacion */
  47. #define NIBLE                           0b00000010  /* interface a 4 bits */
  48. #define FOUR_BIT                        0b00101111  /* Interface a 4-bit  */
  49. #define EIGHT_BIT                       0b00111111  /* Interface a 8-bit  */
  50. #define LINE_5X7                        0b00110011  /* Una linea, caracter 5x7 */
  51. #define LINE_5X10                       0b00110111  /* Una linea, caracter 5x10 */
  52. #define LINES_5X7                       0b00111011  /* Dos lineas. character 5x7 */
  53.  
  54.  
  55. /* Lineas de trabajo */
  56. #define DDRAM_LINEA_1           0b10000000      /* Linea 1 */
  57. #define DDRAM_LINEA_2           0b11000000      /* Linea 2 */
  58. #define DDRAM_LINEA_3           0b10010000      /* Linea 3 */
  59. #define DDRAM_LINEA_4           0b11010000      /* Linea 4 */
  60.  
  61.  
  62. /* Configuracion del puerto */
  63. #define Config_Puerto           0b00000000      /* RC<0:6> como salidas */
  64. #define Mascara                         0b00001111      /* Parte baja del Byte  */
  65.  
  66.  
  67. /* Prototipos de funciones */
  68. void Inicializa_LCD(void);              /* Inicializa LCD */
  69. void Comando_LCD(char);                 /* Indica al LCD un comando */
  70. void Dato_LCD(char);                    /* Indica al LCD un caracter */
  71. void Datos_LCD(const rom char *buffer); /* escribe una cadena desde la memoria de programa al LCD */
  72. void Dato_String_LCD(char *buffer);             /* escribe una cadena desde la memoria de datos al LCD */
  73.  
  74. //**********************************************************
  75. /* Inicializacion del LCD segun fabricante */
  76. //**********************************************************
  77. void Inicializa_LCD(void)
  78. {
  79.         int i;
  80.         Delay10TCYx(110);                       /* Retardo mayor a 100 useg. */
  81.         LATB = NIBLE;                           /* Interface de 4 bits RC<0:3> */
  82.         PIN_RS = 0;
  83.         PIN_RW = 0;
  84.         PIN_E = 1;
  85.  
  86.         Delay1KTCYx(5);                         /* Retardo de 5 mseg. */       
  87.         PIN_E = 0;
  88.         Delay1KTCYx(15);                        /* Retardo de 15 mseg. */
  89.  
  90.         /* Funcion set,  DL = 0, N = 1, F = 0 */
  91.         /* Dos lineas, caracter de 5X7 e interface a 4 bits */ 
  92.         Comando_LCD(LINES_5X7 & FOUR_BIT);
  93.  
  94.         /* Display ON, D = 1, C = 1, B = 1 */
  95.         /* Display encendido, cursor encendido con parpadeo */
  96.         Comando_LCD(DON & CURSOR_ON & BLINK_ON);
  97.  
  98.         /* limpia el display */
  99.         Comando_LCD(CLEAR);
  100.  
  101.         /* Entry Mode Set */
  102.         /* Incremento del cursor */
  103.         Comando_LCD(INCREMENT);
  104. }
  105.  
  106. //**********************************************************
  107. /* Indica al LCD comandos */
  108. //**********************************************************
  109. void Comando_LCD(char dato)
  110. {
  111.         char temp;                                              /* variable auxiliar */
  112.  
  113.         Delay1KTCYx(10);                                /* Retardo de 10 mseg. */
  114.         temp = dato;                                    /* Respaldo del dato original */
  115.         dato = dato >> 4;                               /* Corrimiento del nible alto */
  116.         LATB = dato;
  117.         PIN_RS = 0;
  118.         PIN_RW = 0;
  119.         PIN_E = 1;
  120.         Delay1KTCYx(5);                                 /* Retardo de 5 mseg. */       
  121.         PIN_E = 0;
  122.         LATB = temp;
  123.         PIN_RS = 0;
  124.         PIN_RW = 0;
  125.         PIN_E = 1;
  126.         Delay1KTCYx(5);                                 /* Retardo de 5 mseg. */       
  127.         PIN_E = 0;
  128. }
  129.  
  130. //**********************************************************
  131. /* Manda datos al LCD */
  132. //**********************************************************
  133. void Dato_LCD(char dato)
  134. {
  135.         char temp;                                              /* variable auxiliar */
  136.  
  137.         Delay1KTCYx(10);                                /* Retardo de 10 mseg. */
  138.         temp = dato;                                    /* Respaldo del dato original */
  139.         dato = dato >> 4;                               /* Corrimiento del nible alto */
  140.         LATB = dato;
  141.         PIN_RS = 1;
  142.         PIN_RW = 0;
  143.         PIN_E = 1;
  144.         Delay1KTCYx(5);                                 /* Retardo de 5 mseg. */       
  145.         PIN_E = 0;
  146.         LATB = temp;
  147.         PIN_RS = 1;
  148.         PIN_RW = 0;
  149.         PIN_E = 1;
  150.         Delay1KTCYx(5);                                 /* Retardo de 5 mseg. */       
  151.         PIN_E = 0;
  152. }
  153. //**********************************************************
  154. //      Escribe una cadena desde memoria de programa al LCD
  155. //**********************************************************
  156. void Datos_LCD(const rom char *buffer)
  157. {
  158.         while(*buffer)                  // Write data to LCD up to null
  159.     {
  160.                 Delay1KTCYx(5);                                 /* Retardo de 5 mseg. */       
  161.         Dato_LCD(*buffer); // Write character to LCD
  162.         buffer++;               // Increment buffer
  163.         }
  164.     return;
  165. }
  166. //**********************************************************
  167. //      Escribe una cadena desde memoria de datos al LCD
  168. //**********************************************************
  169. void Dato_String_LCD(char *buffer)
  170. {
  171.         while(*buffer)                  // Write data to LCD up to null
  172.     {
  173.                 Delay1KTCYx(5);                                 /* Retardo de 5 mseg. */       
  174.         Dato_LCD(*buffer); // Write character to LCD
  175.         buffer++;               // Increment buffer
  176.         }
  177.     return;
  178. }

todos los archivos: h**p://www.box.net/shared/ffojdvkcdh

a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #68 en: 14 de Junio de 2007, 13:06:40 »
Antes de continuar hay que leer el datasheet del pic18f2525 (o del que esten usando) todo lo concerniente al módulo EUSART.

La EUSART en el C18
(Enhanced Universal Synchronous Receiver Transmitter)

Si revisamos el documento MPLAB-C18-Libraries.pdf y vamos al capitulo 2.10 USART Functions (pagina 66), observaremos que el C18 ya tiene una librería dedicada a esta característica, además permite implementar por software más puertos UARTs (pues como no pertenecen al hardware del pic se llaman asi), sin embargo nos cuesta más memoria de programa... pero como en los 18FXXX hay bastante... ; entonces iniciaremos con el estudio (jijij entre comillas) de las rutinas que existen para el módulo EUSART.

Rutinas del Módulo EUSART
En la siguiente imagen se muestra todas las rutinas del EUSART en el C18, detallaremos en cada una, tengo que mencionar que muchas de ellas son rebundantes, es decir que hacen lo mismo pero con diferente nombre :?, ya lo veremos con más cuidado.

BusyUSART: detecta si el módulo EUSART está transmitiendo o está ocupado. Retorna un valor 0 si  el buffer de transmisión está libre o disponible, y retorna un valor 1 si está ocupado el buffer de transmisión.

      //esperar a que el buffer de transmisión
      //este vacio o disponible
      while(BusyUSART());


CloseUSART: deshabilita el módulo EUSART.

      closeUSART();



DataRdyUSART: detecta si hay información lista para efectuar una lectura del buffer de recepción. Retorna el valor del bit RCIF del registro PIR, es 1 cuando el buffer está con la información disponible, y 0 cuando no hay información para leer.

      //esperamos caracter del virtual terminal
      while(!DataRdyUSART());


getsUSART: lee una cadena de caracteres y las guarda en una cadena previamente definida en la memoria de datos. Posee 2 argumentos o valores de entrada, BUFFER cadena previamente definida en la memoria de datos donde se guardará la información y LEN es la cantidad de caracteres a leer.

char recepcion_eco1[16];

   getsUSART(recepcion_eco1,9);


OpenUSART:configura y habilita el módulo EUSART. Tiene los siguientes argumentos o valores de entrada.
CONFIG: configuracion del módulo EUSART.

SPBRG: valor que determina el Baud Rate del módulo EUSART.


   // configuramos el EUSART para 9.6K baudios
   OpenUSART(   USART_TX_INT_OFF &
            USART_RX_INT_OFF &
            USART_ASYNCH_MODE &
            USART_EIGHT_BIT &
            USART_CONT_RX &
            USART_BRGH_HIGH,
            25);

putsUSART: escribe una cadena de caracteres previamente definida en la memoria de datos. Su valor de entrada es la cadena de caracteres.

char mensaje_eco1[]="micro_cadaver"

   putsUSART(mensaje_eco1);



putrsUSART:escribe una cadena de caracteres definido en la memoria de programa. Su valor de entrada es el mensaje entre " " comillas.

   putrsUSART("kedutpic");


ReadUSART: lee un caracter del buffer de recepcion del módulo EUSART
getcUSART: lee un caracter del buffer de recepcion del módulo EUSART

      recepcion = getcUSART();


WriteUSART: escribe un caracter al buffer de transmisión del módulo EUSART.
putcUSART : escribe un caracter al buffer de transmisión del módulo EUSART.

      putcUSART(recepcion);


baudUSART: configura el Baud Rate del módulo EUSART. Esta es una de las razones el porque ahora se llama Enhanced USART, el BaudRate tiene sus propios bits de configuración con el cual puede operar en diversos modos. Tiene como argumentos las siguientes opciones.



Programa de aplicación:
Este programa va a recibir un caracter proveniente del Virutal Terminal de Proteus y luego mandara el mismo caracter al Virtual Terminal del Proteus, luego todo estara monitoreado en el LCD. EL nombre del programa es: eco LCD
Código: C
  1. #include <p18f2525.h>
  2. #include <delays.h>// Rutinas de retardo
  3. #include <usart.h>// Rutinas de retardo
  4. #include "C:\PIC\18F\EUART\LCD4b2x16.h"
  5.  
  6. #pragma config OSC = XT,FCMEN = OFF,IESO = OFF //CONFIG1H
  7. #pragma config PWRT = ON,BOREN = OFF,BORV = 0 //CONFIG2L
  8. #pragma config WDT = OFF,WDTPS = 32768 //CONFIG2H
  9. #pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = PORTC//CONFIG3H
  10. #pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF//CONFIG4L
  11. #pragma config CP0 = ON,CP1 = ON,CP2 = ON//CONFIG5L
  12. #pragma config CPB = ON,CPD = ON//CONFIG5H
  13. #pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON//CONFIG6L
  14. #pragma config WRTB = ON,WRTC = ON,WRTD = ON//CONFIG6H
  15. #pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON//CONFIG7L
  16. #pragma config EBTRB = ON//CONFIG7H
  17. //******************************************************//
  18. //******************************************************//
  19. //
  20. //
  21. //              Programa Principal
  22. //
  23. //
  24. //******************************************************//
  25. //******************************************************//
  26. unsigned char recepcion;
  27. void main(void)
  28. {
  29.         TRISA = 0X00;
  30.         TRISB = 0XF0;
  31.         TRISC = 0X80;
  32.         PORTA = 0X00;
  33.         PORTB = 0X00;
  34.         PORTC = 0X00;
  35.  
  36.         // configuramos el LCD
  37.         Inicializa_LCD();
  38.         Comando_LCD(CURSOR_OFF & BLINK_OFF);
  39.         Comando_LCD(0X81);//posicion en el LCD
  40.         Datos_LCD("** eco LCD **");
  41.         Comando_LCD(0XC0);//posicion en el LCD
  42.         Datos_LCD("tx=");
  43.         Comando_LCD(0XCD);//posicion en el LCD
  44.         Datos_LCD("=rx");
  45.  
  46.         // configuramos el EUSART para 9.6K baudios
  47.         OpenUSART(      USART_TX_INT_OFF &
  48.                                 USART_RX_INT_OFF &
  49.                                 USART_ASYNCH_MODE &
  50.                                 USART_EIGHT_BIT &
  51.                                 USART_CONT_RX &
  52.                                 USART_BRGH_HIGH,
  53.                                 25);
  54.         for(;;)
  55.         {
  56.                 //esperar a que el buffer de transmisi&#243;n
  57.                 //este vacio o disponible
  58.                 while(BusyUSART());
  59.        
  60.                 //esperamos caracter del virtual terminal
  61.                 while(!DataRdyUSART());
  62.                 Comando_LCD(0XCC);
  63.                 recepcion = getcUSART();
  64.                 Dato_LCD(recepcion);
  65.        
  66.                 //envia caracter
  67.                 putcUSART(recepcion);
  68.                 Comando_LCD(0XC3);//posicion en el LCD
  69.                 Dato_LCD(recepcion);
  70.         }
  71. }

Programa de aplicación:
Este programa va a recibir un array proveniente de un pic y luego mandara otra cadena al otro pic, todo estara monitoreado en el LCD. EL nombre del programa es: eco cadena (proteus) , eco pic1 y eco pic2.

ECO PIC1
Código: C
  1. #include <p18f2525.h>
  2. #include <delays.h>// Rutinas de retardo
  3. #include <usart.h>// Rutinas de retardo
  4. #include "C:\PIC\18F\EUART\LCD4b2x16.h"
  5.  
  6. #pragma config OSC = XT,FCMEN = OFF,IESO = OFF //CONFIG1H
  7. #pragma config PWRT = ON,BOREN = OFF,BORV = 0 //CONFIG2L
  8. #pragma config WDT = OFF,WDTPS = 32768 //CONFIG2H
  9. #pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = PORTC//CONFIG3H
  10. #pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF//CONFIG4L
  11. #pragma config CP0 = ON,CP1 = ON,CP2 = ON//CONFIG5L
  12. #pragma config CPB = ON,CPD = ON//CONFIG5H
  13. #pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON//CONFIG6L
  14. #pragma config WRTB = ON,WRTC = ON,WRTD = ON//CONFIG6H
  15. #pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON//CONFIG7L
  16. #pragma config EBTRB = ON//CONFIG7H
  17. //******************************************************//
  18. //******************************************************//
  19. //
  20. //
  21. //              Programa Principal ECO PIC 1
  22. //
  23. //
  24. //******************************************************//
  25. //******************************************************//
  26. char mensaje_eco1[]="micro_cadaver",recepcion_eco1[16],recepcion;
  27. int i;
  28. void main(void)
  29. {
  30.         TRISA = 0X00;
  31.         TRISB = 0XF0;
  32.         TRISC = 0X80;
  33.         PORTA = 0X00;
  34.         PORTB = 0X00;
  35.         PORTC = 0X00;
  36.  
  37.         // configuramos el LCD
  38.         Inicializa_LCD();
  39.         Comando_LCD(CURSOR_OFF & BLINK_OFF);
  40.         Datos_LCD("tx=");
  41.         Comando_LCD(0XC0);//posicion en el LCD
  42.         Datos_LCD("rx=");
  43.  
  44.         // configuramos el EUSART para 9.6K baudios
  45.         OpenUSART(      USART_TX_INT_OFF &
  46.                                 USART_RX_INT_OFF &
  47.                                 USART_ASYNCH_MODE &
  48.                                 USART_EIGHT_BIT &
  49.                                 USART_CONT_RX &
  50.                                 USART_BRGH_HIGH,
  51.                                 25);
  52.  
  53.         //esperar a que el buffer de transmisi&#243;n
  54.         //este vacio o disponible
  55.         while(BusyUSART());
  56.         //envia caracter
  57.         putsUSART(mensaje_eco1);
  58.         Comando_LCD(0X83);//posicion en el LCD
  59.         for(i=0;i<=12;i++)
  60.         {
  61.                 Dato_LCD(mensaje_eco1[i]);
  62.         }
  63.  
  64.         //esperar a que el buffer de transmisi&#243;n
  65.         //este vacio o disponible
  66.         while(BusyUSART());
  67.         //esperamos caracter del virtual terminal
  68.         while(!DataRdyUSART());
  69.         getsUSART(recepcion_eco1,9);
  70.         Comando_LCD(0XC3);
  71.         for(i=0;i<=8;i++)
  72.         {
  73.                 Dato_LCD(recepcion_eco1[i]);
  74.         }
  75.  
  76.         while(1);
  77. }

ECO PIC2
Código: C
  1. #include <p18f2525.h>
  2. #include <delays.h>// Rutinas de retardo
  3. #include <usart.h>// Rutinas de retardo
  4. #include "C:\PIC\18F\EUART\LCD4b2x16.h"
  5.  
  6. #pragma config OSC = XT,FCMEN = OFF,IESO = OFF //CONFIG1H
  7. #pragma config PWRT = ON,BOREN = OFF,BORV = 0 //CONFIG2L
  8. #pragma config WDT = OFF,WDTPS = 32768 //CONFIG2H
  9. #pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = PORTC//CONFIG3H
  10. #pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF//CONFIG4L
  11. #pragma config CP0 = ON,CP1 = ON,CP2 = ON//CONFIG5L
  12. #pragma config CPB = ON,CPD = ON//CONFIG5H
  13. #pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON//CONFIG6L
  14. #pragma config WRTB = ON,WRTC = ON,WRTD = ON//CONFIG6H
  15. #pragma config EBTR0 = ON,EBTR1 = ON,EBTR2 = ON//CONFIG7L
  16. #pragma config EBTRB = ON//CONFIG7H
  17. //******************************************************//
  18. //******************************************************//
  19. //
  20. //
  21. //              Programa Principal ECO PIC 2
  22. //
  23. //
  24. //******************************************************//
  25. //******************************************************//
  26. char mensaje_eco2[]="VIVA PERU",recepcion_eco2[16],recepcion;
  27. int i;
  28. void main(void)
  29. {
  30.         TRISA = 0X00;
  31.         TRISB = 0XF0;
  32.         TRISC = 0X80;
  33.         PORTA = 0X00;
  34.         PORTB = 0X00;
  35.         PORTC = 0X00;
  36.  
  37.         // configuramos el LCD
  38.         Inicializa_LCD();
  39.         Comando_LCD(CURSOR_OFF & BLINK_OFF);
  40.         Datos_LCD("tx=");
  41.         Comando_LCD(0XC0);//posicion en el LCD
  42.         Datos_LCD("rx=");
  43.  
  44.         // configuramos el EUSART para 9.6K baudios
  45.         OpenUSART(      USART_TX_INT_OFF &
  46.                                 USART_RX_INT_OFF &
  47.                                 USART_ASYNCH_MODE &
  48.                                 USART_EIGHT_BIT &
  49.                                 USART_CONT_RX &
  50.                                 USART_BRGH_HIGH,
  51.                                 25);
  52.  
  53.         //esperar a que el buffer de transmisi&#243;n
  54.         //este vacio o disponible
  55.         while(BusyUSART());
  56.         //esperamos caracter del virtual terminal
  57.         while(!DataRdyUSART());
  58.         getsUSART(recepcion_eco2,13);
  59.         Comando_LCD(0XC3);
  60.         for(i=0;i<=12;i++)
  61.         {
  62.                 Dato_LCD(recepcion_eco2[i]);
  63.         }
  64.  
  65.  
  66.         //esperar a que el buffer de transmisi&#243;n
  67.         //este vacio o disponible
  68.         while(BusyUSART());
  69.         //envia caracter
  70.         putsUSART(mensaje_eco2);
  71.         Comando_LCD(0X83);//posicion en el LCD
  72.         for(i=0;i<=8;i++)
  73.         {
  74.                 Dato_LCD(mensaje_eco2[i]);
  75.         }
  76.  
  77.         while(1);
  78. }

todos los archivos: h**p://www.box.net/shared/ffojdvkcdh
« Última modificación: 14 de Junio de 2007, 18:15:28 por micro_cadaver »
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado Kedutpic

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 219
    • Microelectronica
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #69 en: 14 de Junio de 2007, 14:34:39 »
 :mrgreen:
RUTINA PARA UN LCD 16X2 CON BUS DE DATOS A 4BITS

El siguiente codigo lo vengo modificando de el siguiente hilo  http://www.todopic.com.ar/foros/index.php?topic=17005.0
donde la amiga  :g) Mulderson amablemente compartio. La modificación que hice solo es para que se acomode al hardware que uso y le agregue una rutina para escribir strings (cadenas de caracteres) en el LCD, ubicados en la memoria de programa y en la memoria de datos.



 :mrgreen: hola henry tu programa funciona a la perfeccion , aunque al inicio :shock:  :shock:  me lleve un agran sorpresa al ver que no se inicializaba  el LCD , pues empeze a revisar el programa ...  como el pic que estoy usando era el 18F2550 le cambie el encabezado por este :

Código: [Seleccionar]
#include <p18f2550.h>
#include <delays.h> // Rutinas de retardo
#include "F:\PIC\C18\LCD4b2x16.h"

#pragma config  PLLDIV =1,CPUDIV = OSC1_PLL2,USBDIV =1 //CONFIG1L
#pragma config  FOSC = XT_XT, FCMEN = OFF,IESO = OFF//CONFIG1H
#pragma config PWRT = ON,BOR = OFF,BORV =0,VREGEN = OFF //CONFIG2L
#pragma config WDT = OFF,WDTPS = 32768 //CONFIG2H
#pragma config MCLRE = ON,LPT1OSC = OFF,PBADEN = OFF,CCP2MX = ON//CONFIG3H
#pragma config STVREN = OFF,LVP = OFF,XINST = OFF,DEBUG = OFF//CONFIG4L
#pragma config CP0 = ON,CP1 = ON,CP2 = ON,CP3 = ON//CONFIG5L ; PROTECCION DE LECTURA DESDE 0000-7FFFh
#pragma config CPB = OFF,CPD = OFF//CONFIG5H ; CPB: ON HABILITADO CODIGO DE PROTECCION ,CPD :ON HABILITADO PROTECCION CONTRA LECCTURA EEPROM
#pragma config WRT0 = ON,WRT1 = ON,WRT2 = ON,WRT3 = ON//CONFIG6L       ; PROTECCION DE ESCRITURA DESDE 0000-7FFFh
#pragma config WRTB = OFF,WRTC = OFF,WRTD = OFF//CONFIG6H                  ; WRBT = ON HABILITADO CODIGO DE PROTECCION DE ESCRITURA ,WRCT=ON PROTECCION A LOS REGISTROS (3000000-30000FFH),WRTD= ON PROTECCION DE ESCRITURA DE LOS DATOS EN LA EEPROM
#pragma config EBTR0 = OFF,EBTR1 = OFF,EBTR2 = OFF//CONFIG7L ; PROTECCION DESDE TABLAS LEIDAS EJECUTADAS EN OTROS BLOQUES
#pragma config EBTRB = OFF//CONFIG7H
//******************************************************//
//******************************************************//

y en el programa le agrege la configuracion del ADCON1 como salida o entrada digitales (ADCON1=0X0F) ,debido a que parte del puerto B, se esta usando para mandar los datos al LCD :

Código: [Seleccionar]
//******************************************************//
//******************************************************//
//
//
// Programa Principal
//
//
//******************************************************//
//******************************************************//
char mensaje[]="Henry";

void main(void)
{
ADCON1 = 0X0F;  PUERTO B DIGITAL
UCON = 0X00;     
TRISA = 0X00;
TRISB = 0XF0;
TRISC = 0X00;
PORTA = 0X00;
PORTB = 0X00;
PORTC = 0X00;
Inicializa_LCD();
Comando_LCD(CURSOR_OFF & BLINK_ON);
Dato_LCD('#');//un dato
Datos_LCD(" VIVA EL PERU ");//una cadena desde la memoria de programa
Dato_String_LCD(mensaje);//una cadena desde la memoria de datos

//con este comando pasamos a la linea 2 del LCD
Comando_LCD(DDRAM_LINEA_2);
Datos_LCD("micro_cadaver");
while(1);
}

 8) claro me tome la molestia de cambiar algunas cositas de tu programa espero que no te molestes  :mrgreen:

Actel  -  VHDL un nuevo mundo por descubrir :D
Grupo de Microelectronica - CIDI - UTP
Visitanos en : http://ue.accesus.com

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #70 en: 14 de Junio de 2007, 15:07:59 »
 :mrgreen: harigato kedutpic san!
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado barg

  • PIC10
  • *
  • Mensajes: 45
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #71 en: 15 de Junio de 2007, 08:06:30 »
Hola amigos!!!

No se muy bien si mostrar mi problema aqui o abrir otro tema, pero bueno,vosotros ya me decis.

La cuestion es que estoy trabajando con unos modulos de comunicacion inalambrica con el protocolo zigbee.Este protocolo lo puedes obtener en la misma web donde compre los modulos gratuitamente, lo que es una ventaja  :lol:.Este firmware esta hecho en C y para el C18.Pues bien cuando voy a compilarlo me da un error tal que asi "osc no definido" y ese es mi problema.No se como viene definido en el programa.Tambien he intentado definirlo como en los ejemplos que habeis colgado aqui y no funciona, sigue dando el mismo error.

Como no se como hacer para colgar el archivo aqui os dejo la direccion de donde se puede bajar el firmware, es gratuito :D :D

http://www.albedo.biz/products/010/002/005/

Os agradezco cualquier ayuda

Gracias

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #72 en: 15 de Junio de 2007, 11:20:32 »
sugiero que hagas un hilo aparte porque la gente que derepente sabe algo nunca se va enterar a menos que haya estado viendo este hilo, lo cual reduce tus posibilidades (además que yo nunca he usado esos módulos  :( ....) de que alguien te responda, podrias poner problemas con zigbee y C18, o algo asip. saludos  :mrgreen: :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado barg

  • PIC10
  • *
  • Mensajes: 45
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #73 en: 16 de Junio de 2007, 07:43:19 »
Gracias micro_cadaver.Ya he puesto un tema nuevo en la pregunta, a ver si alguien sabe cual es el problema que tengo.Cuando consiga algo lo pongo aqui  :-/ :-/

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: Cursillo en C18 para PICS DESDE CERO
« Respuesta #74 en: 20 de Junio de 2007, 18:27:30 »
por ahi he visto que la gente le entra con dudas al I2C, pues le vamos a eso tambien en el C18  :mrgreen: voy a prepara material y lo lanzamos!!!  :-/
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com


 

anything