Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

23/11/2010 #21

Avatar de ByAxel

el tema correcto seria este: Ccs c programas hechos en mplab(Proyecto completo).

sobre el oscilador, guíate de esto: Consiguiendo 4 Mhz para los 48 Mhz necesarios en los PIC's con USB 2.0 que lo mismo digo "Absolutamente todo está en el datasheet".

La cosa es que cuando tomo el valor del registro que uso para leer el tmro
haciendo la conversion siempre pierdo las unidades
en el CCS trata de que el tipo de las variables sean las correctas (el CCS tiene bugs al respecto), sugiero que hagas las operaciones por separado en varias líneas para que veas donde va la falla o hacerlo en el proteus con el archivo *.cof, en modo debug y la simulación paso a paso para que revises el resultado...

igual, esperemos al experto... claro que este tema se trata del C18; el CCS lo tratan en otro sitio.

saludos
13/12/2010 #22

Avatar de george.manson.69

Practica sencilla con HI TECH compiler
Esta practica es muy sencilla trata de enviar el dato de la temperatura LM35 a la pc donde se vizualizaara en un software llamado " Termmometro".

Pragrama del PIC:

Código:
///////////////////////////////////////////////////////////
//TITULO: USO DEL ADC y USART                                 ///
//AUTOR: george.manson.69
//COMPILADOR: HI TECH (LITE MODE)
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////

#include<htc.h>        //Incluimos libreria del micro a usar
#include<stdio.h>    //libreria para trabajar con conversiones
#include"libUSART/usartdr.h" //Libreria creada para uso del usart
#include"libADC/adcdr.h"//Inluimos libreria de trabajo con ADC

__CONFIG(UNPROTECT & WDTDIS & PWRTEN & INTIO & MCLREN & LVPDIS);
__CONFIG(DEBUGDIS & BORDIS);
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
//UNPROTECT    = Codigo no Potegido
//WDTDIS    = Watch Dog Timer Desactivado
//PWRTEN    = Power Activado
//INTIO        = Osiclador interno
//MCLREN    = Activamos Master Clear
//LVPDIS    = Low Voltage Porgramming Desactivado
//DEBUGDIS    = Desactiva Debug
//BOR        = Desactivado
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#define _XTAL_FREQ 8000000 //Oscilador Interno de 8MHZ

unsigned char adc[2];
unsigned int dato;
///////////////////////////////
//Funcion de 1 segundo
////////////////////////////////
void Delay1S(void){
    unsigned char x;
    for(x=0;x<100;x++){
        __delay_ms(10);
    }
}
/////////////////////////////////////////////////
//Funcion de interrupcion
//Si no se usa simplemente no hacemos nada...
//Esto sirve para direccionar lo los datos
//en un lugar muy cercano al Inicio de la memoria
//de datos
////////////////////////////////////////////////
static void interrupt
isr(void){}
//////////////////////////////////////////////
//Funcion Principal
//////////////////////////////////////////////
void main(void){
///////////////////////////////////
//Registro para trabajar a 8MHZ
///////////////////////////////////
    OSCCON=0x70;
    while(HTS==0); //Es estable la frecuencia ?
    TRISA=0x07;
    TRISC=0x80;                //RB1=RX,RB2=TX
    //Configuracion del USART
    OpenUSART(25,OFF,OFF);    //value=(FOSC/(baud*16))-1
                            //SIN INTERRUPCIONES
                            //a 9600 baudios
    //Configuracion del ADC
    OpenADC(FOSC_FRC,AN0,OFF);
                            //Oscilador interno
                            //AN0 como entrada analogo
                            //PORTB sin analoga

    GIE=0;                    //INTERRUPCIONES GLOBALES DesACTIVADAS
    PEIE=0;                    //DesACTIVA INTERURPCIONES POR PERIFERICOS

    while(1){
        __delay_ms(100);
        startADC();
        while(GODONE);
        dato=readADC();
        adc[0]=(unsigned char)dato;
        adc[1]=((dato&0x0300)>>8);
        putch(adc[0]);
        putch(adc[1]);
    }
    
}
Nota parea abror el software se debe de tener instalado el framework 4 en su PC
17/01/2011 #23

Avatar de george.manson.69

LCD 3 WIRES :En Hi tech Compiler
HE realizado un programa hecho en Hi tech COMPILER.
para Manejo de un LCD 16x2 con un 74HC164.

Código:
///////////////////////////////////////////////////////////
//TITULO: USO DEL LCD 3-WIRES                            ///
//AUTOR: george.manson.69
//COMPILADOR: HI TECH (LITE MODE)
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////

#include<htc.h>            //Incluimos libreria del micro a usar
#include<stdio.h>
__CONFIG(UNPROTECT & WDTDIS & PWRTEN & INTIO & MCLREN & LVPDIS);
__CONFIG(DEBUGDIS & BORDIS);
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
//UNPROTECT    = Codigo no Potegido
//WDTDIS    = Watch Dog Timer Desactivado
//PWRTEN    = Power Activado
//INTIO        = Osiclador interno
//MCLREN    = Activamos Master Clear
//LVPDIS    = Low Voltage Porgramming Desactivado
//DEBUGDIS    = Desactiva Debug
//BOR        = Desactivado
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#define _XTAL_FREQ 8000000 //Oscilador Interno de 8MHZ
#include"libLCD3PIN/lcd3pin.h"
////////////////////////////////////////////
//VARIABLES GLOBALES
///////////////////////////////////////////
unsigned char buffer[25];
//////////////////////////////////////////////////
//Funcion de segundo
//////////////////////////////////////////////////
void DELAY1S(void){
    unsigned char seg;
    for(seg=0;seg<100;seg++){
        __delay_ms(10);
    }
}
/////////////////////////////////////////////////
//Funcion de interrupcion
//Si no se usa simplemente no hacemos nada...
//Esto sirve para direccionar lo los datos
//en un lugar muy cercano al Inicio de la memoria
//de datos
////////////////////////////////////////////////
static void interrupt
isr(void){}
/////////////////////////////////////////////////
//Funcion Principal
/////////////////////////////////////////////////
void main(void){
///////////////////////////////////
//Registro para trabajar a 8MHZ
///////////////////////////////////
    OSCCON=0x70;
    while(HTS==0); //Es estable la frecuencia ?
    //Inicializa Puertos
    TRISB=0x00;
    PORTB=0x00;
    ADCON0=0;
    ANSELH=0;
    //Inicializa LCD
    lcd_init(CURSOR_OFF);
    lcd_rom_string("LCD 3-WIRES");
    lcd_gotoxy(1,2);
    lcd_rom_string("george.manson.69");
    DELAY1S();    //Esperamos 1 Segundo
    lcd_gotoxy(1,1);
    lcd_rom_string("ucursos.webs.com");
    lcd_gotoxy(1,2);
    lcd_rom_string("                ");
    for(unsigned char cont=0;cont<100;cont++){
        sprintf(buffer," value = %u  ",cont);
        lcd_gotoxy(1,2);
        lcd_ram_string(buffer);
        __delay_ms(100);
    }
    while(1);
}
Imágenes Adjuntas
Tipo de Archivo: jpg Dibujo.JPG (22,0 KB (Kilobytes), 64 visitas)
Archivos Adjuntos
Tipo de Archivo: rar main.rar (77,4 KB (Kilobytes), 121 visitas)
17/01/2011 #24

Avatar de Vegetal Digital

Hola george, llego tarde al tema pero no para felicitarte, desde tu otro post para ccs veo que sos un gran programador que se desempeña sin mayores problemas en uno u otro lenguaje. Veo que es muy similar al CCS, asi que seguramente pronto estaré haciendo algunas pruebas guiandome por tus trabajos.
Sin más molestar, un cordial saludo para todos.
18/01/2011 #25

Avatar de george.manson.69

Vegetal Digital dijo: Ver Mensaje
Hola george, llego tarde al tema pero no para felicitarte, desde tu otro post para ccs veo que sos un gran programador que se desempeña sin mayores problemas en uno u otro lenguaje. Veo que es muy similar al CCS, asi que seguramente pronto estaré haciendo algunas pruebas guiandome por tus trabajos.
Sin más molestar, un cordial saludo para todos.
Veo que los compiladores C18 y HI tech...son muy buenos y aparte estan en modo lite, y es para toda la familia 16 y 18(C18).

Espero que empecemos a hacer mas programas en C18 y Hi tech compiler.
18/01/2011 #26

Avatar de @f2504

Buenas!
Primero que todo felicidades por el post! Apenas comienzo con C18 y ya presento problemas de los mas simples:
Tengo un 18F2550 con un pulsador en RA0, un LED en RB4, y este programa:
Código:
while(1){
  if(PORTAbits.RA0 == 1){
    LATB = 0x10;
    Delay10KTCYx(100);
    LATB = 0x00;
    Delay10KTCYx(100);
  }else{
    LATB = 0x00;
  }
}
En teoría el LED deberia prender y apagar cuando presiono el pulsador, pero solo se queda encendido.
Alguna idea?

Gracias de antemano

edit: Estoy utilizando el oscilador interno. Creo que por el ruido el LED no se veia titilar, sin embargo ya lo hace (si me alejo lo suficiente).
19/01/2011 #27

Avatar de @f2504

Solucionado total
Buenas a todos,

Logré solucionar mi problema, con un cristal de 20MHz, los condensadores de 15pF y colocando el bit FOSC = HS...

Ahora pasemos a cosas mas grandes!
22/01/2011 #28

Avatar de george.manson.69

uso de LCD20X4 c-4bits: HI tech compiler
Simple uso de un LCD20x4, a 4 bits
Código:
///////////////////////////////////////////////////////////
//TITULO: USO DEL LCD 4-bits							///
//AUTOR: george.manson.69
//COMPILADOR: HI TECH (LITE MODE)
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////

#include<htc.h>			//Incluimos libreria del micro a usar
__CONFIG(UNPROTECT & WDTDIS & PWRTEN & INTIO & MCLREN & LVPDIS);
__CONFIG(DEBUGDIS & BORDIS);
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
//UNPROTECT	= Codigo no Potegido
//WDTDIS	= Watch Dog Timer Desactivado
//PWRTEN	= Power Activado
//INTIO		= Osiclador interno
//MCLREN	= Activamos Master Clear
//LVPDIS	= Low Voltage Porgramming Desactivado
//DEBUGDIS	= Desactiva Debug
//BOR		= Desactivado
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#define _XTAL_FREQ 8000000 //Oscilador Interno de 8MHZ
#include"lcd4bits/lcd.h"
////////////////////////////////////////////
//VARIABLES GLOBALES
///////////////////////////////////////////
unsigned char buffer[25];
//////////////////////////////////////////////////
//Funcion de segundo
//////////////////////////////////////////////////
void DELAY1S(void){
	unsigned char seg;
	for(seg=0;seg<100;seg++){
		__delay_ms(10);
	}
}
/////////////////////////////////////////////////
//Funcion de interrupcion
//Si no se usa simplemente no hacemos nada...
//Esto sirve para direccionar lo los datos
//en un lugar muy cercano al Inicio de la memoria
//de datos
////////////////////////////////////////////////
static void interrupt
isr(void){}
/////////////////////////////////////////////////
//Funcion Principal
/////////////////////////////////////////////////
void main(void){
///////////////////////////////////
//Registro para trabajar a 8MHZ
///////////////////////////////////
	OSCCON=0x70;
	while(HTS==0); //Es estable la frecuencia ?
	//Inicializa Puertos
	ADCON0=0;
	ANSELH=0;
	TRISC=0;
	//Inicializa LCD
	lcd_init(CURSOR_OFF);

	lcd_rom_string("  ucursos.webs.com  ");
	lcd_gotoxy(1,2);
	lcd_rom_string("  LCD20x4 - 4 bits  ");
	DELAY1S();
	lcd_gotoxy(1,3);
	lcd_rom_string("      Hi tech       ");
	lcd_gotoxy(1,4);
	lcd_rom_string("     for PIC16      ");
	while(1);
}
----------------------------------------------------------------------
Practica simple de uso de pwm dual con LCD 20 x4

Código:
///////////////////////////////////////////////////////////
//TITULO: Control de PWM DUAL							///
//AUTOR: george.manson.69
//COMPILADOR: HI TECH (LITE MODE)
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////

#include<htc.h>			//Incluimos libreria del micro a usar
#include<stdio.h>
__CONFIG(UNPROTECT & WDTDIS & PWRTEN & INTIO & MCLREN & LVPDIS);
__CONFIG(DEBUGDIS & BORDIS);
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
//UNPROTECT	= Codigo no Potegido
//WDTDIS	= Watch Dog Timer Desactivado
//PWRTEN	= Power Activado
//INTIO		= Osiclador interno
//MCLREN	= Activamos Master Clear
//LVPDIS	= Low Voltage Porgramming Desactivado
//DEBUGDIS	= Desactiva Debug
//BOR		= Desactivado
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#define _XTAL_FREQ 8000000 //Oscilador Interno de 8MHZ
#include"timer2/timer2.h"//LLama la libreria de usar Timer2
#include"pwmdr/pwm.h"	 //LLama libreria para usar PWM
#include"lcd4bits/lcd.h" //Libreria para LCD
#include"libADC/adcdr.h"//Inluimos libreria de trabajo con ADC
////////////////////////////////////////////
//VARIABLES GLOBALES
///////////////////////////////////////////
unsigned char buffer[25];
unsigned int adc[2];
//////////////////////////////////////////////////
//Funcion de segundo
//////////////////////////////////////////////////
void DELAY1S(void){
	unsigned char seg;
	for(seg=0;seg<100;seg++){
		__delay_ms(10);
	}
}
/////////////////////////////////////////////////
//Funcion de interrupcion
//Si no se usa simplemente no hacemos nada...
//Esto sirve para direccionar lo los datos
//en un lugar muy cercano al Inicio de la memoria
//de datos
////////////////////////////////////////////////
static void interrupt
isr(void){}
/////////////////////////////////////////////////
//Funcion Principal
/////////////////////////////////////////////////
void main(void){
///////////////////////////////////
//Registro para trabajar a 8MHZ
///////////////////////////////////
	OSCCON=0x70;
	while(HTS==0); //Es estable la frecuencia ?
	//Inicializa Puertos
	TRISC=0;
	TRISA=0x03;
	//Configuramos TIMER 2 para PWM
	OpenTimer2(PRESCALE_16);
	//Usamos libreria PWM
	OpenPwm(61);
	//PWM period =   [(period  ) + 1] x 4 x Tosc x TMR2 prescaler
	//PWM period =   [(255)+1]x(4/4Mhz)x16
	// [.001s/((4/4Mhz)*16)]-1=period 
	// [1/(f*(4/Tosc)*preescalar)]-1=period
	//Configuracion del ADC
	OpenADC(FOSC_FRC,AN0_AN1,OFF);
							//Oscilador interno
							//AN0 como entrada analogo
							//PORTB sin analoga
	//Inicializa LCD
	lcd_init(CURSOR_OFF);
	GIE=0;					//INTERRUPCIONES GLOBALES DesACTIVADAS
	PEIE=0;					//DesACTIVA INTERURPCIONES POR PERIFERICOS
////////////////////////////////////////////////////////////
	PwmDuty(0); //1023=100% 512=50% de duty
	PwmDuty2(0);//1023=100% 512=50% de duty

	lcd_rom_string("Control de PWM-dual ");
	DELAY1S();
	while(1){
		for(unsigned char ch=0;ch<2;ch++){
			channelADC(ch);
			__delay_ms(1);
			startADC();
			while(GODONE!=0);
			adc[ch]=readADC();
			if(adc[ch]<10) adc[ch]=0;
		}
		PwmDuty(adc[0]); //1023=100% 512=50% de duty
		PwmDuty2(adc[1]);//1023=100% 512=50% de duty
		sprintf(buffer,"PWM1= %u %% ",(unsigned int)(((unsigned long)adc[0]*100)/1023));
		lcd_gotoxy(1,2);
		lcd_ram_string(buffer);
		sprintf(buffer,"PWM2= %u %% ",(unsigned int)(((unsigned long)adc[1]*100)/1023));
		lcd_gotoxy(1,3);
		lcd_ram_string(buffer);
		__delay_ms(10);	
	}
			
	while(1);
}
Imágenes Adjuntas
Tipo de Archivo: jpg 100_0213.JPG (246,5 KB (Kilobytes), 19 visitas)
Tipo de Archivo: jpg 100_0215.JPG (249,9 KB (Kilobytes), 17 visitas)
Archivos Adjuntos
Tipo de Archivo: zip LCD20x4.zip (2,9 KB (Kilobytes), 93 visitas)
Tipo de Archivo: zip control_dual_pwm.zip (7,1 KB (Kilobytes), 92 visitas)
24/01/2011 #29

Avatar de george.manson.69

Control de Lampara 12 Volts
Simple controlador de lampara de 12 volts DC con PWM
usando la libreria de LCD3 wires para Usar menor pines del Micro


Imágenes Adjuntas
Tipo de Archivo: jpg SCH10.jpg (49,5 KB (Kilobytes), 41 visitas)
Tipo de Archivo: jpg 100_0217.JPG (242,0 KB (Kilobytes), 16 visitas)
Archivos Adjuntos
Tipo de Archivo: zip main.zip (12,9 KB (Kilobytes), 79 visitas)
07/02/2011 #30

Avatar de george.manson.69

System of Fuzzy Logic Con PIC18
Manual Completo para programar un PIC18 para un sistema Difuso.
Espero sus Comentarios.

Video!

Imágenes Adjuntas
Tipo de Archivo: jpg 100_0238.JPG (356,9 KB (Kilobytes), 16 visitas)
Tipo de Archivo: jpg fuzzy.jpg (80,5 KB (Kilobytes), 26 visitas)
Archivos Adjuntos
Tipo de Archivo: pdf Aplicando Sistemas de Lógica Difusa en Sistemas Embebidos.pdf (750,1 KB (Kilobytes), 346 visitas)
Tipo de Archivo: zip main.zip (16,0 KB (Kilobytes), 109 visitas)
07/02/2011 #31

Avatar de Moyano Jonathan

Muy completo he interesante tu proyecto !
26/03/2011 #32

Avatar de george.manson.69

Curso de Hi tech Compiler for PIC18
En esta vez les traigo un gran manual de uso de Hi tech compiler:
De los cuales los temas son los siguientes.:

Código:
Índice
1 Introducción a la programación en C
1.1 Estructura de un programa____________________________________________1
1.2 Tipos de datos_______________________________________________________2
1.3 Constantes__________________________________________________________2
1.4 Tipos de Variables____________________________________________________2
1.5 Operadores_________________________________________________________3
1.5.1 Asignaciones_____________________________________________________3
1.5.2 Aritmética_______________________________________________________4
1.5.3 Relaciones_______________________________________________________4
1.6 Funciones___________________________________________________________5
2 Declaraciones de Control
2.1 IF-ELSE________________________________________________________________6
2.2 SWITCH-CASE___________________________________________________________7
2.3 FOR___________________________________________________________________8
2.4 WHILE/DO/WHILE________________________________________________________9
2.5 COMENTARIOS___________________________________________________________11
PRIMER PROGRAMA___________________________________________________________11
3 TIMERS
3.1 Timer0_______________________________________________________________17
3.2 Interrupción por desbordamiento_________________________________________22
3.3 Práctica: Corrimiento___________________________________________________25
4 USART
4.1 Modo Asincrónico________________________________________________________28
4.2 Modo Sincrónico_________________________________________________________28
4.3 Velocidad de Comunicación_________________________________________________29
4.4 Norma R232_____________________________________________________________29
4.5 Conexión de un Microcontrolador____________________________________________29
4.6 El conector DB9___________________________________________________________29
4.7 MAX232_________________________________________________________________30
4.8 Función en Hi tech_________________________________________________________30
4.9 Practica: Uso del USART_____________________________________________________31
5 ADC ---------------------------------------------------------------------------------------------------------------37
6 CCP
6.1 Modo Captura ___________________________________________________________42
6.2 Modo PWM _____________________________________________________________48
6.3 Modo Comparador________________________________________________________54
7 GLCD -------------------------------------------------------------------------------------------------------------60
7.7 Voltímetro con GLCD_______________________________________________________67
8 MMC
8.1 Conexión y señales en las tarjetas MMC________________________________________72
8.2 Tarjeta SD________________________________________________________________72
8.3 Conexión y señales en las Tarjetas SD _________________________________________73
8.4 Funcionamiento general del Protocolo_________________________________________74
8.5 Comandos Modo SPI_______________________________________________________74
8.6 Típicas Conexiones ________________________________________________________78
8.7 Utilidades para la práctica __________________________________________________79
8.8 Librería para Manejo de Tarjetas MMC________________________________________80
8.9 Usando Librería ___________________________________________________________81
9 Usando WinHEX_____________________________________________________________84
10 Practicas
10.1 Visualizador de ADC con Display’s de 7 seg ______________________________________85
10.2 Contador de Eventos con Display de 7 seg _______________________________________96
10.3 Reloj _____________________________________________________________________101
10.4 Matriz de led 8x8 ___________________________________________________________108
10.5 Cambio de Matrix via USART __________________________________________________116
10.6 Matriz de corrimiento ________________________________________________________122
10.7 Cambio de Texto por USART ___________________________________________________127
10.8 Proyectos con LCD y Teclado 4x4 _______________________________________________132
10.9 GLCD & MMC: Proyector de Imágenes ___________________________________________153
Pueden bajarlo gratis.

en http://ucursos.webs.com

deja tus comentarios. SALU2
29/04/2011 #33

Avatar de george.manson.69

Control de adc con LABVIEW y PIC16
Simple enlace entre labview y pic16 usando serial.

Código:
///////////////////////////////////////////////////////////
//TITULO: USO DEL ADC y USART                                 ///
//AUTOR: george.manson.69
//COMPILADOR: HI TECH (LITE MODE)
//PAGE: http://ucursos.blogspot.com
//PAGE2:http://ucursos.webs.com
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////

#include<htc.h>        //Incluimos libreria del micro a usar
#include<stdio.h>    //libreria para trabajar con conversiones
#include"libUSART/usartdr.h" //Libreria creada para uso del usart
#include"libADC/adcdr.h"//Inluimos libreria de trabajo con ADC

__CONFIG(UNPROTECT & WDTDIS & PWRTEN & INTIO & MCLREN & LVPDIS);
__CONFIG(DEBUGDIS & BORDIS);
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
//UNPROTECT    = Codigo no Potegido
//WDTDIS    = Watch Dog Timer Desactivado
//PWRTEN    = Power Activado
//INTIO        = Osiclador interno
//MCLREN    = Activamos Master Clear
//LVPDIS    = Low Voltage Porgramming Desactivado
//DEBUGDIS    = Desactiva Debug
//BOR        = Desactivado
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
#define _XTAL_FREQ 8000000 //Oscilador Interno de 8MHZ

unsigned int adc;
unsigned char y;

///////////////////////////////
//Funcion de 1 segundo
////////////////////////////////
void Delay1S(void){
    unsigned char x;
    for(x=0;x<100;x++){
        __delay_ms(10);
    }
}
/////////////////////////////////////////////////
//Funcion de interrupcion
//Si no se usa simplemente no hacemos nada...
//Esto sirve para direccionar lo los datos
//en un lugar muy cercano al Inicio de la memoria
//de datos
////////////////////////////////////////////////
static void interrupt
isr(void){}
//////////////////////////////////////////////
//Funcion Principal
//////////////////////////////////////////////
void main(void){
///////////////////////////////////
//Registro para trabajar a 8MHZ
///////////////////////////////////
    OSCCON=0x70;
    while(HTS==0); //Es estable la frecuencia ?
    TRISA=0x01;
    TRISC=0x80;                //RB1=RX,RB2=TX
    //Configuracion del USART
    OpenUSART(25,OFF,OFF);    //value=(FOSC/(baud*16))-1
                            //SIN INTERRUPCIONES
                            //a 2400 baudios
    //Configuracion del ADC
    OpenADC(FOSC_FRC,AN0,OFF);
                            //Oscilador interno
                            //AN0 como entrada analogo
                            //PORTB sin analoga
//Desactivo Interrupciones GENERALES
    GIE=0;                    //INTERRUPCIONES GLOBALES DesACTIVADAS
    PEIE=0;                    //DesACTIVA INTERURPCIONES POR PERIFERICOS

    while(1){
        channelADC(0);        //Elige canal analogo
        Delay1S();            //Retardo de 1S para leer correctamente
        startADC();            //Empieza Ciclo de Conversion
        while(GODONE!=0);    //Ha terminado de convertir
        adc=readADC();        //Lee dato analogo
        printf("\fCanal Analogo 0 = %u",adc);//Imprime Dato analogo.
    }
    
}
Imágenes Adjuntas
Tipo de Archivo: jpg programa.jpg (37,9 KB (Kilobytes), 25 visitas)
Archivos Adjuntos
Tipo de Archivo: zip leer simplemente ADC.zip (208,9 KB (Kilobytes), 87 visitas)
30/04/2011 #34

Avatar de george.manson.69

Concepto de mas Entradas
Esta idea surge por la necesidad de adquirir mas entradas hacia el microcontrolador en este caso usar 6 pines del micro para obtener 16 entradas usando cirucitos 75HC151.

Imágenes Adjuntas
Tipo de Archivo: jpg imagen.jpg (51,0 KB (Kilobytes), 18 visitas)
Tipo de Archivo: jpg sch.jpg (135,9 KB (Kilobytes), 25 visitas)
Archivos Adjuntos
Tipo de Archivo: zip Concepto mas entradas.zip (169,9 KB (Kilobytes), 74 visitas)
01/05/2011 #35

Avatar de zoomg80

@f2504 dijo: Ver Mensaje
Buenas!
Primero que todo felicidades por el post! Apenas comienzo con C18 y ya presento problemas de los mas simples:
Tengo un 18F2550 con un pulsador en RA0, un LED en RB4, y este programa:
Código:
while(1){
  if(PORTAbits.RA0 == 1){
    LATB = 0x10;
    Delay10KTCYx(100);
    LATB = 0x00;
    Delay10KTCYx(100);
  }else{
    LATB = 0x00;
  }
}
En teoría el LED deberia prender y apagar cuando presiono el pulsador, pero solo se queda encendido.
Alguna idea?

Gracias de antemano

edit: Estoy utilizando el oscilador interno. Creo que por el ruido el LED no se veia titilar, sin embargo ya lo hace (si me alejo lo suficiente).
Hola

Tengo una rutina muy similar que use para enviar caracteres por el puerto serie al presionar un boton, al mismo tiempo enciendo el led para iluminarme.

Te dejo el fragmento espero te sirva, yo tampoco logro ver diferencia con tu codigo.


while (1){
while (Kbhit==0){ //Mientras no reciba dato USART
putrsXLCD("Hor:min:seg");
gotoxyXLCD(1,2);
putrsXLCD("dia y fecha");
if (BOTON == 1)
{
putrsUSART("AT+CMSS=2\r\n");
LED = 1;
comandXLCD(0x01);
putrsXLCD("Enviando mensaje");
Espera(); //Loop espera si se queda presionado boton
Delay10KTCYx(100);
Delay10KTCYx(100);
comandXLCD(0x01);
}else{
LED = 0;
}
}
Delay10KTCYx(100);
Delay10KTCYx(100);
Delay10KTCYx(100);
Delay10KTCYx(100);
Kbhit=0;
}
}
16/05/2011 #36

Avatar de george.manson.69

Entrenador via serial
Esta practica ofrece solo la ventaja de usar mas entradas digitales, donde usaremos un software que fie realizado en Visual c#.

Como podriamos ver en el video usamos pa la simulacion serial el programa Virtual Serial Port.

Imágenes Adjuntas
Tipo de Archivo: jpg hardware.jpg (195,5 KB (Kilobytes), 21 visitas)
Tipo de Archivo: jpg software.jpg (91,3 KB (Kilobytes), 13 visitas)
Archivos Adjuntos
Tipo de Archivo: zip Projects.zip (535,2 KB (Kilobytes), 99 visitas)
17/10/2011 #37

Avatar de mecatrodatos

Que tal george mirando tu post me dio la curiosidad por aprender, pude relizar esto con tu diseño y parte del programa donde manejas el nokia 3310 anexo la simulacion en proteus 7.7 y el programa en hi tech

Código:
#include <pic.h>  
#include <htc.h>
__CONFIG(FOSC_HS &   
  WDTE_OFF &   
  PWRTE_ON  &  
  BOREN_OFF &  
  MCLRE_ON &   
  LVP_OFF);  
#define GLCD_CS  RD0
#define GLCD_RST RD1
#define GLCD_DC  RD2
#define GLCD_SDA RD3
#define GLCD_SCLK RD4
#define _XTAL_FREQ 20000000
void pic_init(void);
void glcd8544_init(void);
void glcd8544_write(unsigned char c);
void glcd8544_goto(char x,char y);
void glcd8544_char(char c);
void glcd8544_string(const char *s);
static const char FontLookup[][5]={
{0x00,0x00,0x00,0x00,0x00},   // sp
{0x00,0x00,0x2f,0x00,0x00},   // !
{0x00,0x07,0x00,0x07,0x00},   // "
{0x14,0x7f,0x14,0x7f,0x14},   // #
{0x24,0x2a,0x7f,0x2a,0x12},   // $
{0xc4,0xc8,0x10,0x26,0x46},   // % 
{0x36,0x49,0x55,0x22,0x50},   // &
{0x00,0x05,0x03,0x00,0x00},   // '
{0x00,0x1c,0x22,0x41,0x00},   // (
{0x00,0x41,0x22,0x1c,0x00},   // )
{0x14,0x08,0x3E,0x08,0x14},   // *
{0x08,0x08,0x3E,0x08,0x08},   // +
{0x00,0x00,0x50,0x30,0x00},   // ,
{0x10,0x10,0x10,0x10,0x10},   // -
{0x00,0x60,0x60,0x00,0x00},   // .
{0x20,0x10,0x08,0x04,0x02},   // /
{0x3E,0x51,0x49,0x45,0x3E},   // 0
{0x00,0x42,0x7F,0x40,0x00},   // 1
{0x42,0x61,0x51,0x49,0x46},   // 2
{0x21,0x41,0x45,0x4B,0x31},   // 3
{0x18,0x14,0x12,0x7F,0x10},   // 4
{0x27,0x45,0x45,0x45,0x39},   // 5
{0x3C,0x4A,0x49,0x49,0x30},   // 6
{0x01,0x71,0x09,0x05,0x03},   // 7
{0x36,0x49,0x49,0x49,0x36},   // 8
{0x06,0x49,0x49,0x29,0x1E},   // 9
{0x00,0x36,0x36,0x00,0x00},   // :
{0x00,0x56,0x36,0x00,0x00},   // ;
{0x08,0x14,0x22,0x41,0x00},   // <
{0x14,0x14,0x14,0x14,0x14},   // =
{0x00,0x41,0x22,0x14,0x08},   // >
{0x02,0x01,0x51,0x09,0x06},   // ?
{0x32,0x49,0x59,0x51,0x3E},   // @
{0x7E,0x11,0x11,0x11,0x7E},   // A
{0x7F,0x49,0x49,0x49,0x36},   // B
{0x3E,0x41,0x41,0x41,0x22},   // C
{0x7F,0x41,0x41,0x22,0x1C},   // D
{0x7F,0x49,0x49,0x49,0x41},   // E
{0x7F,0x09,0x09,0x09,0x01},   // F
{0x3E,0x41,0x49,0x49,0x7A},   // G
{0x7F,0x08,0x08,0x08,0x7F},   // H
{0x00,0x41,0x7F,0x41,0x00},   // I
{0x20,0x40,0x41,0x3F,0x01},   // J
{0x7F,0x08,0x14,0x22,0x41},   // K
{0x7F,0x40,0x40,0x40,0x40},   // L
{0x7F,0x02,0x0C,0x02,0x7F},   // M
{0x7F,0x04,0x08,0x10,0x7F},   // N
{0x3E,0x41,0x41,0x41,0x3E},   // O
{0x7F,0x09,0x09,0x09,0x06},   // P
{0x3E,0x41,0x51,0x21,0x5E},   // Q
{0x7F,0x09,0x19,0x29,0x46},   // R
{0x46,0x49,0x49,0x49,0x31},   // S
{0x01,0x01,0x7F,0x01,0x01},   // T
{0x3F,0x40,0x40,0x40,0x3F},   // U
{0x1F,0x20,0x40,0x20,0x1F},   // V
{0x3F,0x40,0x38,0x40,0x3F},   // W
{0x63,0x14,0x08,0x14,0x63},   // X
{0x07,0x08,0x70,0x08,0x07},   // Y
{0x61,0x51,0x49,0x45,0x43},   // Z
{0x00,0x7F,0x41,0x41,0x00},   // [
{0x55,0x2A,0x55,0x2A,0x55},   // 55
{0x00,0x41,0x41,0x7F,0x00},   // ]
{0x04,0x02,0x01,0x02,0x04},   // ^
{0x40,0x40,0x40,0x40,0x40},   // _
{0x00,0x01,0x02,0x04,0x00},   // '
{0x20,0x54,0x54,0x54,0x78},   // a
{0x7F,0x48,0x44,0x44,0x38},   // b
{0x38,0x44,0x44,0x44,0x20},   // c
{0x38,0x44,0x44,0x48,0x7F},   // d
{0x38,0x54,0x54,0x54,0x18},   // e
{0x08,0x7E,0x09,0x01,0x02},   // f
{0x0C,0x52,0x52,0x52,0x3E},   // g
{0x7F,0x08,0x04,0x04,0x78},   // h
{0x00,0x44,0x7D,0x40,0x00},   // i
{0x20,0x40,0x44,0x3D,0x00},   // j
{0x7F,0x10,0x28,0x44,0x00},   // k
{0x00,0x41,0x7F,0x40,0x00},   // l
{0x7C,0x04,0x18,0x04,0x78},   // m
{0x7C,0x08,0x04,0x04,0x78},   // n
{0x38,0x44,0x44,0x44,0x38},   // o
{0x7C,0x14,0x14,0x14,0x08},   // p
{0x08,0x14,0x14,0x18,0x7C},   // q
{0x7C,0x08,0x04,0x04,0x08},   // r
{0x48,0x54,0x54,0x54,0x20},   // s
{0x04,0x3F,0x44,0x40,0x20},   // t
{0x3C,0x40,0x40,0x20,0x7C},   // u
{0x1C,0x20,0x40,0x20,0x1C},   // v
{0x3C,0x40,0x30,0x40,0x3C},   // w
{0x44,0x28,0x10,0x28,0x44},   // x
{0x0C,0x50,0x50,0x50,0x3C},   // y
{0x44,0x64,0x54,0x4C,0x44}    // z
};
main(void)
{
pic_init();      
glcd8544_init();     
__delay_ms(250);
for(;;){
 glcd8544_goto(0,0);
 glcd8544_string("PRUEBA HI-TECH");
 glcd8544_string("  84X48 GLCD  ");
 glcd8544_string("NOKIA 3310 LCD");
 glcd8544_string("              ");
 glcd8544_string("              ");
 glcd8544_string("              ");
 __delay_ms(1000);
 glcd8544_goto(0,0);
 glcd8544_string("              ");
 glcd8544_string("              ");
 glcd8544_string("              ");
 glcd8544_string(" PIC 16F887 ");
 glcd8544_string("    GRACIAS    ");
 glcd8544_string("  GEORGE MANSON ");
 __delay_ms(1000);
}}
void pic_init(void)
{
TRISA=0b00010000;
TRISB=0b00000000;
TRISC=0b00000000;
TRISD=0b00000000;
TRISE=0b00000000;
ANSEL=0b00000000;
ANSELH=0b00000000;   
PORTA=0b00000000;
PORTB=0b00000000;
PORTC=0b00000000;
PORTD=0b00000000;
PORTE=0b00000000;
}
 
void glcd8544_init(void)
{
GLCD_RST=1;
__delay_ms(15);  
glcd8544_write(0x21);  
glcd8544_write(0xC0);  
glcd8544_write(0x13);   
glcd8544_write(0x20);   
glcd8544_write(0x0C);   
}
 
void glcd8544_write(unsigned char c)   
{int i;
GLCD_CS=0;
for(i=7;i>=0;i--){
 if(((c>>i)&1)==1) GLCD_SDA=1;
 else GLCD_SDA=0;
 GLCD_SCLK=0;
 GLCD_SCLK=1;}
GLCD_CS=1;
}
 
void glcd8544_goto(char x, char y)
{
GLCD_DC=0;
glcd8544_write(0x40+y);
glcd8544_write(0x80+x);
GLCD_DC=1;
}
 
void glcd8544_char(char c)    
{int i;
for(i=0;i<5;i++) glcd8544_write(FontLookup[c-32][i]);
glcd8544_write(0x00);  
}
 
void glcd8544_string(const char *s) 
{
GLCD_DC=1;
while(*s)      
glcd8544_char(*s++);  
}
Pero me sale un mensaje en la compilacion que el programa se puede potencializar en un 40%
Archivos Adjuntos
Tipo de Archivo: rar picc.rar (108,8 KB (Kilobytes), 78 visitas)
03/03/2013 #38


que tal saludos, alguien tiene algun link o info para usar el modulo USB de un pic18f4550 en el compilador C18?
20/04/2013 #39


Que tal foreros tengo una duda con el protocolo I2C no se como utilizar las funciones del compilador C18 para hacerlo funcionar, intente seguir un tutorial de c18 donde venia un ejemplo para escribir y leer en una eeprom pero no me simulo bien y tambien el ejemplo de este tema y no me simula bien y ya no eh encontrado otro ejemplo, de casualidad alguien x favor tiene algun ejemplo sencillo de I2C en C18, o un tutorial lo necesito la comunicacion para obtener datos de un sensor hmc5883l pero no eh ni podido siquiera simular con una eeprom para leer y escribir datos, es para un pic18f458 gracias, mientras seguire intentando con el ejemplo de este tema
21/04/2013 #40


Buenas tardes

Quiero coectar un teclado de 4x4 por el potrD de mi pic18f4550 en Mpab C18..Que puedo hacer.. quien me puede orientar
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.