miércoles, 23 de mayo de 2012

PINPONG CON MATRIZ DE LEDS USANDO POTENCIOMETROS COMO CONTROL

Esquematico

Vídeo de la prueba


Circuito simple basado en el barrido para generar los gráficos del juego y en una pequeña lógica para poder mover la pelota y que rebote.

sábado, 18 de febrero de 2012

martes, 15 de junio de 2010

Control de 3 servos mediante puero serie

Aqui explicaremos como hacer que se muevan 3 servos a travez de una aplicación en Visual Basic de donde mandaremos los datos por puerto serial a un pic16f628a el cual generara los 3 PWM necesarios para el control de los servomotores. Componentes:
  • pic16f628a
  • 3 servomotores
  • compim
  • max232
  • capacitores .1uf para max232
  • capacitores 22pF para el oscilador
  • cristal 20MHz
Para la simulacion en proteus omitiremos la parte del max232, en el circuito real es necesario poner el max232 para que ponga los niveles a ttl.
Aqui el diagrama de conexion del max232 al pic



El programa del pic.

#include <16f628a.h>//usaremos el pic16f628a
#fuses HS,NOWDT,NOmclr//usaremos cristal high speed. desactivmos
//watch dog y el master clear
#use delay(clock=20000000)//delay con clock a 20MHz
//configuracion transmision serie
#use rs232(baud=9600, xmit=PIN_b2, rcv=PIN_b1,bits=8,parity=n)
#use fast_io(A)//uso de puerto a
#use fast_io(B)//uso rapido puerto b
//output_low() esta instruccion pone en bajo el estado del pin que se ponga
//entre parentesis
#priority rda,timer1//damos mayor prioridad a recibir datos que el timer1
//definimos 3 pines donde sacaremos pwm para el control de los servos
#define SERVO1 PIN_b5
#define SERVO2 PIN_B3
#define SERVO3 PIN_b4
//nuestras variables
int carga=0;
//el valor inicial de s1, s2 y s3 determina la posicion inicial de los servos
int s1=82,s2=81,s3=80,counter=0,periodo=750;
//funcion de interrupcion por rs-232
#int_rda
void serial_isr(void){
//Dependiendo como lleguen los datos seran cargados a su variable
switch(carga){
case 0:{
s1=getc();
carga++;
break;}
case 1:{
s2=getc();
carga++;
break;}
case 2:{
s3=getc();
carga++;
break;}
case 3:{
carga=0;
break;}
}}
//funcion de interrupcion por timer1
#int_timer1
void timer1_isr(void){
//se vuelve a cargar el valor del timer
set_timer1(65470);
//si el contadr es 0 indica el inicio de ciclo por lo cual pone en alto
//todos los pines
if(counter==0){
output_high(SERVO1);
output_high(SERVO2);
output_high(SERVO3);
}
//si el valor del contador es igual al que recivimos por rs-232
//ponemos en bajo el valor de ese pin
if(counter==s1)output_low(servo1);
if(counter==s2)output_low(servo2);
if(counter==s3)output_low(servo3);
counter++;//aumentamos el contador
if(counter==periodo)//si el contador es igual al periodo entonces reiniciamos
//el contador quiere decir iniciamos otro ciclo
counter=0;
}
void main(void) {
set_tris_b(0b00000010);//ponemos pin b1 como entrada y las demas como salida
set_tris_a(0b00000000);//puerto a como salidas
setup_counters(RTCC_INTERNAL,RTCC_DIV_1);//configuramos timer 1
//usamos timer con clock externo
setup_timer_1(T1_internal | T1_DIV_BY_1);
output_low(SERVO1);
output_low(SERVO2);
output_low(SERVO3);
delay_ms(1000);
//habilitamos interrupcion por recepcion de datoss rs-232
enable_interrupts(int_rda);
//cargamos el timer
set_timer1(65470);
//habilitamos interrupcion por timer1
enable_interrupts(int_timer1);
//habilitamos interrupciones
enable_interrupts(global);
while(1){}
}


Este es el formulario creado en Visual Basic 2008 express
Ahora pongo el codigo necesario para que funcione.

Public Class Form1
Dim servo1(20) As Byte
Dim servo2(20) As Byte
Dim servo3(20) As Byte

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
servo1(0) = CByte(Val(TextBox1.Text))
servo2(0) = CByte(Val(TextBox2.Text))
servo3(0) = CByte(Val(TextBox3.Text))
SerialPort1.Open()
SerialPort1.Write(servo1, 0, 1)
SerialPort1.Write(servo2, 0, 1)
SerialPort1.Write(servo3, 0, 1)
SerialPort1.Close()
End Sub
End Class



Aparte de los componentes mostrados debemos añadir otro que es el serialport este nos permite la transmision de datos y al ponerlo en las propiedades debemos poner el COM con el cual cuenta nustra computadora en este caso usare el 2 que esta conectado con el 1 que esta en el proteus para la simulacion.



Aqui la simulacion, hay que ver que los valores que se tienen que mandar dependen de cada servo ya que no es exacto el control de cada uno por lo cual hay que probar valores desde mandar un 40 hasta un 90 por ejemplo solo probando sabremos el tope de cada servo, en la simulacion los valores van de 45 a 91 con una resolucion de 3º aproximadamente.
NOTA: Tenemos que conectar el max232 como viene en su hoja de datos es necesario para poner los niveles a TTL.




jueves, 10 de junio de 2010

Solidworks como generar un tornillo, tutorial

Bueno amigos aquí les dejo el primer tutoríal de solidworks este describe como generar un tornillo mediante el uso de varias herramientas que componen al programa espero les sea de ayuda. Comenten sobre los tutoriales , cuales les gustaría que se realizaran sobre que tema o programa.

Vídeo

miércoles, 9 de junio de 2010

Lcd mostrando lectura de un canal adc microchip.

Simulación en proteus de un circuito con microcontrolador de microchip donde se lee un canal de adc y se despliega en un lcd de 16x2 caracteres tanto el valor del adc como del voltaje que representa.

Material:
  • Lcd LM016
  • PIC16f886
  • POT-LIN
  • Terminales de ground y power

Conexiones
Pot-lin - RA0
E - RB0
RS - RB1
RW - RB2
D4 - RB4
D5 - RB5
D6 - RB6
D7 - RB7

Diagrama de conexión
El video donde se muestra el programa, conexion y funcionamiento del circuito



Nota: los servos tienen 3 pines uno de alimitacion uno de tierra y uno de control dependiendo la marca es el color de cada pin hay que checar cuales son y hacer la conexion directa del de control con el pin de salida del micro.

martes, 8 de junio de 2010

Interfaz Grafica con matlab usando gui 1

Aquí les dejo un vídeo de introducción a la interfaz gráfica de usuario con matlab donde se realiza un ejemplo de un programa que calcula el factorial de un numero introducido y lo despliega disfrutenlo.

lunes, 7 de junio de 2010

Uso de interrupcion externa en microchip pic16f628a

En esta practica se comprendera el uso de la interrupcion externa por medio del encendido de un led durante 1 segundo cada vez que se presione el push button conectado al pin de la interrupcion externa. La interrupcion se hara cada vez que el pin cambie de estado alto a bajo.

Para la simulación necesitaremos añadir los siguientes componentes en el programa proteus:
*Pic16f628a
*Resistencia 330 ohms
*led
*push button
*resistencia 10K

Imagen donde se muestra la conexion.
Pin de interrupcion externa=Pin B0
Pin de salida al led= Pin B1

Video con la descripcion y programa.

Iniciativa mexico

Apoyando la excelente idea de los distintos medios de comunicanción.

http://iniciativamexico.org/