Programas hechos en MPLAB

hola..que version de proteus tienes...acabo de simular el programa y a mi si me funciona...
a lo mejor es la version del proteus...yo tengo el proteus 7.4 sp3
 
control de un servo y comunicacion con la pc, este circuito lo que hace es esperar una senal de la cumputadora, para poder girar 45 grados, 90 grados, 135 grados o 180 grados, al girar a cualquier grados elegidoesperara un cierto tiempo en esa posiscion al termino de 3 segundos! regresara a su posicion original osea a 0 grados.

Código:
///////////////////////////////////////
//AUTOR:JORGE ARTURO RODRIGUEZ HERNANDEZ
//TITLE;SERVO SIMPLE
//DATE:23/ABRIL/2009
///////////////////////////////////////

//CONFIGURACION///////////////////
#include<16f628a.h>
#include <STRING.H>
#fuses INTRC_IO,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=20000000)
#use rs232(baud=2400,xmit=PIN_A1,rcv=PIN_A0)

void config(void);

void main(void){
		long i,a;
		char POSICION;
		config();
INICIO:
		output_b(0x00);
		printf("POSICIONANDO EL MOTOR\r\n");
		for(i=a;i>=500;i=i-10){
			output_high(PIN_B0);
			delay_us(i);
			output_low(PIN_B0);
			delay_ms(10);
		}
		printf("\f");
		printf("POSICION --> 0 GRADOS\r\n");

		printf("ESCRIBA LA POSICION QUE QUIERE:\r\n");
		printf("45 GRADOS -->(Q)\r\n");
		printf("90 GRADOS -->(W)\r\n");
		printf("135 GRADOS -->(E)\r\n");
		printf("180 GRADOS -->(R)\r\n");

		do{
			POSICION=getch();
		}while(POSICION!='Q' && POSICION!='W' && POSICION!='E' && POSICION!='R');
		
		if (POSICION=='Q'){
			a=1000;
		}
		else if (POSICION=='W'){
			a=1500;
		}
		else if (POSICION=='E'){
			a=2000;
		}
		else if (POSICION=='R'){
			a=2500;
		}

		output_high(PIN_B0);
		delay_us(a);
		output_low(PIN_B0);
		delay_ms(5000);
		goto INICIO;

}

void config(void){
		set_tris_a(0x21);
		set_tris_b(0x00);
		setup_comparator(NC_NC_NC_NC);
}
 

Adjuntos

  • servo_121.7z
    13.6 KB · Visitas: 387
Hola de nuevo estuve revisando mis codigos mi probrema fue k dentro de los recursos de archivo *h habia
#FUSES LVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)
fue la confucion y no por el programa y bueno otra duda fue para k sirve..? este codigo FUSES LVP en k forma me sirve .....
 
este programa es muy simple lo hice en c#, es un control de 8 led's, en pocas palabras manipulas 1 byte(8bit) y lo mandas al pic...
 

Adjuntos

  • control_de_8_led_333.7z
    16.7 KB · Visitas: 222
  • control_8_led_159.7z
    11.8 KB · Visitas: 198
  • control_8_led_756.7z
    4.6 KB · Visitas: 318
Juvenal dijo:
Hola, si quisiera usar estos programas con el 18f4550 que tendria que cambiar de estos programas, gracias por el post y su respuesta

Hola, para usar los programas con ese micro tenes que cambiar el include:
#include<18f4550.h> //importante: yo nunca trabaje con este micro, nose si el ccs tiene las librerias correspondientes

y cambiar los fuses y alguna otra cosa mas que ahora no me acuerdo
saludos
 
PasivoSPC dijo:
Hola de nuevo estuve revisando mis codigos mi probrema fue k dentro de los recursos de archivo *h habia
#FUSES LVP //Low Voltage Programming on B3(PIC16) or B5(PIC18)
fue la confucion y no por el programa y bueno otra duda fue para k sirve..? este codigo FUSES LVP en k forma me sirve .....
LVP: Low Voltage Programming
sirve para programar el micro con bajo voltaje

[Me edito]
Para poner el pic en modo de programación en bajo voltaje se usa PGM, normalmente RB3, CREO que se ponen 5 voltios
Por eso no es tan utilizado(si mientras corre el programa este pin se pone en el estado correcto, entrara en modo programación)

Fuente: "Programming method used by ICD, comparied to Low Voltage Programming, use of RB3"
Saludos
 
tengo una duda no puedo hacer funcionar un teclado matricial 4x3 ya cree un tema sobre esto hize el circuito en proteus y no funciona deberia aparecer en la lcd la tecla presionada, el programa es uno de los ejemplos que trae por default el ccs, gracias por cualquier ayuda.
 
hola ingdenis1 encontre esta liberia de un teclado 4x4 en google...a ver si te sirve!

Código:
///////////////////////////////////////////////////////////////////////////
////                     KBD_LIB.C by Redraven                         ////
////                                                                   ////
////                     Derived from KBDD.C                           ////
////                  Generic keypad scan driver                       ////
////                                                                   ////
////  kbd_init()   Must be called before any other function.           ////
////                                                                   ////
////  c = kbd_getc(c)  Will return a key value if pressed or /0 if not ////
////                   This function should be called frequently so as ////
////                   not to miss a key press.                        ////
////                                                                   ////
///////////////////////////////////////////////////////////////////////////
////        (C) Copyright 1996,1997 Custom Computer Services            ////
//// This source code may only be used by licensed users of the CCS C   ////
//// compiler.  This source code may only be distributed to other       ////
//// licensed users of the CCS C compiler.  No other use, reproduction  ////
//// or distribution is permitted without written permission.           ////
//// Derivative programs created using this software in object code     ////
//// form are not restricted in any way.                                ////
////////////////////////////////////////////////////////////////////////////

////////////////// The following defines the keypad layout on port D

// Un-comment the following define to use port B
#define use_portb_kbd TRUE

// Make sure the port used has pull-up resistors (or the LCD) on
// the column pins


#if defined(__PCH__)
#if defined use_portb_kbd
   #byte kbd = 0xF81              // This puts the entire structure
#else
   #byte kbd = 0xF83              // This puts the entire structure
#endif
#else
#if defined use_portb_kbd
   #byte kbd = 6                  // on to port B (at address 6)
#else
   #byte kbd = 8                  // on to port D (at address 8)
#endif
#endif

#if defined use_portb_kbd
   #define set_tris_kbd(x) set_tris_b(x)
#else
   #define set_tris_kbd(x) set_tris_d(x)
#endif

//Keypad connection:   (for example column 0 is B0)

#define COL0 (1 << 0) // PIN_B0
#define COL1 (1 << 1) // PIN_B1
#define COL2 (1 << 2) // PIN_B2
#define COL3 (1 << 3) // PIN_B3

#define ROW0 (1 << 4) // PIN_B4
#define ROW1 (1 << 5) // PIN_B5
#define ROW2 (1 << 6) // PIN_B6
#define ROW3 (1 << 7) // PIN_B7


#define ALL_ROWS (ROW0|ROW1|ROW2|ROW3)


#define ALL_PINS (ALL_ROWS|COL0|COL1|COL2|COL3)


// Keypad layout:

char const KEYS[4][4] = {{'1','2','3','A'},
                         {'4','5','6','B'},
                         {'7','8','9','C'},
                         {'*','0','#','D'}};


#define KBD_DEBOUNCE_FACTOR 33    // Set this number to apx n/333 where
                                  // n is the number of times you expect
                                  // to call kbd_getc each second

void kbd_init() {
}

char kbd_getc( ) {
   static byte kbd_call_count;
   static short int kbd_down;
   static char last_key;
   static byte col;

   byte kchar;
   byte row;

   kchar='\0';
   if(++kbd_call_count>KBD_DEBOUNCE_FACTOR) {
       switch (col) {
         case 0   : set_tris_kbd(ALL_PINS&~COL0);
                    kbd=~COL0&ALL_PINS;
                    break;
         case 1   : set_tris_kbd(ALL_PINS&~COL1);
                    kbd=~COL1&ALL_PINS;
                    break;
         case 2   : set_tris_kbd(ALL_PINS&~COL2);
                    kbd=~COL2&ALL_PINS;
                    break;
         case 3   : set_tris_kbd(ALL_PINS&~COL3);
                    kbd=~COL3&ALL_PINS;
                    break;
       }

       if(kbd_down) {
         if((kbd & (ALL_ROWS))==(ALL_ROWS)) {
           kbd_down=false;
           kchar=last_key;
           last_key='\0';
         }
       } else {
          if((kbd & (ALL_ROWS))!=(ALL_ROWS)) {
             if((kbd & ROW0)==0)
               row=0;
             else if((kbd & ROW1)==0)
               row=1;
             else if((kbd & ROW2)==0)
               row=2;
             else if((kbd & ROW3)==0)
               row=3;
             last_key =KEYS[row][col];
             kbd_down = true;
          } else {
             ++col;
             if(col==4)
               col=0;
          }
       }
      kbd_call_count=0;
   }
  set_tris_kbd(ALL_PINS);
  return(kchar);
}

y este es un ejemplo donde al aplanar una tecla del teclado 4x4 te lo envia a la compu!
(yo no lo hice, por ahi me lo encontre jeje)


Código:
#include <16f876a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#use fast_io(b)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

#include "kbd_lib.c"

void main(){
   char mitecla=0;

   kbd_init();
   printf("\rKeyboard 4x4 monitor\r\r";
   do {
      mitecla=kbd_getc();
      if(mitecla!=0){
         putc(mitecla);
      }
   } while (TRUE);
}
 
gracias ahora solo me gustaría saber como va conectado el teclado al pic que pin a que pin si lleva resistencias pull up externas si va a 5v etc.gracias de todos modos.
 
Este programa es hecho en C#y controla un servo, aqui les dejo el programa hecho en mplab para poder resivir los datos del programa y asi mismo controlar el servo.

Código:
///////////////////////////////////////
//AUTOR:JORGE ARTURO RODRIGUEZ HERNANDEZ
//TITLE;CONTROL DE SERVO
//DATE:26/JUNIO/'09
///////////////////////////////////////

//CONFIGURACION///////////////////
#include<16F628A.h>
#include<math.h>
#fuses HS,NOWDT,NOLVP,MCLR,NOPROTECT
#use delay(clock=20000000)
#use rs232(baud=2400,xmit=PIN_A0,rcv=PIN_A1)

void config(void){
		set_tris_a(0x22);
		set_tris_b(0x00);
		setup_comparator(NC_NC_NC_NC);
}

void main(void){
		int x;
		float y;
		long z;
		config();
		output_b(0x00);
	do{

		x=getch();
		y=(x*6.666e-6)+0.9e-3;
		z=y*1000000;
		output_high(PIN_B0);
		delay_us(z);
		output_low(PIN_B0);
		delay_us(20000-z);
	}while(TRUE);
}
 

Adjuntos

  • control_de_servo_104.7z
    27.9 KB · Visitas: 323
bueno como habia dicho antes vamos a empezar con el proyecto prometido, el robot controlado por la lap, y via RF, bueno para empezar ahi les dejo la imagen como deber de ir el proyecto. primero el transmisor.
como vemos usamos un USB/SERIAL para hacer la comunicacion, pero otros pueden usar otro pic, que tenga para manejo de USB. pero bueno yo no he he familiarizado aun con esos, por ahora con el adaptador, sigue el max 232, y luego el pic16f628a, y el transmisor rws434.

el programa aun no lo voy a subir porque hay que explicar por detalle la contruccion del circuito, y luego de los software.
 

Adjuntos

  • tx_785.gif
    tx_785.gif
    10.4 KB · Visitas: 512
Bueno ya vimos el transmisor ahora sigue el receptor, el receptor costa de un rws434 y un pic16f628a,un LCD Y un driver H 1 amp y luego los motores.
lo que trato de hacer es que al resivir una señal de la computadora, el LCD visualice lo que esta haciendo el robot, por ejemplo mando una señal que de una vuelta a la derecha, y el LCD me diga que esta dando vuelta ala derecha asi sucesivamente.
bueno para ponerlo mucho mejor el circuito, pongamole un password que al resivir la contraseña pueda activarse el robot y a si puedas controlarlo.
por ahora aqui esta el diagrama como va hacer el circuito.
(nota; este robot solo podra resivir señal hasta lso 60 mts y de ahi ya no hara nada)
 

Adjuntos

  • rx_978.gif
    rx_978.gif
    9.5 KB · Visitas: 421
En el mensaje de mas arriba el transmisor es tws, no rws.
Capaz que este un poco ansioso pero...con que vas a hacer los programas de la compuatora, con visual basic?
linda "pinta" nueva
Saludos
 
si lo voy hacer en visual basic.... ya lo tengo pero le estoy agregando mas cosas como, mas COM porque las laptop empiezan desde COM4 y de ahi para delante..y pss puede pasar que alguien quiera usar una computadora de escritorio y tenga COM1 y 2 y pss tengo que adaptar el programa que use esos puertos...y otras cosas le estoy agregando...pero por ahora voy a explicar la circuiteria...ya tengo todo hecho pinta bien todo el robot y se mueve donde yo lo digo.
 
Hola george, te felicito por estos programas. Yo también quiero aprender el ccs y voy a comenzar, tengo un buen libro que se llama compilador ccs y proteus. Saludos desde Lima-Perú.
Palmas.
 
hola...vamos a empezar por partes a explicar cada parte del robot, lo que hemos visto en el transmisor usamos un cable de usb/serial ya que las laptop ya no usan este tipo de comunicacion puro usb, habra unas laptops que tengan este tipo de seriales, pero son antiguas. pero bueno el que yo compre fue en steren es una tienda de electronica, lo conecte primero y luego instale el driver que venia con el paquete, y listo...hay que ver que siempre hay que usar el mismo puerto usb donde fue instaldo porque si lo ponemos en otro puerto usb deberiamos otra vez instalar el driver para que ese puerto este listo para colocarse el adaptador.

estos adaptadores funcionan cambiando el voltaje y elevandolo, por ejemplo el puerto usb sale 5 volts y ponemos el daptador cambiaria de 5 a solo 9 volt ya que no tiene suficiente capacidad para elevarlo a 13, y con esas circunstancias no podemos usar estos tipo de adaptadores para programar pic's porque es muy poco voltaje entregado. pero para poder comunicarnos es suficiente.
 

Adjuntos

  • usb_serial_197.gif
    usb_serial_197.gif
    2.6 KB · Visitas: 332
Atrás
Arriba