Desarrollo de funciones para PIC 16F y 18F
4 participantes
Página 1 de 1.
Desarrollo de funciones para PIC 16F y 18F
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
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
- Mensajes : 11
Fecha de inscripción : 28/11/2008
Re: Desarrollo de funciones para PIC 16F y 18F
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...
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
Re: Desarrollo de funciones para PIC 16F y 18F
Muy buena idea . 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" .
Re: Desarrollo de funciones para PIC 16F y 18F
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.
Re: Desarrollo de funciones para PIC 16F y 18F
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.
Funciones Disponibles.
FUNCIÓN ESCRITURA DE UN CARÁCTER
FUNCION ESCRITURA DE UNA CADENA (STRING)
FUNCION LECTURA DE DATOS
//Leer desde 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
Espero sus Comentarios.
Atte.
RiSanti
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
Temas similares
» i4uc Entorno de desarrollo para Microcontroladores
» Bug en la librería ADC para 18F
» Gedit_Pic-IDE: plugin para convertir Gedit en una IDE para PIC
» Introducción a Gedit como herramienta de desarrollo.
» Fritzing, diseño, desarrollo y enseñanza de Arduino y proptotipos
» Bug en la librería ADC para 18F
» Gedit_Pic-IDE: plugin para convertir Gedit en una IDE para PIC
» Introducción a Gedit como herramienta de desarrollo.
» Fritzing, diseño, desarrollo y enseñanza de Arduino y proptotipos
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|