DTForuM


BIENVENIDO AL NUEVO DTForuM -- Ya están habilitadas las descargas -- Si tienes alguna duda sobre el uso, puedes publicar tu mensaje en MENSAJES PARA EL STAFF ... .... D T F o r u M .... El de siempre, pero mejor !! 
..:: DTForuM.INFO ::.. Manuales de Servicio y toda la Información técnica - Uniendo a los amantes de la electrónica de todo el mundo. From here, to the world !!! 
..:: DTForuM.INFO ::.. Antes de pedir información, búsquela presionando el botón BUSCAR.

..:: DTForuM.INFO ::.. Punto de reunión de amantes de la electrónica.
DESTACADOS, la zona con lo mejor de DTForuM.INFO  ( Hacé click ) ..:: DTForuM.INFO ::.. ..:: 2005- 2006- 2007- 2008- 2009-2010- 2011- 2012- 2013- 2014- 2015- 2016- 2017-2018 ::..
..:: DTForuM.INFO ::.. Uniendo Técnicos desde hace más de 13 años !! ...::DTForuM.INFO::... ...:::La mayor Comunidad de intercambio de Información Técnica:::... El de siempre, pero mejor !!

AllDataSheets

Buscar Datasheet
Buscar en AllDatasheet.com

CuentaDigital

Web Amiga

Clase Nro 8 Curso C para PICs

Visitante · 28 · 16014

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

hector27

  • Visitante
Respuesta #28 on: septiembre 07, 2009, 20:20:13 pm
Lamentablemente aún no, y no creo que los tenga hasta finalizar el curso.
Saludos!
Héctor


Desconectado josebiafore

  • Miembro PREMIUM
  • SUPER MEMBER
  • *
    • Mensajes: 205
    • DT$ 111
  • Juntos todo lo podremos
Respuesta #27 on: septiembre 07, 2009, 19:22:05 pm
Colega: boticario-TUX

Me podrías informar si tenes pasado a pdf algunas clases mas, yo tengo la 1 y 2. Me interesan en ese formato para poderlas imprimir y encuadernar y poder leer en el bondi, ya que viajo 4 horas por dia para ir a mi trabajo y es mucho tiempo para desperdiciarlo.
En parte lo aproveche, gracias a ese tiempo me recibí de ingeniero en un año menos, ja ja ja.

José
José A.Biafore


Lucho2007

  • Visitante
Respuesta #26 on: septiembre 02, 2009, 02:50:07 am
Gracias Hector, si lo probe y funciona ok.  En mis intentos por solucionar el problema pense en algo parecido, pero al momento de hacer mi codigo y mandaba imprimir por ejemplo : putsXLCD(imp2[1]) el compillador me mandaba error.
Ahora veo que era necesario usar otra funcion: putcXLCD,, una mas para el Libro
 graciassss

saludos
Luis


hector27

  • Visitante
Respuesta #25 on: septiembre 01, 2009, 20:59:02 pm
La funcion itoa justifica el texto a la izquierda y no a la derecha, por lo cual siembre se vuelve un poco engorroso querer poner un campo fijo en el display, sumado a eso habias usado contadores separados para decimales y entero, que lo hace mas complejo.
Lo simplifique poniendo un solo contador hasta 350 (será 35.0) y la impresion de los caracteres lo hago uno por uno con la funcion putcXLCD('.');
Ademas para corregir la justificacion a la izquirda de itoa, separo los tres casos posibles (un digito, 2 digitos y tres digitos)
Lo probé y funciona.
Saludos!
Héctor


#include "configuroPIC7.h"
#include "pwm_io.h"
#include <pwm.h>
//guardo las cadenas de texto en la ROM
#define STARTUP_MSG "  Temperatura  "
#define STARTUP_MSG2 "               "
#define LC "C       "
#define PUNTO_MSG "  .          "
const rom char punto[14] = PUNTO_MSG;
const rom char StartupMsg[16] = STARTUP_MSG;
const rom char StartupMsg2[16] = STARTUP_MSG2;
const rom char letraC[9]= LC;
const rom char CaracterEspecial[8] = { 0xEC,0xF2,0xF2,0xEC,0xE0,0xE0,0xE0,0xE0 };
void ponergC (void);
//funcion principal
void main(void)
{
int Ent  ;
//puntero para las cadenas de texto en RAM
char imp2[4]="   ";
int i;
TRISB = 0x00;
TRISA = 0b00000111;
TRISC = 0b10000000;
CMCON = 0b00000111;
CVRCON= 0b00000000;
T0CON=0b00001000;
INTCON=   0b01100000;
RCON=RCON&0b01111111; //BCF          RCON, IPEN,A
TXSTA=TXSTA&0b10101011;
TXSTA=TXSTA|0b10100000;
SPBRG=17;//baud rate=9600
RCSTA=RCSTA&0b10111111;
RCSTA=RCSTA|0b10010000;
ADCON0= 0b00000100;  //RA1
ADCON1= 0b00001111;
T1CON=0b01000110;
T2CON=0b00000111;
INTCONbits.GIE=0;
//inicializo el display para 4 bits, y 5x7 pixels
OpenXLCD( FOUR_BIT&LINES_5X7 );
DelayMs(50);


//pongo el cursor en la segunda linea, primer caracter.
SetDDRamAddr(0x40);
//limpio pantalla
putrxXLCD( StartupMsg2 );
//retardo para ver la presentacion



//pongo el cursor en la primer linea, primer caracter.
SetDDRamAddr(0x00);
//envio la cadena en ROM " TEMPERATURA " al display
putrxXLCD( StartupMsg );

while(1)
{
Ent = 0;//inicializo los enteros a 0
//SetDDRamAddr(0x42);
//putrxXLCD(punto);//imprimo el punto

SetCGRamAddr(0x00);
putrxXLCD(CaracterEspecial);
SetDDRamAddr(0x46);  //cursor 2° linea, 14° caracter
WriteDataXLCD(0x00);  //imprimo el caracter especial
SetDDRamAddr(0x47);
putrxXLCD(letraC);//imprimo la letra C



while(Ent < 350)//Hace una cuenta ascendente 0.0 a 35.0
{
itoa(Ent,imp2);//convierto el entero a ASCII y lo coloco en imp2
SetDDRamAddr(0x42); 
if(Ent<10){
putcXLCD(' ');
putcXLCD('0');
putcXLCD('.');
putcXLCD(imp2[0]);
}
if(Ent>9){
if(Ent<100){
putcXLCD(' ');
putcXLCD(imp2[0]);
putcXLCD('.');
putcXLCD(imp2[1]);
}
}

if(Ent>99){
putcXLCD(imp2[0]);
putcXLCD(imp2[1]);
putcXLCD('.');
putcXLCD(imp2[2]);
}


DelayS4();
Ent = Ent + 1;
}
}
}


Lucho2007

  • Visitante
Respuesta #24 on: septiembre 01, 2009, 19:47:45 pm
Alli va el codigo

#include "configuroPIC7.h"
#include "pwm_io.h"
#include <pwm.h>
//guardo las cadenas de texto en la ROM
#define STARTUP_MSG "  Temperatura  "
#define STARTUP_MSG2 "               "
#define LC "C       "
#define PUNTO_MSG "  .          "
const rom char punto[14] = PUNTO_MSG;
const rom char StartupMsg[16] = STARTUP_MSG;
const rom char StartupMsg2[16] = STARTUP_MSG2;
const rom char letraC[9]= LC;
const rom char CaracterEspecial[8] = { 0xEC,0xF2,0xF2,0xEC,0xE0,0xE0,0xE0,0xE0 };
void ponergC (void);
//funcion principal
void main(void)
{
int Dec, Ent  ;
//puntero para las cadenas de texto en RAM
char imp2[2]=" ";
char imp[1]="";
char CAR;
int i;
TRISB = 0x00;
TRISA = 0b00000111;
TRISC = 0b10000000;
CMCON = 0b00000111;
CVRCON= 0b00000000;
T0CON=0b00001000;
INTCON=   0b01100000;
RCON=RCON&0b01111111; //BCF          RCON, IPEN,A
TXSTA=TXSTA&0b10101011;
TXSTA=TXSTA|0b10100000;
SPBRG=17;//baud rate=9600
RCSTA=RCSTA&0b10111111;
RCSTA=RCSTA|0b10010000;
ADCON0= 0b00000100;  //RA1
ADCON1= 0b00001111;
T1CON=0b01000110;
T2CON=0b00000111;
INTCONbits.GIE=0;
//inicializo el display para 4 bits, y 5x7 pixels
OpenXLCD( FOUR_BIT&LINES_5X7 );
DelayMs(50);


//pongo el cursor en la segunda linea, primer caracter.
SetDDRamAddr(0x40);
//limpio pantalla
putrxXLCD( StartupMsg2 );
//retardo para ver la presentacion



//pongo el cursor en la primer linea, primer caracter.
SetDDRamAddr(0x00);
//envio la cadena en ROM " TEMPERATURA " al display
putrxXLCD( StartupMsg );
while(1)
{
Ent = 0;//inicializo los enteros a 0
Dec = 0;//inicializo los decimales a 0
SetDDRamAddr(0x42);
putrxXLCD(punto);//imprimo el punto

SetCGRamAddr(0x00);
putrxXLCD(CaracterEspecial);
SetDDRamAddr(0x46);  //cursor 2° linea, 14° caracter
WriteDataXLCD(0x00);  //imprimo el caracter especial
SetDDRamAddr(0x47);
putrxXLCD(letraC);//imprimo la letra C



while(Ent < 35)//Hace una cuenta ascendente 0.0 a 35.0
{
itoa(Ent,imp2);//convierto el entero a ASSCI y lo coloco en imp2
if (Ent < 10)//si el entero solo tiene un digito
{
CAR = imp2[1];       //Intercambio la posicion de los
imp2[1] = imp2[2];   //los caracteres-uno de ellos es vacio
imp2[2] = CAR;       //Usando CAR
SetDDRamAddr(0x42); 
putsXLCD(imp2);  //imprimo el caracter
}
if (Ent > 9)//si Entero tiene 2 digitos
{
SetDDRamAddr(0x42);//imprimirlo tal como es
putsXLCD(imp2);
}
while(Dec < 10)// haciendo la cuenta e imprimiendo los decimales
{
itoa(Dec,imp);//con lo cual no hay problema
SetDDRamAddr(0x45);
putsXLCD(imp);
DelayS();

Dec = Dec + 1;
}
Dec = 0;
Ent = Ent + 1;
}

}

}

 abrazoo


Que opinan?
gracias


hector27

  • Visitante
Respuesta #23 on: septiembre 01, 2009, 07:58:52 am
Si no subes el programa que haz hecho, con las modificaciones, va a ser dificil!  Jejeje Jejeje Jejeje Jejeje Jejeje Jejeje

Saludos!
Héctor


Lucho2007

  • Visitante
Respuesta #22 on: septiembre 01, 2009, 03:15:24 am
Gracias Hector ; al parecer  el problema de la basurilla que se metia al LCD, era que al compilar me salian varias adevertencias o Warning, pero como no me salia error y terminaba de compilar, probaba con el Hex generado. Arregle algunos programas que probe y ya funcionan bien. Al parecer el programador esta bueno. En todo caso esta en observacion.
Ahora tengo un problemita, como habran visto quiero representar en el display °C (grados centigrados) desde 0.0 hasta 35.0, el problema que tengo es que no puedo representar 0.0 sino me sale 0 .0, es decir me sale un espacio vacio despues del punto decimal y cuando llega a 10.0 recien se completa.
Alguien sabe como mejorar esa presentacion

Gracias


hector27

  • Visitante
Respuesta #21 on: agosto 31, 2009, 18:28:59 pm
Eso es lo que hice ayer !!!
Por favor, en mi mensaje anterior subí tu programa, con muy pocas modificaciones, el cual compilé y probé en la plaxa, con funcionamiento correcto.
Saludos!
Héctor


Lucho2007

  • Visitante
Respuesta #20 on: agosto 31, 2009, 12:11:31 pm
Los dos digitos los separe por un espacio para colocar en ese lugar el punto decimal.
Un favor Hector, podrias probar el pic con el programa, en el "entrenador" donde hacemos los TPs, para ver que funcione bien en el LCD y descartar definitivamente mi quemador.

Gracias


hector27

  • Visitante
Respuesta #19 on: agosto 30, 2009, 22:03:51 pm
Compilé tu programa y me dió tres advertencias (warnings) de tamaños mas grande que la definicion de 3  arrays en los mensajes, los corregí y anda bien.
Ví que los dos digitos estaban separados por un espacio y los junte.
adjunto el proyecto (hay archivos de mas, porque en un primer momento crei que usabas el adc y no el pwm).
Saludos!
Héctor


Lucho2007

  • Visitante
Respuesta #18 on: agosto 30, 2009, 20:42:29 pm
En el programa hay algunos comentarios que no concuerdan ya que chanque un programa y se me olvido borrarlos

Luis


Lucho2007

  • Visitante
Respuesta #17 on: agosto 30, 2009, 20:39:03 pm
Gracias Hector por tu respuesta, si el codigo me parece que esta bien, y lo de las llaves y la inclusion de la inicializacion si la hice, creo que tengo un problema con mi quemador, les cuento. Ayer estuve tratando de hacer una parte de mi proyecto, lo que es la presentacion en el LCD de la indicacion de temperatura. Lo que hice fue hacer un contador desde 0.0 hasta 35.0 °C, con la presentacion del caracter especial °,la letra C, el punto decimal y los enteros y decimales, quise agarrar practica tambien con el manejo de LCD. Y bueno hice mi programa y notaba que luego de quemar el PIC con varios programas de prueba haciendo mejoras, a veces me funcionaba bien y a veces me salian codigos "basurita" en el display mezclado con algun caracter que si mande. Pense que era algun falso contacto en mi quemador, lo revise y no encontre nada anormal. Bueno hice una prueba con un codigo que programe, queme el PIC y no me funciono, volvi a quemar el PIC como tres veces e hiba probando, todos con el mismo hex, hasta que funciono tal como me esperaba, con cierto error que faltaba mejorar ya en el programa.

Parece que mi quemador tiene un problemita, yo uso un llamado ECLIPSE que lo encontre en la red, quisiera porfavor si alguien sabe de un quemador confiable por puerto USB y que funcione con WINDOWS VISTA para poder hacerlo.  En el foro vi uno que es el GTP-USB y mencionan un  link para descargarlo, pero parece que ya vencio su permanencia.

Aqui les dejo mi codigo para ver si se puede hacer alguna mejora

  #include "configuroPIC7.h"
#include "pwm_io.h"
#include <pwm.h>
//guardo las cadenas de texto en la ROM
#define STARTUP_MSG "  Temperatura  "
#define STARTUP_MSG2 "                "
#define LC "C       "
#define PUNTO_MSG "  .           "
const rom char punto[14] = PUNTO_MSG;
const rom char StartupMsg[16] = STARTUP_MSG;
const rom char StartupMsg2[16] = STARTUP_MSG2;
const rom char letraC[9]= LC;
const rom char CaracterEspecial[8] = { 0xEC,0xF2,0xF2,0xEC,0xE0,0xE0,0xE0,0xE0 };
void ponergC (void);
//funcion principal
void main(void)
{
int Dec, Ent  ;
//puntero para las cadenas de texto en RAM
char imp2[2]="  ";
char imp[1]=" ";
int i;
TRISB = 0x00;
TRISA = 0b00000111;
TRISC = 0b10000000;
CMCON = 0b00000111;
CVRCON= 0b00000000;
T0CON=0b00001000;
INTCON=   0b01100000;
RCON=RCON&0b01111111; //BCF          RCON, IPEN,A
TXSTA=TXSTA&0b10101011;
TXSTA=TXSTA|0b10100000;
SPBRG=17;//baud rate=9600
RCSTA=RCSTA&0b10111111;
RCSTA=RCSTA|0b10010000;
ADCON0= 0b00000100;  //RA1
ADCON1= 0b00001111;
T1CON=0b01000110;
T2CON=0b00000111;
INTCONbits.GIE=0;
//inicializo el display para 4 bits, y 5x7 pixels
OpenXLCD( FOUR_BIT&LINES_5X7 );
DelayMs(50);


//pongo el cursor en la segunda linea, primer caracter.
SetDDRamAddr(0x40);
//envio la cadena en ROM "DTForum" al display
putrxXLCD( StartupMsg2 );
//retardo para ver la presentacion



//pongo el cursor en la primer linea, primer caracter.
SetDDRamAddr(0x00);
//envio la cadena en ROM " TEMPERATURA " al display
putrxXLCD( StartupMsg );

Ent = 0;
Dec = 0;
SetDDRamAddr(0x42);
putrxXLCD(punto);

SetCGRamAddr(0x00);
putrxXLCD(CaracterEspecial);
SetDDRamAddr(0x46);  //cursor 2° linea
WriteDataXLCD(0x00);  //imprimo el caracter especial
SetDDRamAddr(0x47);
putrxXLCD(letraC);



while(Ent < 35)
{itoa(Ent,imp2);
if (Ent < 10)
{
imp2[1]=' ';
}
SetDDRamAddr(0x43);
putsXLCD(imp2);
while(Dec < 10)
{
itoa(Dec,imp);
SetDDRamAddr(0x45);
putsXLCD(imp);
DelayS();

Dec = Dec + 1;
}
Dec = 0;
Ent = Ent + 1;
}

}


cordiales saludos  abrazoo


hector27

  • Visitante
Respuesta #16 on: agosto 29, 2009, 22:12:32 pm
Rectifico, lo que hicistes aparenta estar bien, revisare con mas detalle.
A priori encuentro que no cerrastes con una llave la funcion main.
Y tampoco inicializastes el display con:
OpenXLCD( FOUR_BIT&LINES_5X7 );
En el TP32 utilizamos un caracter especial.
Saludos!
Héctor
« Última Modificación: agosto 29, 2009, 22:17:28 pm por Boticario-TUX »


hector27

  • Visitante
Respuesta #15 on: agosto 29, 2009, 16:58:36 pm
El problema está en que despues del comando:
putrxXLCD(CaracterEspecial);
tienes que enviar el bitmap con el caracter especial, y asi, si lo creas por primera vez, será el caracter 0x00.
Luego imprimes el caracter 0x00 y listo.
En cuanto pueda haré ese ejercicio en el proximo TP.
Saludos!
Héctor


Lucho2007

  • Visitante
Respuesta #14 on: agosto 29, 2009, 14:59:56 pm
Gracias, ya pude solucionar el problema, volvi a hacer el procedimiento que siempre hacia y ahora ya me compila.
Debi haber cometido un error la primera vez
Estoy tratando de mostrar por el LCD    °C , grados centigrados, pero como no figura con codigo ascci para el LCD el ° tuve que crearlo con caracter especial lo cual me salio, pero ahora al tratar de imprimir la C a su lado se me hace un problema ya que es un solo caracter no un String. He intentado de esta manera pero me imprime el " & "


#define STARTUP_MSG " INDICADOR"
#define STARTUP_MSG2 "DE TEMPERATURA"
#define LC "C"
const rom char letraC = LC;
const rom char StartupMsg[16] = STARTUP_MSG;
const rom char StartupMsg2[16] = STARTUP_MSG2;
const rom char CaracterEspecial[8] = { 0xEC,0xF2,0xF2,0xEC,0xE0,0xE0,0xE0,0xE0 };
void ponergC (void);



void main (void)
{

ponergC();


/=========================================
//Funcion pone °C
//=========================================

void ponergC (void)
{
SetCGRamAddr(0x00);
putrxXLCD(CaracterEspecial);
SetDDRamAddr(0x4E);  //cursor 2° linea, 14° caracter
WriteDataXLCD(0x00);  //imprimo el caracter especial
SetDDRamAddr(0x4F);
putsXLCD(letraC);  //imprimo C
return;
}


saludos


Tags: