TODOPIC
FORO TÉCNICO => Foro Técnico => Mensaje iniciado por: japifer_22 en 10 de Febrero de 2011, 16:14:13
-
hola camaradas, tengo una duda y se que ustedes podran respondermela, y es con respecto a un transistor, el cual es el 2n2222.
resulta que lo quiero configurar como switch, para encender y apagar un sensor, pero el punto es que, y es aqui donde dengo la duda:
el sensor que quiero encender y apagar, tiene un un consumo de 3,4mA, pero el punto es que tiene un peak de 100mA, mi pregunta es que si este transistor donde lo configuro para que me pase esta corriente, le dara el cuero para suministrar este peak al encender el sensor ????? y el transistor le dara esa corriente que nesesito ??? ó se quedara con solo la entrega de los 3,4 mA ?? que es como lo configure ??????
espero averme explicado bien.
saludos
-
uff me acabo de dar cuenta que esto no me servira ya que la corriente que nesesito no logra saturar el transistor :oops: :oops:
pero pido alguna idea para hacer esto.
tengo 2 sensores el cual los quiero conmutar para un solo pin de un pic, es por esto que tengno que desenergisar uno por mientra que el otro le manda el dato, y apago y ensiendo el otro para que envie tambien su dato y asi asta while(TRUE) y mas alla......................... es por esto que pido sugenerencias al respecto.
saludos y gracias.....
-
Hola,
lo más sencillo creo q sería un multiplexor analógico: claro q tendrías que tener IO libres. National semiconductors y Maxim IC tienen de estos para aburrirte...
Saludos.
-
¿Podés subir el esquema de como lo estás utilizando? Una llave analógica que se suele conseguir con facilidad es el 4066 y otra creo es el MC14053.
-
Hola, en el datasheet, figura que el 2n2222 es de 800 ma... mas que suficiente!, y tiene un hfe promedio minimo de 35
Si divides tus 100 ma en 35, obtienes que lo saturas con unos 0,0028A es decir menos de 3mA en su base, coloca una R de 1k y te aseguras saturarlo ok?
Norberto
-
hola, primero gracias por responder.
ahora he estado probando este cto pero el programa del pic se me queda pegado. mejor les coment obien lo que intento de hacer:
tengo un pic 16f877a y por medio de la interrupcion externa de RB0 estoy midiento el pulso en alto que me entrega 2 sensores ultrasonicos que miden distancia (el programa casi todo es de REDPIC ya que lo saque de unos de sus tutoriales de como medir un pulso :mrgreen:)
estos sensores me entregan un pulso en la salida proporcional a la distancia que esta midiendo, con un maximo de 6.47 mts, medidos correctamentes, ya que he probado el programa con 1 sensor y me anda de lo mas bien, pero ahora quiero poner 2 como bien digo y quiero medirlo con la misma interrupcion, ahora para esto tengo que mantender encendido uno y apagar el otro para que no se mesclen las señales ultrasonicas ni la medicion, y viceversa pero este pun to me esta costando ya que el programa se queda pegado al conectar los dos sensores y no se porque, el punto es que es vital encender y apagar el tro sensor para hacer la lectura.
bueno le dejo el codigo para ver si yo estoy mal al hacer la mux en el programa o que onda, ademas le dejo un esquematico de como lo conecto
________ R1 ----° - sensor1 + °---->(5Vcc)
| |--->PIN_C0----->/\/\/\----|/ ^ diodo
| 1 | \ |____________________-|>|-_______
| 6 | | |
| F | GND |
| 8 | |
| 7 | R2 ----° - sensor2 + °---->(5Vcc) |
| 7 |--->PIN_C1----->/\/\/\----|/ ^ |
| A | \ | |
| | | | diodo |
| | GND |_-|>|-_ |
| | | |
| |--->PIN_B0_____________________________|_______________________|
| |
|________|
y aqui el codigo:
#include <16F877a.h>
#FUSES NOWDT, HS, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#define use_portd_lcd TRUE //definir portb lcd
#include<LCD420puertD.c> //libreria manejo lcd de 20x4 modificada por suky para el puerto D
#use standard_io(A)
#use standard_io(C)
#use standard_io(E)
float const uSxTick = 1; // Microsegundos por Tick de TMR1 a 4 Mhz
////////////////////////////////////////////////////////////////////////////////////
//
// Variables en RAM
//
////////////////////////////////////////////////////////////////////////////////////
int1 flagToggleFlanco=0; // Flag para cambiar de flanco
int16 t1=0x00,t2=0x00,tt=0x00; // Variables para guardar estados de ...
float st=0.0; // TMR1 en cada flanco y hacer la resta
float stConvert=0.0; // Convierte la medicion en cm del sensor 1
float stConvert1=0.0; // Convierte la medicion en cm del sensor 2
int counter=0; // genera la multiplexacion entre los pines C0 y C1
int1 flagHayDatos=0; // Flag para indicar que ya hay datos de ..
// dos flancos (de subida y bajada)
int1 flagHayTransmitir=0; // Flag para indicar que hay datos para ...
////////////////////////////////////////////////////////////////////////////////////
//
// Interrupción por Externa por Cambio de Flanco en RB0
//
////////////////////////////////////////////////////////////////////////////////////
#int_ext
void handle_ext_int(){
if(flagToggleFlanco==0){ // He recibido Flanco de Subida
t1=get_timer1(); // Guardo en t1 el valor de TMR1 al Flanco de Subida
ext_int_edge(0,H_TO_L); // Configuro para capturar siguiente flanco de Bajada
flagToggleFlanco=1; // Indico que el siguiente flanco será de Bajada
} else { // He recibido Flanco de Bajada
t2=get_timer1(); // Guardo en t2 el valor de TMR1 al Flanco de Bajada
ext_int_edge(0,L_TO_H); // Configuro para capturar siguiente flanco de subida
flagToggleFlanco=0; // Indico que el siguiente flanco será de Subida
set_timer1(0); // Reinicio TMR1
if(flagHayDatos==0){ // Si los datos anteriores han sido procesados ...
flagHayDatos=1; // Indico que ya hay nuevos datos de flancos para calcular
}
}
}
void main() {
lcd_init(); //inicializa lcd
////////////////////////////////////////// INICIALIZACIONES GENERALES
delay_ms(333); // Espero a que todo se estabilice e ...
disable_interrupts(global); // Inicializo el Micro y ...
disable_interrupts(int_timer1); // deshabilitando todo lo no necesario ...
disable_interrupts(int_timer2); // deshabilitando todo lo no necesario ...
disable_interrupts(int_ext);
disable_interrupts(int_rb);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
setup_timer_2(T2_DISABLED,0,1);
delay_ms(333);
/////////////////////////////////////////// INICIALIZACIONES PERTINENTES A LA APLICACION
ext_int_edge(0,L_TO_H); // Configuro captura de 1er flanco de subida
flagToggleFlanco = 0; // inicializo el Flag para cambiar de flanco
enable_interrupts(int_ext);
enable_interrupts(global);
output_high(PIN_C0);
output_low(PIN_C1);
do{
if(flagHayDatos==1){ // Detecto que ya hay datos de flancos ...
if(t2 > t1){ // Compruebo que estoy en la misma vuelta de TMR1
counter++;
tt = t2 - t1; // Calculo en Tick's de TMR1 el tiempo entre flancos
st = (uSxTick * tt)-1; // Calculo en uS el tiempo.
flagHayTransmitir=1; // Indico que tengo nuevo valor para transmitir
if(counter==1){ // Transmite el valor capturado del sensor 1 por C0 a....
output_low(PIN_C0); // Desactivo para pasar al otro sensor
output_high(PIN_C1); // Activo pin para tomar la medicion del sensor 2
stConvert=st/56; // Transformo el valor optenido en la medicion en cm
lcd_gotoxy(1,1);
printf(lcd_putc,"sensor 1");
lcd_gotoxy(1,2);
printf(lcd_putc,"Ticks =%3.1f[cm]",stConvert);
}
else if(counter==2) { // Transmite el valor capturado del sensor 2 por C1 a....
output_high(PIN_C0); // Activo pin para tomar la medicion del sensor 1
output_low(PIN_C1); // Desactivo pin para pasar al otro sensor
stConvert1=st/56; // Transformo el valor optenido en la medicion en cm
lcd_gotoxy(1,3);
printf(lcd_putc,"sensor 2");
lcd_gotoxy(1,4);
printf(lcd_putc,"Ticks =%3.1f[cm]",stConvert1);
counter=0;
}
}
flagHayDatos=0; // Indico que ya han sido procesados los datos.
}
st=0;
} while (TRUE); //...CICLO INFINITO...........
}
-
Perdón por la sinceridad, pero la verdad que no entiendo nada el esquema. Hacelo mejor con algún programa de electrónica para que sea más legible.
-
jajaj no hay problema
-
YA AHORA SI, perdon por la demora.
explico todo denuevo mejor:
intento de hacer un sistema que controle dos sensores ultrasonico con un pic y solo con la interrupcion EXT de RB0, tengo la medicion de un sensor listo pero lo que no puedo hacer bien ahora es medir los dos sensores por el mismo pin. he asignado las salidas del C0 y C1 del pic para que se multiplexen, y esto va a un circuito por cada pin, el cual es el encargado de encender y apagar los sensores:
http://img819.imageshack.us/i/esquemaenergiassensor.jpg/
sorry pero no puedo hacer quese vea ala foto
estos sensores me entregan un ancho de pulso en alto proporcional a la distancias que sensa, teniendo un maximo de 6.47mts. reitero esto para un sensor esta bien, pero para los 2 no logro hacer que me mida correctamente los sensoresmiden cualquier cosa menos la distancia real.
http://img511.imageshack.us/i/esquemaucpic.jpg/
todo esto lo muestor por una lcd en el puerto D del pic.
les dejo un enlaces donde se encuentra este sensor:
http://www.maxbotix.com/uploads/LV-MaxSonar-WR1-Datasheet.pdf
ahora si alguien me pudiece indicar como hacer que me mida bien con los dos censores junto seria de gran ayuda.
gracias y saludos
-
Si la señal del sensor es digital (que aparentemente lo es) se podría recurrir al uso de compuertas AND para dejar pasar la señal que nos interese.
Te muestro un circuito sencillo, que es mejorable e incluso se podría intentar hacer que con un solo Pin se se seleccione el sensor, Dejando dicho Pin en 0 se habilita un sensor y poniéndolo en 1 se habilita el otro.