Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - MARCO_RECARGADO

#31

CitarHola Marcos Recargado,  estoy estudiando tus post, pero en el ejemplo de 2 displays de 7 segmentos, no entiendo como es la lògica.
No puedo ver el Proteus pero ¿como se hace el multiplexado de los displays. Sino, como se haria con CSS? ¿estas usando un conversor de binario a bcd no? no puedo seguir el pedazo de codigo donde suma 10 a count


mira los displays van a un decodificador bcd las terminales portb0-portb3 estan a un decodificador y las terminales portb4-portb7 al otro decodificador

vamos viendo paso a paso que se esta haciendo

Citarconteo=conteo+1;
en este segmento obviamente estoy incrementando en uno a la variable contador

Citarif((conteo&0x0f)>9)
en este estoy haciendo una operacion logica AND de la variable conteo con el numero 0x0f ¿y que diablos obtengo de esto? facil que yo seleccione mi parte baja de lo que contiene esta variable es decir si mi variable conteo=0b1111 0101 que es igual a conteo=0xf5 al hacer esta operacion yo tengo como resultado conteo=0x05 es decir anule la parte alta ya una vez hecho esto la compara con si es mayor a 9 si es mayor a 9 significa que estoy en el 10 pero en hexadecimal seria 0x0A y ese no es el valor que quiero sino quiero este 0x10

Citar{  conteo=conteo+10; conteo=conteo&0xf0;  }

por eso a la hora de que es mayor a nuevo yo le sumo 10 para que me de el numero hexadecimal que deseo

if(conteo>99) {conteo=0;}
por ultimo si ya llego a 99 lo reseteo porque recuerda que esta varialbe como fue declarada de tipo int es una variable que puede llegar hasta 255.
Espero haberte ayudado
#32
Perdon por este enorme receso pero no habia podido entrar al foro, porque mi computadora se me habia quemado y por tanto no podia grabar mis pics y bla bla bla.
Citar1-asignas la dccion del puerto B a tu gusto? o es la dccion qeu la datasheet del pic establece para este modelo?
La direccion del puertoB ya esta dada por la misma arquitectura del micro puedes abrir la el archivo donde se encuentra la libreria del 16f877.h la ruta generalmente es esta
C:\Archivos de programa\PICC\Devices ahi veras que el mismo programa ya tiene definidos el nombre de los parametros del pic.

y la instruccion
Citar#byte PORTB = 6              //declaramos a la variable PORTB

solo que asocio la variable PORTB a la direccion 0x06

Citar2-el 6  está en decimal o en hexa? (en este caso, si el nro es 6 en decimal, en hexa es lo mismo, pero quiero ver si la sintaxis obliga a poner 0x06 por ejemplo)

el programa lo asocia por default como decimal sin embargo te da la direccion  pero si tu pusieras 54 la direccion a la que te referirias no seria la 0x54 sino a 0x36

Citar3-eso ya no està definido cuando pones #include<16F84>  ?

En efecto tienes razon cuando se pone la libreria ahi ya tienes definido varios parametros, pero no con el mismo nombre que yo les asigno en este caso por ejemplo tiene definido

#define PIN_A0  40
#define PIN_A1  41
#define PIN_A2  42
#define PIN_A3  43
#define PIN_A4  44
#define PIN_A5  45

sin embargo para comodidad mia le pongo variables con los que yo lo relaciono mas inmediatamente

Citar4-para acceder al bit 3 del puertoB deberia acceder a la dccion de memoria  6*8+3=51? o hay alguna manera ya optimizada en el CSS (soy nuevo enel CSS  )

bueno con lo anterior puedes ver que se tiene acceso a un solo bit en especifico y no tienes que declararlo te recomiendo nuevamente leer la libreria y si te gusta de esa forma pues usarlos asi.

por ejemplo para encender el bit 5 del puerto a tendiras que hacer lo sigueinte
PIN_A5=1;


espero haber resuelto tus dudas.
y perdonen nuevamente la demora de mis respuestas las estare contestando en el transcurso de la sigueinte semana
#33
Por tu comentario creo que voy muy rapido. El proposito de este tutorial es que cualquiera que no sepa sobre la programacion de pics en lenguaje c aprende con estas practicas, pero ya deben tener un conocimiento sobre pics al menos en ensamblador.En dado caso que no lo tengan pues las practicas que ponga en c por muy sencillas que esten no se podran comprender.

El mejor tutorial que conozco para iniciarse en C con los PICS lo encontre en un foro de electronica, no se si este bien poner el link del foro pues pareceria que le hago publicidad, si quieres el link mandame un mensaje privado y te lo paso, de hecho es el mejor foro con respecto a pics que encontre en español. Aunque en lo personal me gustaria que trataramos de hacerlo todo aqui.

Ahora yo empece a programar pics en ensamblador (en lo que a mi respecta es lo primer paso para pics) y despues segui con lenguaje C. Pero ya tenia algunos años de experiencia en ensamblador, aun asi puedes empezar a programar en C sin tener conocimientos de pics. El primer consejo para empezar es leer el manual del pic que quieres porgramar en www.microchip.com puedes bajar los manuales de cualquier pic ahora si el ingles no es lo tuyo en la red andan circulando varias guias del PIC16F84A que es uno de los pics mas basicos ademas de que es del que hay mas informacion o si lo deseas puedes ver el manual en español pero del PIC16F877 que esta al principo de este tema. Eso es basico sin leer esos manuales no podras entender mucho, aun en ensamblador.

Con respecto a el protocolo i2c es muy facil implementarlo en C. voy a hacer un programa de ejemplo.

PD Espero haberte ayudado hasta pronto
#34
Hola pues en esta ocasion la practica consiste en leer un reloj de tiempo real.
con ayuda de una libreria

////////////////////////////////////////////////////////////////////////////////
////////////ESTE PROGRAMA UTILZA EL CIRCUITO DS1307 PARA MOSTRAR LA ////////////
//////////HORA EN TIEMPO REAL A TRAVEZ DE UNOS DISPLAY´S DE 7 SEGMENTOS/////////
//////////EL PROGRAMA PARA SIMULARLO EN PROTEUS SE LLAMA RELOJ TIEMPO REAL//////
////////////////////////BY MARCO RECARGADO//////////////////////////////////////

#include <16F877A.h>                ///   libreria para el manejo del pic16f877a
#use delay(clock=8000000)          ///   declara  la frecuencia del cristal
#fuses HS,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT
#use i2c(Master, SDA=PIN_C4, SCL=PIN_C3)
#include <ds1307.c>

int32 tiempo_real=0;
long dato_1=0;
long dato_2=0;
long dato_3=0;
long dato_4=0;
long dato_5=0;
long dato_6=0;

#use fast_io(A)
#use fast_io(B)
//#use fast_io(C)                     ///   con esta instruccion evitamos que
#use fast_io(D)                     ///   se este configurando cada vez que usamos
#use fast_io(E)                     ///   alguna instruccion de entrada o salida


#byte portc = 7                     /// se definen direcciones de memoria
#byte portd = 8


#bit portd0 = 0x08.0
#bit portd1 = 0x08.1
#bit portd2 = 0x08.2
#bit portd3 = 0x08.3
#bit portd4 = 0x08.4
#bit portd5 = 0x08.5
#bit portd6 = 0x08.6
#bit portd7 = 0x08.7

#bit portc0 = 0x07.0
#bit portc1 = 0x07.1
#bit portc2 = 0x07.2
#bit portc3 = 0x07.3
#bit portc4 = 0x07.4
#bit portc5 = 0x07.5
#bit portc6 = 0x07.6
#bit portc7 = 0x07.7


#bit dato_6a = dato_6.0
#bit dato_6b = dato_6.1
#bit dato_6c = dato_6.2
#bit dato_6d = dato_6.3

#bit dato_5a = dato_5.0
#bit dato_5b = dato_5.1
#bit dato_5c = dato_5.2
#bit dato_5d = dato_5.3

#bit dato_4a = dato_4.0
#bit dato_4b = dato_4.1
#bit dato_4c = dato_4.2
#bit dato_4d = dato_4.3

#bit dato_3a = dato_3.0
#bit dato_3b = dato_3.1
#bit dato_3c = dato_3.2
#bit dato_3d = dato_3.3


#bit dato_2a = dato_2.0
#bit dato_2b = dato_2.1
#bit dato_2c = dato_2.2
#bit dato_2d = dato_2.3

#bit dato_1a = dato_1.0
#bit dato_1b = dato_1.1
#bit dato_1c = dato_1.2
#bit dato_1d = dato_1.3

byte sec;
byte min;
byte hrs;
byte day;
byte month;
byte yr;
byte dow;


////////////////////////////////////////////////////////////////////////////////
////////funcion que manda el a desplagar informacion en los displays////////////
/////Tomese en cuenta que las conexiones de los puertos son las siguientes//////
//                               pc0=a                                        //
//                               pc1=b                                        //
//                               pc6=d                                        //
//                               pc7=c                                        //
//                               pd1=digito 6                                 //
//                               pd4=digito 5                                 //
//                               pd0=digito 4                                 //
//                               pd7=digito 3                                 //
//                               pd5=digito 2                                 //
//                               pd6=digito 1                                 //
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

void desplegar()

{

portd1=0;                       
portd4=0;
portd0=0;                        /// se inihiben los displays
portd7=0;
portd5=0;
portd6=0;


portc0=dato_6a;
portc7=dato_6b;
portc1=dato_6c;
portc6=dato_6d;



portd1=1;
portd1=0;


portc0=dato_5a;
portc7=dato_5b;
portc1=dato_5c;
portc6=dato_5d;
portd4=1;
portd4=0;


portc0=dato_4a;
portc7=dato_4b;
portc1=dato_4c;
portc6=dato_4d;
portd0=1;
portd0=0;


portc0=dato_3a;
portc7=dato_3b;
portc1=dato_3c;
portc6=dato_3d;
portd7=1;
portd7=0;


portc0=dato_2a;
portc7=dato_2b;
portc1=dato_2c;
portc6=dato_2d;
portd5=1;
portd5=0;


portc0=dato_1a;
portc7=dato_1b;
portc1=dato_1c;
portc6=dato_1d;
portd6=1;
portd6=0;

}
////////////////////////////////////////////////////////////////////////////////
//////////////////////Comienzo de la funcion principal//////////////////////////
////////////////////////////////////////////////////////////////////////////////
void main()
{

   ds1307_init();                           ///se inicializa el ds1307
   
   set_tris_a(0xff);
   set_tris_d(0x00);
   set_tris_b(0x00);
   set_tris_c(0x04);
   set_tris_e(0x01);
   port_b_pullups(true);
 
  dato_1=8;
  dato_2=8;
  dato_3=8; 
  dato_4=8;
  dato_5=8; 
  dato_6=8; 
  desplegar();
 
  // Set date for -> 15 June 2005 Tuesday
  // Set time for -> 15:20:55 (9:49:00 am)
  ds1307_set_date_time(24,4,7,2,9,49,00);   /// se escribe ne le displositivo
 
  while(1)
  {
 
    delay_ms(1000);
   
  ds1307_get_date(day,month,yr,dow);        /// se obtiene la fecha 
  ds1307_get_time(hrs,min,sec);             /// se obtiene la hora
   
   
  ////////////////////bin2bcd(sec) funcion para pasar de binario(hasta 99) a bcd
 
  ////////////////////bcd2bin(sec) funcion para pasar de bcd(hasta 99) a binario
 
  sec=bin2bcd(sec);                         
  min=bin2bcd(min);                         
  hrs=bin2bcd(hrs);     
 
  dato_1=0x0f&sec;
  dato_2=swap(0xf0&sec);
  dato_3=0x0f&min;
  dato_4=swap(0xf0&min);
  dato_5=0x0f&hrs;
  dato_6=swap(0xf0&hrs);
  desplegar();
       
  }
}
/////////////////////////////  fin de programa  /////////////////////////////////////////////







si tienen alguna duda escribanla y tratare de contestarla lo mas pronto posible, tambien si quieren algun programa en especifico aqui entre todos trataremos de hayar la solucion, espero sus comentarios hasta pronto
#35
Electrónica / Re: Fuente de alimentacion a circuito?
11 Septiembre 2007, 21:29 PM
bueno hay que ver a que tipo de fuente de alimentacion te refieres.
ala de una computadora?
a la bateria de un carro?
unas simples pilas

y tambien que circuito es el que quieres conectar
circuitos TTL , CMOS?
circuito amplificador?

en otras palabras debes saber cuales son las caracteristicas tanto de la fuente como del circuito .
#36
Disculpen mi demora pero estuve de vacaciones y no pude conectarme en los lugares que estuve pero aqui tienen a peticion de todos como escribir en LCD


////////////////////////////////////////////////////////////////////////////////
//////////////               Practica 2                   //////////////////////
//////////////      practica que escribe en una LCD       //////////////////////
////////////////////////////////////////////////////////////////////////////////
//////////////           By MARCO RECARGADO               //////////////////////
////////////////////////////////////////////////////////////////////////////////

#include <16F877A.h>                ///   libreria para el manejo del pic16f877a
#use delay(clock=8000000)          ///   declara  la frecuencia del cristal
#fuses HS,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT
#include <lcd.c>  // Librería para el manejo del lcd para ver las conexiones
                  // abran el archivo C:\Archivos de programa\PICC\Drivers\lcd.c
                  // y ahi les muestra.
                 
////////////////////////////////////////////////////////////////////////////////
//     D0  enable
//     D1  rs
//     D2  rw
//     D4  D4
//     D5  D5
//     D6  D6
//     D7  D7
////////////////////////////////////////////////////////////////////////////////



void main(void)
{
lcd_init();  // Antes de usar el lcd,hay que inicializarlo
lcd_putc("HOLA MUNDO");    // Escribes en la lcd
}   // fin de programa






para poder meter un valor de una variable hay que escribir lo siguiente

printf(lcd_putc," %d volts  ",variable_adc);

y con esto escribes el valor de tu variable tenemos que tener cuidado en el tipo de
variable pues este ejemplo es para un tipo entero s ifuera para un tipo float tendria que ser %f y para varios mas

espero les sirva de ayuda

no se como dirigirlo a alguna celda en especifico pero voy a investigarlo
y en cuanto tenga la respuesta lo publico.
hasta pronto


#37
Aqui esta otro programa en este caso es la visualizacion de dos display por el portb

////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////Practica 3 ///////////////////////////////////////////
////////Visualiza un conteo por el PORTB a travez de dos display de 8 seg////////
//////////////////////////  By MARCO_RECARGADO///////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////


#include <16F877A.h>                ///   libreria para el manejo del pic16f877a
#use delay(clock=8000000)          ///   declara  la frecuencia del cristal
#fuses HS,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT

int conteo=0;

#use fast_io(A)
#use fast_io(B)
#use fast_io(C)                     ///   con esta instruccion evitamos que
#use fast_io(D)                     ///   se este configurando cada vez que usamos
#use fast_io(E)                     ///   alguna instruccion de entrada o salida

#byte porta = 5
#byte portb = 6
#byte portc = 7                     /// se definen direcciones de memoria
#byte portd = 8
#byte porte = 9

////////////////////////////////////////////////////////////////////////////////////
//////////////////////inicio del programa principal/////////////////////////////
///////////////////////////////////////////////////////////////////////////////////


void main(void)
{
  set_tris_b(0x00);
  while(true)                        //bucle infinito
{
conteo++;

if((conteo&0x0f)>9)            // aqui observamos si el primer display llego a 10
                                          // para solo comparar los primeros 4 bit hacemos una
                                          // operacion and con 0x0f

conteo=conteo+10;            // hacemos que los 4 bits mas significativos  incrementen
conteo=conteo&0xf0; 
}
if(conteo>99) {conteo=0;}      // verificamos que la cuenta se haga de 0 a 99

else{ portb=conteo; delay_ms(400);}
}                                   //fin de ciclo while
}                                   //fin de programa


aqui esta la conexion en proteus


y por supuesto el archivo de proteus

http://rapidshare.com/files/50382626/Contador.DSN.html


disculpen la demora voy lento pero seguro




Cristian77 ese programa lo puedes bajar del emule pero yo te recomendaria mas el entorno de MPLAB que tienen el compilador para Dspic  para C.


#38
Espero que esto les sirva

http://rapidshare.com/files/49148800/PIC16F877.zip.html

es el manual en español relamente no recuerod de donde lo saque espero les sea de ayuda.
#39
Hola Alejandro desafortunadamente yo no me he metido con esa serie de motorola pero estoy seguro que si buscas en el foro hay quien si lo sabe programar.


Para meta no hay nada mejor para aprender a manejar los pics que el datasheet de los mismos. en la pagina de microchip estan sus datasheets claro si el ingles no es lo tuyo tienes un gran inconveniente.
#40
Yo tambien manejo un poco de ensamblador de motorola pero es de la serie 68HC11 , ahorita estoy empezando a programar en C este micro uso el software de IMAGECRAFT podriamos empezar un posts para este micro en lenguaje c o en ensamblador, no lo he hecho porque tengo poco tiempo para dedicarle a escribir posts, pero seria un gran aporte, si tu quieres podriamos ponerlo es mas podriamos hacerlo con pics en asm tambien motorola en asm y c. Veremos que sale, me emociona mucho estos temas hasta pronto