Puerto serial en visual basic

Con la resistencia de 470 ohmios, el puerto del pic me entrega 23 mA, no es mucho?

pues si.. no entiendo porque deberia de dar 23mA, si son V=470*.023=10.81V deberias estar alimentado con 12V aprox, o ¿o esa medicion es de los dos optos?

Hay posibilidad de quemar el micro usando el diagrama del post 154?

pues es probable, es que no entiendo que estas haciendo si dices que con una resistencia de 470 te da 23mA, si pones otro son 46mA y revienta... si ya estan ambos no creo que se queme, pero no es recomendable exigirle tanto o por lo menos yo no lo hago siempre dejo una tolerancia de un 20%, o sea 20mA si el puerto soporta 25mA.

pero aclara como estas haciendo.

Voy a tratar de conseguir los otros modelos que veo que consumen menos,

creo que ahi hay algo raro, tu puedes limitar la corriente que tu quieras incrementando el valor ohmico, pero si aumentas mucho el valor no alcanza a gatillar el triac, asi que tienes que encontrar el punto justo, en que consuma menos y gatille bien, tipicamente es lo que dice la ficha tecnica pero no es estrictisimamente ese, pues cada uno se fabrica diferente y el fabricante digamos que toma un valor promedio.
 
Última edición:
Estoy usando uno solo (el moc 3021), si , no me verifica la ley de ohm :eek: :eek: Verificare la resistencia el codigo de colores esta bien, quizas este dañada aunque no lo creo, Verifique devuelta y si 23mA dc :eek:
 
Última edición:
No sera que el led tiene una resistencia de entrada?

Pues todo componente tiene una resistencia interna...

ya me estas haciendo dudar :LOL: creo que ahi tengo un 3021, deja verifico si me da el mismo consumo que a ti, y prueba pero sin el pic no lo vayas a quemar utiliza una fuente de 5v.
 
Nos mareamos entre nosotros :LOL: :LOL: La alimentación de mi pic viene del usb, entre medio hay un max232 pero eso no tiene nada que ver, Quizás mi puerto este dañado :devilish::devilish: y de cualquier cosa, lo verificare pero no creo.
 
pues ya verifique el MOC que tengo y si estas haciendo algo mal, puede ser que tu amperimetro no este midiendo bien...

mira puse un moc alimentado con 5V y una resistencia de 330R y me da con mi amperimetro 11mA

en teoria serian 5-3/330=6mA, asi que la caida de voltaje de este moc no es de 3V, sino de 1,36V
o sea 5-1.36/330=11mA [5-(.011*330)=1.36V]

si yo quisiera que me de unos 8mA, tendria que poner una R de 5-1.36/.008=455R.
 
Última edición:
Todos los datos del LED del MOC estan en el datasheet Y NO SON LOS QUE APARECEN EN "Absolute Maximun Ratings"!!!!.
Si le meten 20 o mas mA van a quemar el led y el pic...
 
Bueno verifique la resistencia, la cual da 470 Ohmios, probé mi amperimetro el cual funciona bastante bien ( 1 o 2 ma de diferencia con respecto a lo teórico) y medí la tensión de mi USB , 4.7 voltios.

Creo que ese 1.36 volt corresponde a la imagen que te adjunto.
thump_92629332222.png


Esperare a tener el integrado de optoacopladores PC847 , para poder realizar todas las pruebas, Saludos!
 
Última edición:
Creo que ese 1.36 volt corresponde a la imagen que te adjunto.

O si, si perdon me resbale es que me quede con la idea de 3V... entonces lo teorico concuerda con lo practico.

Bueno verifique la resistencia, la cual da 470 Ohmios, probé mi amperimetro el cual funciona bastante bien ( 1 o 2 ma de diferencia con respecto a lo teórico) y medí la tensión de mi USB , 4.7 voltios.

no entendi, ¿te sigue dando 25mA?, si es asi seguramente ya se quemo, aunque con un resistencia de 470R no debio haberse quemado segun los calculos.

y si le mides la tension al puerto del pic, no vaya a ser que traigas filtrando 12V, con el max232. osea que este mal conectado.
 
Última edición:
La 3era es la vencida, 6,5 mA , desconozco que estaba haciendo mal ... Con esta corriente de seguro me sobra para conectarlo junto al opto acoplador. Disculpen las sucesivas molestias :rolleyes: :rolleyes:
 
Todos los datos del LED del MOC están en el datasheet Y NO SON LOS QUE APARECEN EN "Absolute Maximun Ratings"!!!!.
Cierto, yo también usé los valores máximos soportados. Ya me estaba durmiendo. :LOL:

En esta parte si están los valores típicos de corriente para el LED:

Para los MOC3010, 11 y 12
MOC3010-12.jpg
Para los MOC3020, 21, 22 y 23
MOC3020-23.jpg

Gracias por la corrección, Dr. (y)

Ahora si, a aplicar la ley de Ohm correctamente.
 
Les comento que voy a sacrificar 2 salidas. Tenia 12 salidas en total, 4 con relay a RF, 4 con potencia en CA, CC y de las otras 4 que me quedan, preferí sacrificar dos.
Éstas ponerlas como entradas digitales con 2 respectivas salidas, éstas entradas digitales estarían opto acopladas y están pensadas para sensores y cualquier circuito que brinde una salida TTL o un cambio de estado.
Esto no es complicado y tengo idea de como hacerlo.
Lo que me gustaría hacer, es meter a la PC entre medio, o sea, que la PC me pida autorización para prender la salida.

Me gustaría hacerlo más interesante y poder poner un tiempo en que se ponga en HIGH la salida y algún chiche más.
Si no me equivoco, habría que hacer lo siguiente:
En el programa del PIC en BASIC, hacer una condición IF, si detecta HIGH en las entradas digitales del micro hacer un paquete con el comando SEROUT, sacar un dato serial, ingresarlo en la PC, y en Visual Basic realizar la programación correspondiente.
Creo que puedo hacer todo, menos lo de Visual Basic.

Agradecería ideas y consejos. Gracias de antemano.
 
Última edición por un moderador:
Compañeros, ya casi termino el proyecto, pero me surgió un problema a último momento el cual no puedo resolver.
Yo añadí dos entradas digitales, las cuales a cada una les corresponde una salida.

La condición para que se prenda la salida consta de dos cosas.
1: Que la entrada esté a "1" Lógico.
2: Que la variable serial ingrese con tal letra (la cual la comando desde un objeto en VB, el cual adjunto).

Cuando tengo las dos entradas conectadas a "1" lógico y mando individualmente cada una desde VB, todo funciona a la perfección, pero cuando desconecto una del "1" lógico, cosa que pasaría normalmente, todo va mal, se me reinicia el micro a veces y otras veces me prende otra salida, la SL1.

No encuentro el error en la programación.
Por favor, si alguien lo encuentra que me avise.
Los programas compilan a la perfección.

PD: Por ahora los 1 lógicos se los doy con una resistencia y un pulsador.
Luego usaré los optoacopladores que se ven en el diagrama.

Saludos!
 

Adjuntos

  • Control Computarizado 10-2.rar
    12.8 KB · Visitas: 11
  • Diagrama Bloques.jpg
    Diagrama Bloques.jpg
    59.7 KB · Visitas: 13
Última edición por un moderador:
No lo compile pero fijate en la estructura para que veas una alternativa....

Código:
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 10/05/2014                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
;Programa para control computarizado con Visual Basic
INCLUDE "modedefs.bas"          ;incluyen los modos de comunicación
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT ' Opción del Osc Interno
@ DEVICE pic16F628A, WDT_ON ' Watchdog Timer ON
@ DEVICE pic16F628A, PWRT_ON ' Power-On Timer
@ DEVICE pic16F628A, BOD_ON
@ DEVICE pic16F628A, MCLR_ON ' Master Clear Opción interno
@ DEVICE pic16F628A, LVP_OFF ' Bajo voltaje de programación
@ DEVICE pic16F628A, CPD_OFF ' Protección del código de memoria OFF
@ DEVICE pic16F628A, PROTECT_OFF' protección de código OFF

CMCON = 7
TRISA=%0
TRISB=%1100

serial VAR BYTE                 ;variable de almacenamiento de 255     
sec1  VAR BIT                    ;variable sec1 de 1 bit 0 o 1
sec2  VAR BIT                    ;variable sec2 de 1 bit 0 o 1
sec3  VAR BIT                    ;variable sec3 de 1 bit 0 o 1 
sec4  var bit
sec5  var bit
sec6  var bit
sec7  var bit
sec8  var bit
sec9  var bit 
sec10 var bit
sec11 var bit
sec12 var bit


sec1=0                         ;valores iniciales para las variables
sec2=0
sec3=0
sec4=0
sec5=0
sec6=0
sec7=0
sec8=0
sec9=0
sec10=0
sec11=0
sec12=0

  
SL1     VAR porta.6           ;nombre para los pines
SL2     VAR porta.7
SL3     VAR portb.6
SL4     var portb.7
SRF1    var porta.0
SRF2    var porta.1
SRF3    var porta.2
SRF4    var porta.3
ED1     var portb.2
ED2     var portb.3
SD1     var portb.4
SD2     var portb.5
prueba  var porta.4          


LOW prueba
PAUSE 3000
HIGH prueba
LOW prueba
pause 500
high prueba
pause 500
low prueba
pause 500
high prueba
pause 500 
low prueba
pause 1000   ;led para saber si ya arrancó el PIC

Inicio:
 SERIN portb.0,T9600,serial      ;esperar por dato serial y guardarlo
 select case serial
  case "A" 
   IF sec1=0 THEN                 ;bandera para la chicharra 1 On
    HIGH SL1                ;y 0 es OFF
    SEROUT portb.1,T9600,["A"]     ;enviar H diciendo que está prendi
   else
    LOW SL1
    SEROUT portb.1,T9600,["B"]    ;enviar I diciendo que está OFF
   ENDIF
   toggle sec1
  case "B" 
   IF sec2=0 THEN
    HIGH SL2
    SEROUT portb.1,T9600,["C"]     ;envía D diciendo q´ el led es ON
   else
    LOW SL2
    SEROUT portb.1,T9600,["D"]     ;envía E diciendo q´el led es OFF
   eNDIF
   toggle sec2
  case "C"
   IF sec3=0 THEN
    HIGH SL3
    SEROUT portb.1,T9600,["E"]     ;envía G diciendo q´ el relé es ON
   else
    LOW SL3
    SEROUT portb.1,T9600,["F"]     ;envía F diciendo q´ el relé es OFF
   ENDIF
   toggle Sec3
  case "D" 
   IF sec4=0 THEN                 ;bandera para la chicharra 1 On
    HIGH sl4 
    SEROUT portb.1,T9600,["G"]                    ;y 0 es OFF
   else
    LOW SL4
    SEROUT portb.1,T9600,["H"] 
   ENDIF
   toggle sec4
  case "E"
   IF sec5=0 THEN                 ;bandera para la chicharra 1 On
    HIGH  SRF1
    SEROUT portb.1,T9600,["I"]                     ;y 0 es OFF
   else
    LOW   SRF1
    SEROUT portb.1,T9600,["J"] 
   ENDIF
   toggle sec5
  case "F"
   IF sec6=0 THEN                 ;bandera para la chicharra 1 On
    HIGH SRF2
    SEROUT portb.1,T9600,["K"]                   ;y 0 es OFF
   else 
    LOW SRF2
    SEROUT portb.1,T9600,["L"] 
   ENDIF
   toggle sec6
  case "H" 
   IF sec7=0 THEN                 ;bandera para la chicharra 1 On
    HIGH SRF3
    SEROUT portb.1,T9600,["M"]                    ;y 0 es OFF
   else
    LOW  SRF3
    SEROUT portb.1,T9600,["N"] 
   ENDIF
   toggle sec6
  case "I"
   if portb.2 then
    IF sec9=0 THEN                 ;bandera para la chicharra 1 On
     HIGH SD1
     SEROUT portb.1,T9600,["P"]                 ;y 0 es OFF
    else
     LOW SD1
     SEROUT portb.1,T9600,["Q"] 
    ENDIF
    toggle Sec9
   endif
  case "J" 
   if Portb.3 then
    IF sec10=0 THEN                 ;bandera para la chicharra 1 On
     HIGH SD2
     SEROUT portb.1,T9600,["R"]                 ;y 0 es OFF
    else
     LOW SD2
     SEROUT portb.1,T9600,["S"] 
    ENDIF
    toggle Sec10
   endif
 end select
GOTO inicio

lo compilas y si tiene errores me dices... XD

y ponle unas resistencias pull_down a la entradas port b3 y b2
 
Última edición:
Sip esa es la imagen.

He probado y lo de las entradas funciona A LA PERFECCIÓN. donde esta el problema? Al iniciar el circuito ademas de led de prueba, hay 1,2 o 3 salidas que inician prendidas.Varia según la vez que alimentes el circuito, no creo que sea un problema de código ni de los componentes, Sino de los modos de comunicación en si. Asique seguramente las entradas analogicas dispararan a las salidas solo con estar en 1 lógico, no los haré pasar por el programa porque seria muy complicado y aparte tampoco tendría mucho sentido hacerlo ... Gracias por tu código papirrin, parece mucho mas prolijo que el mio.
 
pues nada mas inicializas los puertos en 0

los pones asi:

Código:
CMCON = 7
TRISA=%0
TRISB=%1100

[B]PORTA=0
PORTB=0[/B]

serial VAR BYTE                 ;variable de almacenamiento de 255     
sec1  VAR BIT                    ;variable sec1 de 1 bit 0 o 1
sec2  VAR BIT                    ;variable sec2 de 1 bit 0 o 1
sec3  VAR BIT                    ;variable sec3 de 1 bit 0 o 1

oh y estos ponlos en OFF

@ DEVICE pic16F628A, WDT_OFF
@ DEVICE pic16F628A, PWRT_OFF
@ DEVICE pic16F628A, BOD_OFF
 
Última edición:
Ahora si esta perfecto, espero no molestarte y quiero hacerte unas consultas:

1- TRISA=%0
TRISB=%1100

???? Se que configura de alguna manera el puerto a y el puerto b.

2- Tienes los significados de los fuses??

3- Algun enlace,libro o documento donde se desarrolle PBP y ejemplos??

PD: En el programa te comiste la rutina para SRF4 y eso provoco un error en SRF3, ya lo estoy implementando

Muchas gracias y :aplauso::aplauso:
 
Si el registro tris le indica al pic como tomara cada puerto si como entrada 1 o salida 0 , con respecto a las otras preguntas dale una buscada, son temas muy extensos para explicarlos a detalle.
 
Buenas. Estoy con un problema en mi optoacoplador.
No hay diferencia si conecto o no la tensión de entrada, siempre hay un 1 lógico en el PIC. Es el SHARP PC827
Quería usarlo porque era doble, (2 optos en 1 integrado.)
En la entrada lo alimento con 5 voltios y una resistencia de 330 Ω y en la salida una resistencia de 100 Ω a positivo, emisor a masa y saco señal desde el colector.

Ya que no funciona ese, quería consultar si éste funcionaba.

Saludos.
 

Adjuntos

  • asaspng-1227840.png
    asaspng-1227840.png
    98.1 KB · Visitas: 14
Última edición por un moderador:
Atrás
Arriba