desktop

Curso de programación de PIC en PICBasic Pro

Al ver la siguiente gráfica, me parece que existen más de los 1.98 V que supuestamente se obtendrían al sensar 30 amperes.
Sensar 0 Amperes está por los 2.5 V, mientras que 30 amperes está casi por los 4.5 V.

¿Ya realizaste pruebas en físico con el sensor para ver que valores arroja?

Lo estoy por encargar porque me pareció un muy buen precio (99$, o sea, 10 dolares aproximadamente) en cuanto a funcionalidad, tamaño y para la infinidad de proyectos que lo podría meter (si es que puedo llegar a entender como usarlo :LOL:)

Igualmente, por lo que vi, hay algo de desinformación al respecto.
La hoja de datos dice una cosa, en varios foros y google otras tantas y más o menos, sólo concuerda con la hoja de datos de los valores del sensor si le coloco una corriente variable.

Estaba justamente perdiendo el tiempo en una tabla que pensé que era la solución.
Suena gracioso, pero estaba en el arenero escribiendo una desparramada y de repente me pasó algo por la cabeza y arranqué a escribir unas lineas, pero después me di cuenta que seguía co la misma idea del principio y tendría el mismo problema. :rolleyes:

---------- Actualizado después de 3 horas ----------

No entiendo dónde estoy aplicando mal mis matemáticas. :LOL:
El primer error que noté, es que si entran 5V (4,98Vcc), en el micro se lee ValorADC=1003 como máximo y en 0V=511
Ahí seguro le estoy errando en la configuración del puerto.

El tema está en que estoy viendo de hacerlo trabajar de esta manera y no me cierra.
Como tengo que trabajar entre 512 y 1024, lo que hago es restar ambos y lo divido por la cantidad de pasos (30Amp=30pasos), dándome como resultado la supuesta sensibilidad, o dicho en otra forma, la tensión que varía entre paso y paso (1,71v)

(1024 - 512)=513 / 30 =17.1 = 1,71v por Amp

Hasta acá en una hoja con lápiz cuaja la idea:

(ValorADC - Offset)/ sensibilidad * pasos

Pero llevarlo al plano real está siendo todo un fastidio. No me da para nada el valor que tendría que darme. :((n)


Código:
DEFINE OSC 4
@ DEVICE pic16F877A
@ DEVICE pic16F877A, WDT_OFF
@ DEVICE pic16F877A, PWRT_On
@ DEVICE pic16F877A, PROTECT_OFF

DEFINE LCD_DREG      PORTD    
DEFINE LCD_DBIT      4        
DEFINE LCD_RSREG  PORTD    
DEFINE LCD_RSBIT  2    
DEFINE LCD_EREG      PORTD    
DEFINE LCD_EBIT   3        
DEFINE LCD_BITS      4    
DEFINE LCD_LINES  2

Define    ADC_BITS    10             ' Establece el número de bits en el resultado
Define    ADC_CLOCK    3             ' Ajuste el reloj de origen (rc=3)
Define    ADC_SAMPLEUS    50          ' Establezca el tiempo de muestreo en uS 

INTCON=%10100001           
TMR0=0 
T2CON = %00000110
PR2=124     

CMCON=7

ADCON1=%10000010
TRISA=%000001
TRISB=%11111111
TRISC=%01111011
TRISD=%00000000     


AUX var word 
AMP var word
ValorADC var word
Offset con 512               

;ON INTERRUPT GoTo ATENCION
;********************************************************************
;Configuro como valor offset 511 que representa supuestamente el valor 2.49V-0A
;para sacar la escala, resto la lecura maxima con la lectura minima y la divido
;por los pasos
; (1024 - 512)=513 / 30 =17.1 = 1,71v por Amp  
;Supuestamente entonces, para hacer la lectura tendria que:
;(ValorADC - Offset)/ sensibilidad * pasos 
; y no me da para nada... #@¬€<*n¨*^[]&¬¬!!!!!! 
;********************************************************************
LCDOUT $fe,1
Inicio:

pause 200
aDCIN 0, ValorADC
AMP = (ValorADC - offset) * 17 /513
AUX = (ValorADC - Offset) /513         ;una prueba alternativa que tampoco me dá


LCDOUT $FE,$80,"A=",dec AMP,".",dec1 amp," ADC=",dec ValorADC
LCDOUT $FE,$C0,"A=",dec Aux,".",dec1 aux
goto inicio


End

;----------------------------------------------------------------
;----------------------------------------------------------------

;*****************************************************************
;++++++++++++++++++++++++ INTERRUPCION +++++++++++++++++++++++++++
;*****************************************************************

DISABLE
ATENCION:
        

INTCON.2=0    
RESUME
ENABLE

END
;*****************************************************************
;*****************************************************************
:unsure:
La salida es lineal, al parecer.
 
Última edición por un moderador:
Cada paso del ADC a 10 bits con VRef+ en 5 V y VRef- en 0V, es cada 0.00488 V (4.88 mV.)

Pero si el ACS712 con 0 Amperes tiene 2.5 V como salida, entonces la lectura del ADC será de 512. (La mitad)
Eso se tendrá que descontar para que con 2.5 V, la lectura en 0 Amperes muestre 0.

Prueba así, pero recuerda que el valor mínimo de entrada al ADC son 2.5 V y el máximo 4.5 V.
PHP:
; Declaración de variables:
Valor_ADC   Var Word
Amperes     Var Byte

Inicio:
    Define ADC_BITS 10      ; 10 bits de resolución
    ADCON1 = %10000101      ; Just. Der. Canales 0,1, VRef+ AN3

Inicia_LCD:
    LCDOut $FE,$83,"AMPERIMETRO"

Programa:
    ADCIn 0,Valor_ADC
    Amperes = (30 * (Valor_ADC - 512) / 439) ; 439 = Valor por paso en 4.5 V. (0.00439 V.)
    LCDOut $FE,$C4,Dec2 Amperes," Amps."
    GoTo    Programa


    End
Este programa usa el pin RA3 (AN3/VRef+) en donde deberás establecer la tensión de referencia.
Coloca un potenciómetro y fija un valor alrededor de 4.88 V para realizar la prueba.

Algo así: ACS712-30A Test.jpg
 
Última edición:
Con la referencia mejoro mucho, tenes razon; Ahí logre hacer algo que se aproxima un poquito mas, pero estoy viendo que lo voy a tener que hacer fisicamente si o si para ver si no es la libreria de proteus lo que no me cierra con exactitud (estoy dudando de los pasos)...

Código:
DEFINE OSC 4
@ DEVICE pic16F877A
@ DEVICE pic16F877A, WDT_OFF
@ DEVICE pic16F877A, PWRT_On
@ DEVICE pic16F877A, PROTECT_OFF

DEFINE LCD_DREG      PORTD    
DEFINE LCD_DBIT      4        
DEFINE LCD_RSREG  PORTD    
DEFINE LCD_RSBIT  2    
DEFINE LCD_EREG      PORTD    
DEFINE LCD_EBIT   3        
DEFINE LCD_BITS      4    
DEFINE LCD_LINES  2


INTCON=%10100001           
TMR0=0 
T2CON = %00000110
PR2=124     

CMCON=7
TRISB=%11111111
TRISC=%01111011
TRISD=%00000000     
PARAR         VAR PORTB.3
BOTON_MAS     VAR PORTB.4
BOTON_MENOS   VAR PORTB.5
BOTON_ENTER    VAR PORTB.6
BOTON_MENU     VAR PORTB.7

Valor_ADC   Var Word
Amperes     Var Byte 
AMP var word              
Mamp var word
;ON INTERRUPT GoTo ATENCION

Inicio:
Define ADC_BITS 10      ; 10 bits de resolución
ADCON1 = %10000101      ; Just. Der. Canales 0,1, VRef+ AN3
    
Programa1:
    LCDOut $FE,1
    ADCIn 0,Valor_ADC
    Amp = (30 * (Valor_ADC - 512) / 439) 
    gosub limites       
    LCDOut $FE,$80,Dec Amp,".",dec1 mamp," Amps"
    LCDOut $FE,$C0, dec valor_adc 
    pause 100
    GoTo Programa1      

Limites:
    if amp > 0 and amp < 1023 then   ; anti desborde
    amp = Amp-1
    mamp = amp>> 1 +1 
    if Valor_ADC < 512 then
    mAmp = 0
    endif
    endif
    if Valor_ADC < 512 then         ;para ignorar valores negativos
    Amp = 0
    endif
    if Valor_ADC > 1022 then        ;para limitar el maximo
    Amp = 30
    endif
     
    return

End

;----------------------------------------------------------------
;----------------------------------------------------------------

;*****************************************************************
;++++++++++++++++++++++++ INTERRUPCION +++++++++++++++++++++++++++
;*****************************************************************

DISABLE
ATENCION:
        

INTCON.2=0    
RESUME
ENABLE

END
;*****************************************************************
;*****************************************************************
:unsure: si no puedo sacarle un mejor margen a los mA... tendre que hacer una tabla al parecer :rolleyes:
 
acá logre mejorarlo un poco sin la referencia de tension ...

Código:
DEFINE OSC 4
@ DEVICE pic16F877A
@ DEVICE pic16F877A, WDT_OFF
@ DEVICE pic16F877A, PWRT_On
@ DEVICE pic16F877A, PROTECT_OFF

DEFINE LCD_DREG      PORTD    
DEFINE LCD_DBIT      4        
DEFINE LCD_RSREG  PORTD    
DEFINE LCD_RSBIT  2    
DEFINE LCD_EREG      PORTD    
DEFINE LCD_EBIT   3        
DEFINE LCD_BITS      4    
DEFINE LCD_LINES  2
;INTCON=%10100001           
;TMR0=0 
;T2CON = %00000110
;PR2=124     
;CMCON=7
DEFINE    ADC_BITS    10        
DEFINE    ADC_CLOCK    3        
DEFINE    ADC_SAMPLEUS    50
ADCON1=%10001110 
TRISB=%11111111
TRISC=%01111011
TRISD=%00000000     

PARAR         VAR PORTB.3
BOTON_MAS     VAR PORTB.4
BOTON_MENOS   VAR PORTB.5
BOTON_ENTER    VAR PORTB.6
BOTON_MENU     VAR PORTB.7

Valor_ADC   Var Word
AMP         var word              
mA          var byte
;ON INTERRUPT GoTo ATENCION

'------------------------------------------------------------------------------- 

Inicio:
   LCDOut $FE,1
   ADCIN 0,valor_adc  
   LCDOut $FE,$80,"ADC =",dec valor_adc
   amp=((valor_adc-511)*100)/139   ;511 es el punto minimo y 139 el valor del paso en mA
   mA=amp//10
   amp=amp/10
   LCDOUT $FE,$C0,"Amp=",dec amp,",",dec mA
   pause 100
   goto inicio 

End

;----------------------------------------------------------------
;----------------------------------------------------------------

;*****************************************************************
;++++++++++++++++++++++++ INTERRUPCION +++++++++++++++++++++++++++
;*****************************************************************

DISABLE
ATENCION:
        

INTCON.2=0    
RESUME
ENABLE

END
;*****************************************************************
;*****************************************************************

ASC712_16F877A.JPG

lo que no me cierra, es que para que el programa me de un valor aproximado con esa libreria, eh tenido que colocar en el valor del paso el 139 (el doble y un poco mas de los 66mV que dice la hoja de datos)... asi que tendre que esperar a tener el sensor en mis manos para ver realmente de cuanto es el salto.
 
No cuando inicia asigna el codigo ascii a eprom1 como lo tienes, el que parece ser 48 necesitas quitar las comillas asi:
Código:
n1 var byte
eprom1 var byte

eprom1=0
[COLOR="red"]'aqui siiii... eprom1 vale 0[/COLOR]
PAUSE 100
[COLOR="blue"]'no tiene sentido que antes declares a eprom1=0 si haces la lectura de la eeprom[/COLOR]
READ 0, eprom1
[COLOR="red"]'aqui si no se ha grabado la eeprom con n1 , eprom1 vale 255[/COLOR]
IF eprom1=255 THEN grabar_clave
GOTO Bienvenida

grabar_clave:
[COLOR="Red"]??? aqui a n1 nunca le dices cuanto vale?[/COLOR]
Write 0, n1
pause 10

' debes poner una pausa de 10ms para que complete la grabacion

siempre entra al iniciar porque la memoria por defecto esta en 255 (FF)

Hola amigo. muchas gracias por esta aclaración. Si yo hubiese sabido que la eprom por defecto al inicarse vale 255 (FF) no hubiera preguntado. Ahora todo está claro. Es más. teniendo la teoría que me dijiste, veo (e hice pruebas) que no importa que valor tiene eprom1, por que siempre al iniciarse se escribirá 255 y por lo tanto se ejecutara´"grabar_clave". Luego ya no valdrá 255 y se ejecutará "Bienvenido". Tambien gracias por el dato de darle una pausa de 10ms después del WRITE. Saludos.
 
como es el codigo de interrupcion por timer en el pic 18f4550 ya vengo buscando horas en internet pero no hay mucho material del tema sino que hay mucho info de interrupcion externa
 
¿De cuál timer? El PIC18F4550 tiene 4 timers, 1 de 8 bits y 3 de 16 bits.
El código también depende de lo que quieras hacer.

:unsure: Interesante. Cómo se nota que no toqué la hoja de datos.
Ahora implemento el buscador de la página para ver si encuentro más información del 18F4550.
Estoy dejando de lado los 16F876 y 16F877 para adentrarme a esta nueva familia con USB, ya que me di cuenta que varios fuses que usaba anteriormente, no me funcionan con el 18F2550/4550 :cry:
 
Última edición por un moderador:
Estoy dejando de lado los 16F876 y 16F877 para adentrarme a esta nueva familia con USB, ya que me di cuenta que varios fuses que usaba anteriormente, no me funcionan con el 18F2550/4550
Así es. Los fuses de la palabra de configuración para los PIC18F2550/4550, son diferentes a los PIC16.
Sobre todo por la configuración del prescaler, aunque algunos PIC de nueva generación como los PIC12F18XX y PIC16F18XX, también lo tienen.
No para el uso del módulo USB con oscilador a cristal, sino para elevar la frecuencia del oscilador interno.

Otra cosa a tener en cuenta, es que usan dos líneas o más para la palabra de configuración.
 
si, tenes razon... practicamente estoy re-arrancando de cero por que son similares, pero :no: iguales....
lo poco que hice, me base en fuses de ejemplo y no preste atencion... vamos a ver si me pongo al dia relativamente rapido, por que tengo varias cositas para hacer y me esta gustando bastante este micro. Saludos y veremos con que dolor de cabezo me vuelvo :LOL:
 
Hola, saludos
hace unos meses atras D@rkbytes me ayudo con un contador ascendente, descendente,de 1 a 6 y viceversa, a partir de ahi logre hacerle unas pequeñas modificaciones a mi gusto, lo que no he podido lograr es hacer que muestre un 0 si le pongo un 0 en el pin RA2 del pic 16f84A independientemente del numero en que este la cuenta, no logro dar la instruccion correcta, pido el favor alguien me ayude con esto y disculpen por haber solicitado ayuda en este tema ya que asm desde cero hace 6 meses nadie escribe, adjunto archivos el .bas que he manipulado y el original sin modificacion, Gracias.
 

Adjuntos

  • Archivos.rar
    25.1 KB · Visitas: 48
Última edición:
Lo que no he podido lograr, es hacer que muestre un 0 si le pongo un 0 en el pin RA2 del PIC16F84A independientemente del número en que esté la cuenta, no logro dar la instrucción correcta.
No funciona porque la sentencia la estás colocando al inicio y no dentro del bucle.
Eso hará que sólo sea leída cuando se inicia el programa y no constantemente.

Un cambio para eso, sería así:
PHP:
Digito Var Byte

Inicio:
    TRISB = $80
    PORTB = 6
    Clear
        
MainLoop:

    IF PORTA.2 = 0 then
        PORTB = $3F
    EndIf 
      
    If PORTA.1 = 1 Then
        Digito = Digito + 1
        If Digito > 6 Then
            Digito = 6
        Endif
        GoSub BCD7Segs
        While PORTA.1 = 1: Wend
    EndIf

    If PORTA.0 = 1 Then
        If Digito = 0 Then
            Digito = 0
        Endif
        Digito = Digito - 1
        GoSub BCD7Segs
        While PORTA.0 = 1: Wend
    EndIf
    
    Goto MainLoop
    
BCD7Segs:
    LookUp Digito,[6,$5B,$4F,$66,$6D,$7D], PORTB
    Return

     End
Disculpen por haber solicitado ayuda en este tema ya que asm desde cero hace 6 meses nadie escribe.
Este es el tema correcto porque los archivos que adjuntas están escritos en PIC Basic Pro.
No están escritos en ensamblador y tampoco con Proton IDE como mencionas, por el archivo "asm proton ide.txt"

Ahora hay que aclarar algo importante.
El código que expuse hace lo que quieres, pero retiene el conteo.
Si se presionan los botones para incrementar o decrementar, el conteo continuará desde donde se quedó.

Si al mostrar un 0 en el display deseas que el conteo también sea 0 nuevamente, el código deberá ser diferente.

Con respecto a los temas sin actividad:
Si puedes preguntar en temas que tengan más de 6 meses sin actividad.
Lo que no debes hacer, es responder a consultas que ya fueron tratadas en su tiempo o escribir mensajes con contenido irrelevante que no aporten al tema.
 
Última edición:
Gracias, D@rkbytes, me guie con el codigo que envio, logre acomodarlo con un poco de trabajo, y ya hace lo que quiero que haga, contar del 1 al 6 y viceversa y al recibir un pulso negativo en RA2 colocar un cero sin tener en cuenta el numero mostrado y vuelve a empezar, de todas maneras se puede aumentar del 0 al 9, aqui lo pongo de pronto a alguien le interese y le sirva para aplicarlo en algun proyecto, Saludos.
 

Adjuntos

  • Archivos.rar
    16.4 KB · Visitas: 43
Hola, no hace mucho me encontre una alarma tirada en el cesto de la basura de un amigo, asi que no dude en tomarla y ahora estoy en fase de recicle.
Esta alarma es un sistema que permite tener sensores alambrico e inalambricos; Como no tiene la posibilidad de conectar teclado, la hace practicamente obsoleta para recuperar y o re-programar, por lo tanto, se me ocurrio adicionar unproyecto que tengo de backup celular y hacer nuevamente que esta alarma funcione nuevamente; O sea, voy a implementar el circuito, pero con otra logica, y adicionando otras funciones mas.

hacking_alarm_2.JPG

hacking_alarm_3.JPG

pasando en limpio el circuito, simplificamos lo que nos interesa y tenemos lo siguiente:

hacking_alarm_1.JPG

La idea de mi re-diseño, es sumar un backup celular con un motorolla C115; y la etapa de control de salidas y entradas, reciclar la vieja tarjeta... Acá un ejemplo de mi proyecto de backup celular con Motorolla c115:


Lista de comandos AT: https://en.wikipedia.org/wiki/Motorola_phone_AT_commands

No es nada del otro mundo, pero cito este tema acá para compartir algunas partes de mi programa que se, que de seguro a mas de uno le puede servir para sus proyectos....
En esta 1era beta, voy a implementar un 16F877A, pero futuro vere si implemento un 18F4550 asi programo por software externo la lista blanca de numeros de telefonos, mensajes pre-grabados, etc

Hacking_AlarmBupCEL.jpg

Aca un estracto de como mandar un mensaje SMS con el motorola c115

Código:
NUM0 var byte
NUM0 = "1"   
;***numero de usuario1***
NUMA1 var byte
NUMB1 var byte
NUMC1 var byte
NUMD1 var byte
NUME1 var byte
NUMF1 var byte
NUMG1 var byte
NUMH1 var byte

;***numero de usuario2***
NUMA2 var byte
NUMB2 var byte
NUMC2 var byte
NUMD2 var byte
NUME2 var byte
NUMF2 var byte
NUMG2 var byte
NUMH2 var byte

.......

SEROUT2 portc.6,84,["AT",13]
PAUSE 500
serout2 portc.6,84,["AT+CMPS=",34,"SM",34,44,34,"SM",34,44,34,"SM",34,13]
pause 2000
serout2 portc.6,84,["AT+CMPS=",34,"ME",34,44,34,"ME",34,44,34,"ME",34,13]
PAUSE 2000
serout2 portc.6,84,["AT+CMGF=1",13] ; pasar modem gsm a modo texto
pause 500
serout2 portc.6,84,["AT+CMGS=",34,DEC NUM0,DEC NUMA1,DEC NUMB1,DEC NUMC1,DEC NUMD1,DEC NUME1,DEC NUMF1,DEC NUMG1,DEC NUMH1,34,13]
PAUSE 300
SEROUT2 portc.6,84,["DISPARO ALARMA",26] ; enviar texto
pause 200
serout2 portc.6,84,["AT+CMGS=",34,dec NUM0,dec NUMA1,dec NUMB1,dec NUMC1,dec NUMD1,dec NUME1,dec NUMF1,dec NUMG1,dec NUMH1,34,13]
pause 300
SEROUT2 portc.6,84,["DISPARO ALARMA",26]; enviar
PAUSE 5000
SEROUT2 portc.6,84,["AT",13]
PAUSE 1000
serout2 portc.6,84,["AT+CMPS=",34,"SM",34,44,34,"SM",34,44,34,"SM",34,13]
pause 2000
serout2 portc.6,84,["AT+CMPS=",34,"ME",34,44,34,"ME",34,44,34,"ME",34,13]
PAUSE 2000
serout2 portc.6,84,["AT+CMGF=1",13] ; pasar modem gsm a modo texto
pause 500
serout2 portc.6,84,["AT+CMGS=",34,dec NUM0,dec NUMA2,dec NUMB2,dec NUMC2,dec NUMD2,dec NUME2,dec NUMF2,dec NUMG2,dec NUMH2,34,13]
PAUSE 300
SEROUT2 portc.6,84,["DISPARO ALARMA",26]; texto a enviar 
pause 200
serout2 portc.6,84,["AT+CMGS=",34,dec NUM0,dec NUMA2,dec NUMB2,dec NUMC2,dec NUMD2,dec NUME2,dec NUMF2,dec NUMG2,dec NUMH2,34,13] ; enviar SMS
pause 300
SEROUT2 portc.6,84,["DISPARO ALARMA",26]; enviar
PAUSE 300

Ahora voy a pulir lo que tengo hasta ahora y sacarle un poco mas de brillo; Ni bien ueda terminar aunque sea la 1er parte, voy a subir para compartir el resto... estoy trabado en como sumar controles RF y o sensores RF en la memoria para adicionar o borrar dispositivos inalambricos... En fin, esto es solo el inicio
 

Adjuntos

  • HackAlarmBupCEL.pdf
    2.4 MB · Visitas: 53
para los que me preguntaron como es la parte receptora, 1ero que nada les pido que no me pregunten porprivado asi toda la info queda aca y sirve para todos... 2do, enmodo respuesta, la etapa receptora es 98% siilar a la que esta aca con el lm358
https://www.forosdeelectronica.com/f22/esquema-pcb-modulo-433-mhz-comercial-99526/
Bueno... ya tengo algo funcionando; en un rato si me hago de tiempo libre con el trabajo, me voy a poner a soldar cables y armar la placa del pic con la alarma vieja...
la idea seria que quede algo asi:


aca unas fotos de los avances :cool:

placa ya sin el micro original...
hacking_alarm_4.JPG

soldando los 1eros conductores...
hacking_alarm_5.JPG

Al terminar, le di un refuerzon con la pistola de plastico para evitar movimientos que me desuelden los conductores...
hacking_alarm_6.JPG

Tenia una placa generica mia de 40 pines que se adapta perfecto para el proyecto, sai que me puse a perforarla...
hacking_alarm_7.JPG

vista del gabinete con el trafo, la bateria y el hardware antiguo
hacking_alarm_8.JPG

hacking_alarm_9.JPG

idea de donde va a quedar la otra placa... y tengo que perforar la chapa del frnte para poner el display
hacking_alarm_999.JPG

esto solo es el 10% del trabajo... despues tengo que hacer el teclado RF :rolleyes:
Es indispensable antes de armar el sistema, o sea, activar la alarma, saber si todos los sensores estan funcionando o por lo menos, si estos no estan activados (ventanas o puertas abiertas, etc); Es por eso que le sume un par de lineas mas para chequear todas las zonas cuando recibe la orden de activar...les muestro unas lineas de como lo hice

Código:
BACKUP:
SENAL=0
LCDOUT $FE,1
PAUSE 200
LCDOUT $FE,$80,"  MODO ALARMA   "
LCDOUT $FE,$C0,"  DESACTIVADA   "
BACKUP2:
SERIN PORTB.1,T2400,50,BACKUP2,SENAL
if SENAL="A" then 
    HIGH BIP
    PAUSE 900
    LOW BIP
    GOTO CHECK
   ENDIF
GOTO BACKUP2

;***************************
;===========================
;***************************
CHECK:
if zona1 = 0 then Z1=1
if zona2 = 0 then Z2=2
if zona3 = 0 then Z3=3
if zona4 = 0 then Z4=4
if zona5 = 0 then Z5=5
if zona6 = 0 then Z6=6
IF PORTB.0=0 THEN Z7=7

if Z1 > 0 THEN ERROR
if Z2 > 0 THEN ERROR
if Z3 > 0 THEN ERROR
if Z4 > 0 THEN ERROR
if Z5 > 0 THEN ERROR
if Z6 > 0 THEN ERROR
IF Z7 > 0 THEN ERROR
GOTO INICIO   ; sub programa donde monitoreamos las zonas

ERROR:
LCDOUT $FE,1
PAUSE 200
LCDOUT $FE,$80,"ERROR EN ZONAS: "
LCDOUT $FE,$C0,DEC Z1," ",DEC Z2," ",DEC Z3," ",DEC Z4," ",DEC Z5," ",DEC Z6," ",DEC Z7
PAUSE 2000
Z1=0
Z2=0
Z3=0
Z4=0
Z5=0
Z6=0
Z7=0
GOTO BACKUP
mañana despues de trabajar, seguire otro buen rato...

Saludos


pd: Ricardo, no me dejo editar e mensaje anterior para poner todo junto... disculpas
 
Última edición:
ya casi casi lo tengo... ya hice unas pruebas y corregi algunas cositas... Como sabia que despues tenia que modificar casi todo para poder configurarlo por software, migre todo al 18F4550 y despues de hacer todo eso, no me arrancaba... le di tantas vueltas que casi casi lo tiro por la ventana (No me reconocia la PC el hardware)...
Se me ocurrio medir el capacitor de VUSB y estaba dañado :rolleyes: sin este capacitor, o con un capacitor de un valor fuera de los 220nF/470nF, no funciona :oops:

hacking_alarm_10.JPG

hacking_alarm_11.JPG

hacking_alarm_12.JPG

Ni bien termine de emprolijar todo y armar el conector RS232 para la comunicacion con el celular C115, armo video y subo las lineas de programacion mas relevantes para que puedan armar sus ideas.
Saludos


PD: El software en Vb me esta volviendo loco, pero vamos a ver si lo puedo sacar a flote bien, sin ningun error :cry:



Bien.... 1er problema surgente.. cuando estaba reformando todo, se me ocurrio ver la manera de reciclar unos controles remotos que tenia tirado... como no sabia si eran de 2400-4800 o 9600 baudios, para ver, se me ocurrio hacer esto:

Código:
INISISTEMA:
GOSUB PRUEBASENAL
IF SENAL = 0 THEN 
  LCDOUT $FE,1
   LCDOUT $FE,$80,"     NO HAY     "
   LCDOUT $FE,$C0," SENAL ENTRANTE "
   
GOTO INISISTEMA
ENDIF
IF SENAL > 0 THEN BACKUP
IF PORTA.1 = 0 THEN BACKUP
GOTO INISISTEMA


PRUEBASENAL:
LCDOUT $FE,1
LCDOUT $FE,$80," PROBANDO SENAL "
FOR X = 1 TO 5
high bip
pause 1100
low bip
GOSUB TEST1
high bip
pause 1100
low bip
GOSUB TEST2
NEXT
goto inisistema

TEST1:
LCDOUT $FE,$C0,"     EN 2400    "
SERIN PORTB.1,T2400,2000,TEST1A,rfprog1
RETURN

TEST2:
LCDOUT $FE,$C0,"     EN 9600    "
SERIN PORTB.1,T9600,2000,TEST2A,rfprog2
RETURN

TEST1A:
RFprog1= SENAL
GOTO INISISTEMA

TEST2A:
RFprog2= SENAL
GOTO INISISTEMA

Pero de la imaginacion al hecho, me parece que algo confundi o mal interprete... No logre que capture ni ruido :cry:
mi idea era que capture algo...aunque sea unos bits... sera que tendre que trabajarlo con una variable word? voy a probar otras cosas pero con otro micro para ver si puedo leer los bits (si no mal recuerdo, la gran mayoria trabaja con 10 bits) aunque sea de los controles remotos y guardarlos... Si alguien tiene una idea de como puedo encarar esta parte...orientacion... cualquier cosa es bienvenida; Slaudos
 
Última edición:
Les tengo una pregunta...

estoy trabajando con la libreria del punto flotante y me surgio una duda...

si yo quiero hacer una multiplicacion en enteros digamos 100*14, pues no es problema pongo:

Código:
aint = 100
Gosub itofa			' Convert aint to float

bint = 14
Gosub itofb			' Convert bint to float

Gosub fpmul			
Gosub ftoia	
Lcdout  $fe,1, "100*14="
If  (aint.15) Then Lcdout "-"	
lcdout dec abs aint

¿pero como en nombre de zeus se le hace para multiplicar un entero con un flotante como por ejemplo 100*2.5 ?
 
Ya le diste una leida a las libretias de darrel tailor ? ( :unsure: mepa que se escribia asi)
Creo que guarde en algun momento algo similar a lo que planteas...dejame ver si encuentro en ie disco esta..no importa si esta en asm?
 
Ya le diste una leida a las libretias de darrel tailor ?

Nop, no las he leido...

Creo que guarde en algun momento algo similar a lo que planteas...dejame ver si encuentro en ie disco esta..no importa si esta en asm?
quisiera hacerlo en basic utilizando la libreria del PBP, y lo que quiero evitar es inmiscuirme en ver como esta echa la libreria que hasta donde se utiliza la libreria propia del MPASM (math16).

tambien quiero evitar el hacer operaciones antes, como por ejemplo dividir o sea 5/100 y despues sumar al entero 2 y bla, bla.. quisiera poner directamente el flotante en alguna variable de las que utiliza la propia libreria y despues efectuar la multiplicacion que supongo se podria.
 
Última edición:
Atrás
Arriba