Desarrollo de funciones para PIC 16F y 18F

Ir abajo

Desarrollo de funciones para PIC 16F y 18F

Mensaje por pentax33 el Mar 2 Dic 2008 - 11:21

Quiero proponer un proyecto de caracter comunitario, que es el desarrollo de las funciones en lenguage SDCC para los pics de la serie 16F y 18F.

Estas funciones deberian de tener unas pautas generales como son:

-Deben ser flexibles en la utilizacion de pins, pins configurables por el usuario por medio de parrametros
-Las funciones deberian de realizar las tareas para configuracion de parametros, tratamiento de los datos, i almacenamiento en una variable para posterior tratamiento en el programa principal. De esta manera en el momento de realizar el progrma no tendiramos que preocuparnos de que debe realizar tal funcion... solo pasar un adato de parametro (direccion,valor...) y leer una variable donde tendremos el resultado.


Las posibles funciones/librerias:

-LCD alfanumerico 1 o 2 lineas para bus de 4 bits o 8 bits
-GLDC display grafico
-Control de servos por PWM
-Comunicación RS232
-Comunicación i2c
-Teclados matriciales 4x4
-Modulo analogico
-......

Animos

PD: Estoy trabajando en el modulo i2c partiendo de unas rutinas que he localizado en internet

pentax33
Participante
Participante

Mensajes : 11
Fecha de inscripción : 28/11/2008

Volver arriba Ir abajo

Re: Desarrollo de funciones para PIC 16F y 18F

Mensaje por Pikitin el Mar 2 Dic 2008 - 21:50

Hola Pentax33, precisamente he abierto una sección donde desarrollar esa clase de proyectos: "POR HACER"
Te propongo que abras un tema en esa sección y coloques el código de I2C que tienes por ahora, y expliques un poco en que estado está: si funciona 100% o le falla alguna cosa o le falta terminar algo... lo que creas oportuno, para que otros puedan aportar ideas, mejorarlo, etc...


Última edición por Pikitin el Vie 19 Dic 2008 - 18:55, editado 2 veces

Pikitin
veterano
veterano

Mensajes : 623
Fecha de inscripción : 26/11/2008

http://linuxmicros.blogspot.com/

Volver arriba Ir abajo

Re: Desarrollo de funciones para PIC 16F y 18F

Mensaje por Geo el Jue 18 Dic 2008 - 6:43

Muy buena idea Smile. Por el momento no tengo mucho tiempo pero en cuanto pueda me gustaría echar la mano, mientras voy a checar cómo va la cosa en "POR HACER" Smile.

Geo
Participante Activo
Participante Activo

Mensajes : 92
Fecha de inscripción : 16/12/2008
Localización : México

http://hsblog.mexchip.com

Volver arriba Ir abajo

Re: Desarrollo de funciones para PIC 16F y 18F

Mensaje por Risanti el Jue 25 Dic 2008 - 22:14

Si es una buena propuesta, yo no novato en el uso de SDCC , pero a medida que tenga algunos avances adjuntare algunas librerias, para compartirlas , Comparto lo de geo sobre el tiempo,ya que es una de mis complicaciones pero espero, adjuntos mis avances pronto.
avatar
Risanti
Asiduo del Foro
Asiduo del Foro

Mensajes : 172
Fecha de inscripción : 07/12/2008
Edad : 33
Localización : La Serena Chile

https://www.facebook.com/risanti.electronica

Volver arriba Ir abajo

Re: Desarrollo de funciones para PIC 16F y 18F

Mensaje por Risanti el Miér 25 Nov 2009 - 19:54

Hola a todos..

He estado trabajando en desarrollar una Liberia
para realizar comunicación serial a través de software, es decir sin
usar el modulo USART del PIC. ¿Se preguntara por que hacer eso de esta
manera. Quizá porque una ventaja es que se puede utilizar cualquier pin
del Pic Previamente definido como entrada o salida (Según el Caso Rx o
TX). aunque usar el USART del Pic es mas eficiente pero hay
aplicaciones donde no es critico utilizar un poco mas de memoria de
programa y tiempo de ejecución .

La Liberia la he probado con
Pic16F876 (Aunque debería funcionar con otros pic) a 4mhz (aun no la
modifico para trabajar a otras velocidades).
Básicamente hay que definir al comienzo de nuestro programa lo siguiente.

Código:

//Pines de  Tx y Rx
#define Tx_pin RB2                             
#define Rx_pin RB3
//Ademas la Velocidad de Comunicación (puede ser 1200,2400,4800,9600,19200)
#define BAUD 9600
                              //  Tipo de Comunicación Modo invertido para trabajar sin
                            // Directamente al puerto de Pc a traves de Un par de 
                          //resistencias, es decir sin ningún conversor de RS232 /TTL.   
                        //o  Utilizar #define UART_MODO NORMAL , para comunicarte mediante un max232 por ejemplo.
#define UART_MODO INVERTIDO
// Indicar que se Utilizar  esta librería
#include


Funciones Disponibles.
FUNCIÓN ESCRITURA DE UN CARÁCTER
Código:

//EJ.  Enviar un ASCII A de forma serial por el pin Tx_Pin
putchar(65);
putchar('A');

FUNCION ESCRITURA DE UNA CADENA (STRING)
Código:

//Envia la Cada Risanti a Traves de Pin Tx_PIn
 print("Risanti \\n")

FUNCION LECTURA DE DATOS
//Leer desde Rx pin.
Código:

  Mivar=Read();    // Esto deberia ser pero lo he probado y no funciona
                    // no se si sera un bug sdcc, ya que  he visto que sdcc
                  //crea un ASM que no realiza esta asignación.
                  // sin embargo mientras averiguo si es un bug o
                  // algo mas hecho por mi utilizo lo siguiente.
Read();
Mivar=RegRxChar_  //Variable leída a través de Rx Pin


Aun
me falta Bastantes cosas por realizar como por ejemplo la función Read
que solo espere un cierto tiempo y si no recibe nada que continué con
el programa. y ademas que se puede utilizar esta librería con otras
velocidades.

Mi intención ademas fue jugar un rato , es decir a veces se da por hecho muchas cosas que cuando las quieres
realizar te hacen pensar bastante.

Aqui Pueden Descargar esta libreria IO_Serial.h

Un
Ejemplo del uso de esta Libreria, se debe utlizar algun Terminal Como
por ejemplo Gtkterm y Configurar la velocidad a 9600, los pines del Pic
se deben conectar al DB9 del Pc a traves de 2 resistencias.. Tx Un
valor 1k y Rx 10K. Aunque estos valores cambia segun el pic de puerto.
Basicamente
este ejemplo imprime un menu, con 3 opciones para controlar un led,
segun lo que se pulse en Terminal el led se puede encerder
intermitentemente o Fijo o simplemente apagarse.

Pic Puerto PC
Txpin __/\\/\\/\\___Pin 2
Rxpin __/\\/\\/\\___Pin 3

Código:

/***************************************************************************        */
/* Prueba de Libreria Comunicacion Serial, A traves de Software                                          */
/*    15 Noviembre del  2009                                                                                        */
/*---------------------------------------------------------------------------                                  */
/*  Ricardo Santibañez                                                            */
/*----------------------------------------------  ---------------------------                                */
/* Desarrolado con SDCC.                                                                                        */
/*
*/
/****************************************************************************/

#include <pic16f876a.h>
#define FREQ 4000
#include <delay.h>
//Definir Datos Para Libreria Serial I/O
#define Tx_pin RB2
#define Rx_pin RB3
#define BAUD 9600
#define UART_MODO INVERTIDO
#include <IO_Serial.h>
unsigned char ledTime;
unsigned char CountChar0;
unsigned char CountChar1;

void clear();
void Go_Home();

typedef unsigned int word;
word
at 0x2007 CONFIG = _XT_OSC & _WDT_OFF & _PWRTE_OFF &
_BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF &
_DEBUG_OFF & _CP_OFF;

/*Rutina de Interrupciones, en este caso por Desborde de Timer 0*/
void isr() interrupt 0 {
if (ledTime==5){
    if (RB0==0)
      {RB0=1;
        ledTime=0;}
  else
    {RB0=0;
    ledTime=0;}
  }

ledTime++;
T0IF=0; // Borro Bandera de Desborde
TMR0=0;  // cargo valor en TMR0
T0IE=1;        // activo Int. por Tmr0
 GIE=1;
return;
}
void main() {
TRISB=8;
TRISA=255;
TRISC=0;
PORTB=0;
PORTC=0;
OPTION_REG=135;    //Configuro preescaler de TMRO   
ADCON1=6; // Puerto A Como Digital
T0IE=0;   
GIE=0;
ledTime=0;
while(1){
print("Menu Principal");
putchar(8);
putchar(8);
putchar(13);
print("Pulse 1 Led Intermitente\\n");
print("Pulse 2 Led ON \\n");
print("Pusle 3 Led OFF\\n");
print("Elija Opcion? ");
Read();
putchar(RegRxChar_);
putchar(13);
switch (RegRxChar_)
{
  case '1':
      { print("Usted Pulso la Tecla 1");
    T0IE=1;        // activo Int. por Tmr0
        GIE=1;
    TMR0=0; 
        break;}
  case '2':
    { print("Usted Pulso la Tecla 2");
    RB0=1;
    T0IE=0;        // activo Int. por Tmr0
        GIE=0;
    break;}
  case '3':
    { print("Usted Pulso la Tecla 3");
    RB0=0; 
    T0IE=0;        // activo Int. por Tmr0
        GIE=0;
    break;}
default:
    { print("ERROR OPCION NO VALIDA");}
}
putchar(13);
delay_ms(1000);
Clear();
}
}
// Rutina Para Borrar Screen En Terminal, Se envia Caracteres no visibles//
void Clear(){
Go_Home();
CountChar0=0;
CountChar1=0;
for (CountChar1==0;CountChar1<=6;CountChar1++)
 {
  for (CountChar0==0;CountChar0<=30;CountChar0++)
    {
      putchar(0x20);
    }
 CountChar0=0;
 putchar(13);
 }
Go_Home();
return;
}

void Go_Home(){

 CountChar0=0;

  for (CountChar0==0;CountChar0<=30;CountChar0++)
    {
      putchar(8);
    }
 CountChar0=0;
for (CountChar0==0;CountChar0<=6;CountChar0++)
    {
      putchar(0x1B);
      putchar(0x5B);
      putchar(0x41);
    }
return;
}


Espero sus Comentarios.

Atte.
RiSanti
avatar
Risanti
Asiduo del Foro
Asiduo del Foro

Mensajes : 172
Fecha de inscripción : 07/12/2008
Edad : 33
Localización : La Serena Chile

https://www.facebook.com/risanti.electronica

Volver arriba Ir abajo

Re: Desarrollo de funciones para PIC 16F y 18F

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.