Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?
23/04/2014 #2741

Avatar de ferdy575

Hola muchachos de nuevo vengo por aquí a molestar, a ver les cuento resulta que nunca he usado las memorias I2C pues nunca las he necesitado, y me dio por estudiar este interesante tema y encontré en un libro de basic para pics un programa que supuestamente escribe y lee la memoria, pero en el proteus no da ninguna señal de vida y como no conozco del tema no se que le faltara ó que estará mal aquí les subo los archivos para que los vean a ver sí me pueden ayudar.
Ahí me disculpan la molestadera
23/04/2014 #2742
Moderador

Avatar de D@rkbytes

ferdy575 dijo: Ver Mensaje
encontré en un libro de basic para pics un programa que supuestamente escribe y lee la memoria, pero en el proteus no da ninguna señal de vida y como no conozco del tema no sé que le faltará ó que estará mal
1.- Estás poniendo el pin RS en el pin RA4 y ese pin es Open Drain, coloca una resistencia pull-up.
2.- En el diseño tienes el pin E en el pin RB3, pero en el código estás seleccionando RA5.
3.- Esto es opcional, pero te falta agregar la palabra de configuración.

Saludos.
23/04/2014 #2743

Avatar de ferdy575

D@rkbytes dijo: Ver Mensaje
1.- Estás poniendo el pin RS en el pin RA4 y ese pin es Open Drain, coloca una resistencia pull-up.
2.- En el diseño tienes el pin E en el pin RB3, pero en el código estás seleccionando RA5.
3.- Esto es opcional, pero te falta agregar la palabra de configuración.

Saludos.
hola darkbytes gracias por mirar mi proyecto, lo acabo de mirar y tienes razón con estos errores pero ya los corregí y sigue sin funcionar, aquí pongo de nuevo los archivos para que los vean y adicionalmente puse el pedacito del libro de donde saque el proyecto para que lo vean a ver sí es que me equivoque en algo para que por favor me colaboren.
Archivos Adjuntos
Tipo de Archivo: rar PRUEBA MEMORIAS.rar (348,9 KB (Kilobytes), 43 visitas)
23/04/2014 #2744
Moderador

Avatar de D@rkbytes

ferdy575 dijo: Ver Mensaje
Hola D@rkbytes, gracias por mirar mi proyecto, lo acabo de mirar y tienes razón con estos errores pero ya los corregí y sigue sin funcionar
Debería funcionar, mira el archivo que adjunto con las correcciones que te mencioné.
Archivos Adjuntos
Tipo de Archivo: rar PRUEBA MEMORIAS II.rar (19,6 KB (Kilobytes), 46 visitas)
23/04/2014 #2745

Avatar de papirrin

Porque dices que no funciona? yo lo probe y si funciona

otra cosa es que no tiene sentido el If que pones dentro de For..Next y las etiquetas leer: escribir:

ponlo asi

Código:
Define Osc 4 ' Define el Oscilador para un Cristal de 4 Mhz.

DEFINE  LCD_BITS 4
Define	LCD_DREG	PORTA
Define	LCD_DBIT	0
Define	LCD_RSREG	PORTA
Define	LCD_RSBIT	4
Define	LCD_EREG	PORTB
Define	LCD_EBIT	3              
DEFINE LCD_COMMANDUS 2000

Symbol SDA = PORTB.0 ' Alias para RB0
Symbol SCL = PORTB.1 ' Alias para RB1

I       VAR Byte ' Declaración de variable "I"
A1      VAR Byte ' Declaración de variable "A1"
Direc   VAR Word ' Declaración de variable "Direc"
Control VAR Byte ' Declaración de variable "Control"
Dato    VAR Byte ' Declaración de variable "Dato"

Pause 200 ' Pausa de 200 milisegundos para la LCD

LCDOut $fe, 1 ,"HOLA"

Direc   = $00 ' Dirección en la memoria externa
Control = $A0 ' Dato de Control
Dato    = 1 ' Dato inicial a ser grabado

For I = 0 To 49 ' Repetición
 I2Cwrite SDA, SCL, Control, Direc, [dato] ' Escribe la memoria
 pause 10 ' Pausa de 10 milisegundos
 Direc = Direc + 1 ' Suma 1 a la variable "Direc"
 Dato = Dato + 2 ' Suma 2 a la variable "Dato"
Next I

LCDOUT $fe, 2,"Datos Grabados" ' Muestra mensaje por la LCD
Pause 2000 ' Pausa de 2 segundos

LCDOut $fe, 2,"Inicia Lectura" ' Muestra mensaje por la LCD
Pause 2000 ' Pausa de 2 segundos

Direc = $00 ' Inicializa la dirección en la memoria externa

For I = 0 To 49 ' Repetición
 I2CREAD SDA, SCL, Control, Direc, [A1] ' Lectura de memoria
 LCDOUT $fe, 2,"Dato ",#I,": ",#A1," " ' Muestra el dato leido
 Pause 1000 ' Pausa de 1 segundo
 Direc = Direc + 1 ' Suma 1 a la variable "Direc"
Next I

GoTo Final ' Salta a la etiqueta "final"
End
23/04/2014 #2746

Avatar de ferdy575

MUCHACHOS muchas gracias los felicito ustedes son unos MONSTRUOS para esta vaina ese bicho funciono de maravilla, y no era mucho lo que le faltaba pero ustedes lo hicieron funcionar, nuevamente gracias.
24/04/2014 #2747

Avatar de torres.electronico

Buenas; hace un tiempo habia implementado unas librerias para atender interrupciones no convencionales mienras trabajabael micro... No recuerdo la pagina y justo ahora que las necesitabas para o presindir de otro micro
Basicamente me refiero a que en esta alarma que estoy jugando, tengo un modem enfora, el cual enviar u realizar llamados no es el problema... el problema es que no puedo leer mensajes u respuestas del modem y colocarlas en el display sin que me pare el programa por la instruccion serin...por que? por que serin pausa el programa y se queda esperando el dato entrante. Si bien puedo configurar el tiempo de espera y luego saltar a una etiqueta...el problema es uqe puedo perder mensajes... Implemente interrupciones por tiempo y tampoco sirve...
Si alguien recuerda esta pagina que sugiere estas interrupciones no convencionales, o tiene algunas idea, se lo voy agradecer...
Les comparto lo qe hay hasta el momento...una alarma con teclado y al detectar el disparo de la entrada portb.0, manda un sms al numero prefijado en la programacion... como esta, funciona, pero si no le encuentro solucion, para poder exprimir mas el modem, tendre que usar otro pic mas y que este se encargue solo del modem, y el 16f877 del teclado, lcd y sensores...

Código:
include "modedefs.bas"
define OSC 4

ADCON1 = %00001111 
TRISA = %00001111
TRISB = %00011111
TRISC = %10000000
TRISD = %00000011
TRISE = %00000000
;*************** DISPLAY LCD ****************
DEFINE LCD_DREG PORTD 
DEFINE LCD_BITS 4                
DEFINE LCD_DBIT 4                
DEFINE LCD_RSREG PORTD 
DEFINE LCD_RSBIT 2              
DEFINE LCD_EREG PORTD 
DEFINE LCD_EBIT 3               
DEFINE LCD_LINES 2              
POS1 var Byte
POS2 var Byte
POS3 var Byte
POS4 var Byte
POS1 = $C0 
POS2 = $C1 
POS3 = $C2 
POS4 = $C3
LCDOUT $FE,$40,$00,$00,$10,$0F,$0F,$0D,$18,$10 
LCDOUT $FE,$48,$04,$0E,$1F,$1C,$1C,$1C,$06,$05 
LCDOUT $FE,$50,$00,$00,$10,$0F,$0F,$0D,$04,$06 
LCDOUT $FE,$58,$04,$0E,$1F,$1C,$1C,$1C,$08,$18 
LCDOUT $FE,$60,$04,$0E,$1F,$07,$07,$07,$02,$03 
LCDOUT $FE,$68,$00,$00,$01,$1E,$1E,$16,$04,$0C 
LCDOUT $FE,$70,$04,$0E,$1F,$07,$07,$07,$0C,$14 
LCDOUT $FE,$78,$00,$00,$01,$1E,$1E,$16,$03,$01 

;**************** TECLADO ******************
UNO      VAR PORTB.1 
DOS      VAR PORTB.2
TRES     VAR PORTB.3
CUATRO   VAR PORTB.4
A        VAR PORTB.5 
B        VAR PORTB.6
C        VAR PORTB.7
D        VAR PORTC.0

;*************** SALIDAS ********************
LEDROJO      VAR PORTE.0
LEDVERDE      VAR PORTE.1
SIRENA   VAR PORTE.2
SONIDO    VAR PORTA.5
;*************** VARIABLES ******************
bData   Var Byte
BANDERA VAR BYTE
BANDERA1 VAR BYTE
BANDERA2 VAR BYTE
NUMERO   VAR BYTE 
R        VAR BYTE 
SET1 VAR BYTE
SET2 VAR BYTE
SET3 VAR BYTE 
SET4 VAR BYTE
dato VAR WORD 
seguridad_ON var byte

On Interrupt GoTo ZONA 
INTCON = %10010000 

LCDOUT $FE,1
LCDOUT "INICIO SISTEMA"
LCDOUT $FE,$C2,"DE SEGURIDAD"
PAUSE 1000
GOSUB perroGUARDIAN 
LCDOUT $FE,1
BANDERA = 0
INICIANDO:
FOR R=1 TO 2

HIGH LEDROJO:HIGH LEDVERDE:HIGH SONIDO
PAUSE 200
LOW LEDROJO:LOW LEDVERDE:LOW SONIDO
PAUSE 100
NEXT

LCDOUT $FE,$C0, 0
;******************GUARDAR LA CLAVE EN LA MEMORIA EEPROM************************
EEPROM 0,[1,2,3,4]
;*******************************************************************************

ARRANQUE:
PAUSE 500
LCDOUT $FE,1
LCDOUT "(*)S/N (#)Config"
LCDOUT $FE,$C0,"(0) PRUEBA GSM"
BANDERA = 0
;*******************************************************************************
LOW A
IF UNO=0 THEN NUMERO=1:RETURN
IF DOS=0 THEN NUMERO=2:RETURN
IF TRES=0 THEN NUMERO=3:RETURN
HIGH A
;*******************************************************************************
LOW B
IF UNO=0 THEN NUMERO=4:RETURN
IF DOS=0 THEN NUMERO=5:RETURN
IF TRES=0 THEN NUMERO=6:RETURN
HIGH B
;*******************************************************************************
LOW C
IF UNO=0 THEN NUMERO=7:RETURN
IF DOS=0 THEN NUMERO=8:RETURN
IF TRES=0 THEN NUMERO=9:RETURN
HIGH C
;*******************************************************************************
LOW D
IF UNO=0 THEN mensajeACTIVADO
IF DOS=0 THEN MODEM
IF TRES=0 THEN GRABAUNO
HIGH D
PAUSE 25
GOTO ARRANQUE

mensajeACTIVADO:
GOSUB perroGUARDIAN
LCDOUT $FE,1
LCDOUT $FE,2," SISTEMA ALARMA "
LCDOUT $FE,$C0,"    ACTIVADA    "
PAUSE 2000
LCDOUT $FE,1
BANDERA = 1
GOTO RESETEO

RESETEO:
;LOW PUERTA
LCDOUT $FE,1
FOR R=1 TO 2
HIGH LEDROJO:HIGH SONIDO
PAUSE 200
LOW LEDROJO:LOW SONIDO
PAUSE 100
IF D=0 AND UNO=0 THEN RESETEO
NEXT

READ 0,SET1
READ 1,SET2
READ 2,SET3
READ 3,SET4

GOSUB TECLAUNO

GRABAUNO:
lcDout $FE,1
LCDOUT $FE,3,"INGRESE SU CLAVE":LCDOUT $FE,$C3,"ANTERIOR"
PAUSE 1000
GOSUB TCLAUNO
RETURN

TCLAUNO:
LCDOUT $FE,1
LCDOUT $FE,2,"CLAVE ANTERIOR:"
GOSUB BARRIDO
GOSUB PTECLA
IF NUMERO=SET1 THEN GOSUB TCLADOS
GOTO FALSO

TCLADOS:
GOSUB BARRIDO
GOSUB PTECLA
IF NUMERO=SET2 THEN GOSUB TCLATRES
GOTO FALSO1

TCLATRES:
GOSUB BARRIDO
GOSUB PTECLA
IF NUMERO=SET3 THEN GOSUB TCLACUATRO
GOTO FALSO2

TCLACUATRO:
GOSUB BARRIDO
GOSUB PTECLA
IF NUMERO=SET4 THEN GOSUB GRABA_1
GOTO FALSO3

GRABA_1:
LCDOUT $FE,1
LCDOUT $FE,2,"INGRESE SU NUEVA":LCDOUT $FE,$C3,"CLAVE:"
LCDOUT $FE,$C5
GOSUB PTECLA:HIGH LEDROJO
GOSUB BARRIDO:GOSUB PTECLA
HIGH LEDROJO
WRITE 0,NUMERO

GRABADOS:

GOSUB BARRIDO:GOSUB PTECLA
GOSUB PTECLA:HIGH LEDROJO
HIGH LEDROJO
WRITE 1,NUMERO
GRABATRES:

GOSUB BARRIDO:GOSUB PTECLA
GOSUB PTECLA:HIGH LEDROJO
HIGH LEDROJO
WRITE 2,NUMERO

GRABACUATRO:

GOSUB BARRIDO:GOSUB PTECLA
GOSUB PTECLA:HIGH LEDROJO
HIGH LEDROJO
WRITE 3,NUMERO
LOW D
IF D=0 AND UNO=0 THEN RESETEO
HIGH D
PAUSE 500
LCDOUT $FE,1
LCDOUT $FE,2,"NUEVA CLAVE HA"
LCDOUT $FE,$C0,"SIDO CONFIGURADA"
PAUSE 2000
GOTO ARRANQUE

BARRIDO:
;*******************************************************************************
LOW A
IF UNO=0 THEN NUMERO=1:RETURN
IF DOS=0 THEN NUMERO=2:RETURN
IF TRES=0 THEN NUMERO=3:RETURN
HIGH A
;*******************************************************************************
LOW B
IF UNO=0 THEN NUMERO=4:RETURN
IF DOS=0 THEN NUMERO=5:RETURN
IF TRES=0 THEN NUMERO=6:RETURN
HIGH B
;*******************************************************************************
LOW C
IF UNO=0 THEN NUMERO=7:RETURN
IF DOS=0 THEN NUMERO=8:RETURN
IF TRES=0 THEN NUMERO=9:RETURN
HIGH C
;*******************************************************************************
LOW D
IF UNO=0 THEN GOSUB BORRAR
IF DOS=0 THEN NUMERO=0:RETURN
IF TRES=0 THEN GOSUB GRABAUNO
HIGH D
PAUSE 25
GOTO BARRIDO
;*******************************************************************************

PTECLA:

HIGH LEDROJO:HIGH SONIDO
PAUSE 100
LOW LEDROJO:LOW SONIDO

ESPACIO:
IF UNO=0 THEN ESPACIO
IF DOS=0 THEN ESPACIO
IF TRES=0 THEN ESPACIO
PAUSE 25
RETURN

TECLAUNO:
LCDOUT $FE,2,"INTRODUCIR CLAVE"
GOSUB BARRIDO
LCDOUT $FE,$C5, "*"
GOSUB PTECLA
IF NUMERO=SET1 THEN TECLADOS
GOTO FALSO

TECLADOS:
GOSUB BARRIDO
LCDOUT "*"
GOSUB PTECLA
IF NUMERO=SET2 THEN TECLATRES
GOTO FALSO1

TECLATRES:
GOSUB BARRIDO
LCDOUT "*"
GOSUB PTECLA
IF NUMERO=SET3 THEN TECLACUATRO
GOTO FALSO2

TECLACUATRO:
GOSUB BARRIDO
LCDOUT "*"
GOSUB PTECLA
IF NUMERO=SET4 THEN ABRIR
GOTO FALSO3

ABRIR:
LCDOUT $FE,1
LCDOUT $FE,2," CLAVE CORRECTA"
;HIGH PUERTA
FOR R=1 TO 4
HIGH LEDVERDE:HIGH SONIDO
PAUSE 200
LOW LEDVERDE:LOW SONIDO
NEXT
PAUSE 500
LOW D
IF D=0 AND UNO=0 THEN BORRAR
HIGH D
PAUSE 25
GOTO mensajeDESACTIVADO

FALSO:
GOSUB BARRIDO:GOSUB PTECLA:LCDOUT $FE,$C5, "*"
FALSO1:
GOSUB BARRIDO:GOSUB PTECLA:LCDOUT "*"
FALSO2:
GOSUB BARRIDO:GOSUB PTECLA:LCDOUT "*"
FALSO3:
LCDOUT $FE,1
FOR R=1 TO 10
HIGH LEDROJO:HIGH SONIDO
PAUSE 200
LOW LEDROJO:LOW SONIDO
NEXT
IF D=0 AND UNO=0 THEN BORRAR

ALERTA:
LCDOUT $FE,2,"CLAVE INCORRECTA"
HIGH LEDROJO:HIGH SONIDO
PAUSE 200
LOW LEDROJO:LOW SONIDO
LOW D
IF D=0 AND UNO=0 THEN BORRAR
HIGH D
GOTO ALERTA 

BORRAR:

LCDOUT $FE,1
GOSUB RESETEO
RETURN

mensajeDESACTIVADO:
PAUSE 1500
LOW SIRENA
BANDERA = 0
LCDOUT $FE,1
LCDOUT $FE,2," SISTEMA ALARMA "
LCDOUT $FE,$C0,"  DESACTIVADA   "
PAUSE 2000
GOTO ARRANQUE

MODEM:
LCDOUT $FE,1
LCDOUT $FE,2,"PRUEBA MODEM GSM"
LCDOUT $FE,$C0,"    ACTIVADA    "

PRUEBA1:
PAUSE 1000
LCDOUT $FE,1
LCDOUT $FE,2,"AT+CMGR=1"
serout PORTC.6,T9600,["AT+CMGR=1",10,13]
;serin PORTC.7,T9600,[],dato
serin PORTC.7,T9600,900,PRUEBA2,[],dato
LCDOUT $FE,$C0,DEC DATO

PRUEBA2:
PAUSE 1000
LCDOUT $FE,1
LCDOUT $FE,2,"AT+CMGD=1"
SEROUT PORTC.6,T9600,["AT+CMGD=1",10,13]
;serin PORTC.7,T9600,[],dato
serin PORTC.7,T9600,900,PRUEBA3,[],dato
LCDOUT $FE,$C0,DEC DATO

PRUEBA3:
pause 1000
LCDOUT $FE,1
LCDOUT $FE,2,"AT+CMGD=2"
SEROUT PORTC.6,T9600,["AT+CMGD=2",10,13]
;serin PORTC.7,T9600,[],dato
serin PORTC.7,T9600,900,PRUEBA4,[],dato
;SERIN PORTC.7,T9600,DATO
LCDOUT $FE,$C0,DEC DATO

PRUEBA4:
pause 1000
LCDOUT $FE,1
LCDOUT $FE,2,"AT+CMGF=1"
SEROUT PORTC.6,T9600,["AT+CMGF=1",10,13]
;serin PORTC.7,T9600,[],dato
serin PORTC.7,T9600,900,PRUEBA5,[],dato
;SERIN PORTC.7,T9600,DATO
LCDOUT $FE,$C0,DEC DATO

PRUEBA5:
pause 1000
LCDOUT $FE,1
LCDOUT $FE,2,"2976256173"
SEROUT PORTC.6,T9600,["AT+CMGS=",34,"2976256173",34,10,13]
;serin PORTC.7,T9600,[],dato
serin PORTC.7,T9600,900,PRUEBA6,[],dato
;SERIN PORTC.7,T9600,DATO  
LCDOUT $FE,$C0,DEC DATO

PRUEBA6:
pause 1000
LCDOUT $FE,1
LCDOUT $FE,2,"SMS: PRUEBA TEL"
SEROUT PORTC.6,T9600,["PRUEBA TEL",26,10,13] 
;serin PORTC.7,T9600,[],dato
serin PORTC.7,T9600,900,PRUEBA7,[],dato
;SERIN PORTC.7,T9600,DATO
LCDOUT $FE,$C0,# DATO
pause 1000

PRUEBA7:
PAUSE 1500
LCDOUT $FE,1
LCDOUT $FE,2,"PRUEBA TERMINADA"
LCDOUT $FE,$C0,"   REINICIANDO  "
;SEROUT PORTC.6,T9600,["ATS10=254",10,13]
;serin PORTC.7,T9600,[],dato
;serin PORTC.7,T9600,2000,arranque,[],dato
PAUSE 2000
GOTO ARRANQUE

perroGUARDIAN:
LCDOUT $FE,POS1, 0 
LCDOUT $FE,POS2, 1 
Pause 300
LCDOUT $fe, 1 
LCDOUT $FE,POS3, 2 
LCDOUT $FE,POS4, 3 
Pause 300
POS1 = POS1 + 3
POS2 = POS2 + 3
POS3 = POS3 + 3
POS4 = POS4 + 3
If POS4 > $CF Then RETRO 

goto perroguardian 

RETRO:
POS1 = $CF
POS2 = $CE
POS3 = $CD
POS4 = $CC
RETROCEDE:
LCDOUT $fe, 1 
LCDOUT $FE,POS1, 7 
LCDOUT $FE,POS2, 6 
Pause 300
LCDOUT $fe, 1 
LCDOUT $FE,POS3, 5 
LCDOUT $FE,POS4, 4 
Pause 300

POS1 = POS1 - 3
POS2 = POS2 - 3
POS3 = POS3 - 3
POS4 = POS4 - 3
If POS4 < $C0 Then REINICIA 
GoTo RETROCEDE

REINICIA:
POS1 = $C0
POS2 = $C1
POS3 = $C2
POS4 = $C3
return 

DISABLE

ZONA:
IF BANDERA = 1 THEN
HIGH SIRENA
BANDERA1 = BANDERA1 + 1
ELSE
LOW SIRENA
ENDIF

BANDERA1 = BANDERA1 + 1
IF BANDERA1 > 6 THEN BANDERA1 = 0
IF BANDERA = 1 AND BANDERA1 < 3 THEN
PAUSE 100
serout PORTC.6,T9600,["AT+CMGR=1",10,13]
PAUSE 500
SEROUT PORTC.6,T9600,["AT+CMGD=1",10,13]
pause 500
SEROUT PORTC.6,T9600,["AT+CMGD=2",10,13]
pause 500
SEROUT PORTC.6,T9600,["AT+CMGF=1",10,13]
pause 1000
SEROUT PORTC.6,T9600,["AT+CMGS=",34,"2976256173",34,10,13]
pause 1000
SEROUT PORTC.6,T9600,["DISPARO ALARMA",26,10,13]
PAUSE 100
ENDIF

INTCON = %10010000 
Resume 
Enable 
END
si alguien necesita los comandos AT u manuales de este modem, tengo todos...
basicamente, para enviar un SMS seria algo asi:
Código:
Inicio:
gosub ELIMINAR
serout PORTC.6,N9600,["AT+CMGR=1",10,13]
pause 100
if PORTB.0=0 then Z1on:
goto inicio

Z1on:
gosub ENVIO_1
serout PORTC.6,N9600,["ALARMA Z1",26,10,13]
GOSUB ENVIO_2
serout PORTC.6,N9600,["ALARMA Z1",26,10,13]
GOTO INICIO

ENVIO_1:
pause 2000
SEROUT PORTC.6,N9600,["at+cmgf=1",10,13]
pause 1000
SEROUT PORTC.6,N9600,["at+cmgs=",34,"+54297xxxxxxx",34,10,13]
pause 5000
return

ELIMINAR:
PAUSE 100
SEROUT PORTC.6,N9600,["at+cmgd=1",10,13]
pause 1000
SEROUT PORTC.6,N9600,["at+cmgd=2",10,13]
pause 1000
return
lo bueno de este modem, que por el puerto RS232, podemos hacer una infinidad de cosas... El mismo modem cuenta con 4 puertos configurable como entrada o salida para no depepnder de un microcontrolador en el caso de querer controlar luces u artefactos... Igualmente, con un PIC16F877A, Experimente enviar imagenes de camaras web IP, controles domoticos que incluyen control de luces, alarmas sectorizadas, preguntarle al sistema el estado de las luces (con dos pic 16F877), que sensor detecto intruso, etc... Lo unico que me falto probar, es la funcion GPRS de movistar, la cual por una triangulacion de antenas, nos da la ubicacion aproximada del modem... los datos que se obtienen serian similares a estos:
El móvil XXXXXXXXXX esta en un Radio: 0.19 Km.; desde ing. Butty 240, Ciudad de Buenos Aires, Ciudad de Buenos; Coordenadas (-58 22 15,-34 35 45)
realmente muy bueno este equipo
les comparto un breve video de un software que habia arrancado lubeck hace un año y medio atras...un bocho ese pibe si le das un teclado, un monitor y un cpu... hace maravillas
https://www.facebook.com/photo.php?v=446373595464761
Imágenes Adjuntas
Tipo de Archivo: jpg alarma16F877gsmENFORA.JPG (75,2 KB (Kilobytes), 51 visitas)
Archivos Adjuntos
Tipo de Archivo: rar imagenes.rar (133,7 KB (Kilobytes), 42 visitas)
24/04/2014 #2748

Avatar de papirrin

Yo es la primera ves que escucho eso de interrupciones no convensionales, y me suena a mentira,un modulo tiene una interrupción y es todo, lo demás serian algoritmos.
Prueba utilizar el modulo USART con las instrucones hserin y hserout,al ser por hw seguramente llama a la subrutina de interrupción.
24/04/2014 #2749

Avatar de reyvilla

hola buen día compañeros la pagina que yo conozco de interrupciones es esta:
http://www.darreltaylor.com/DT_INTS-14/intro.html
saludosss
24/04/2014 #2750

Avatar de papirrin

reyvilla dijo: Ver Mensaje
hola buen día compañeros la pagina que yo conozco de interrupciones es esta:
http://www.darreltaylor.com/DT_INTS-14/intro.html
saludosss
Algo asi me imagino con lo de "interrupciones no convencionales", ese tipo imagino que las nombro "instant interrupts", no es mas que utilizar algoritmos en ensamblador hacia las mismas interrupciones que tenga el microcontrolador.

siempre es util utilizar ensamblador en basic, siempre y cuando la aplicación lo requiera y uno lo domine, en el caso de una comunicacion serial yo no lo veo necesario.
24/04/2014 #2751

Avatar de torres.electronico

reyvilla dijo: Ver Mensaje
hola buen día compañeros la pagina que yo conozco de interrupciones es esta:
http://www.darreltaylor.com/DT_INTS-14/intro.html
saludosss
Tal cual!!!!
pero justo no funciona el link de descarga voy a tener que usar otro micro mas

---------- Actualizado después de 3 minutos ----------

papirrin dijo: Ver Mensaje
Yo es la primera ves que escucho eso de interrupciones no convensionales, y me suena a mentira,un modulo tiene una interrupción y es todo, lo demás serian algoritmos.
Prueba utilizar el modulo USART con las instrucones hserin y hserout,al ser por hw seguramente llama a la subrutina de interrupción.
La idea era resumir el circuito... Viendo que no reesponde por USART el modem, creo que no hay muchas vueltas que darle... crees que no agote todas las instancias antes de consultar?!
24/04/2014 #2752

Avatar de papirrin

Viendo que no reesponde por USART el modem,
puedes poner el codigo que utilizaste usando el modulo, me parece un poco raro, si funciona por SW, no tiene porque no funcionar por HW. quizas solo te falto configurarlo adecuadamente.
24/04/2014 #2753

Avatar de torres.electronico

papirrin dijo: Ver Mensaje
puedes poner el codigo que utilizaste usando el modulo, me parece un poco raro, si funciona por SW, no tiene porque no funcionar por HW. quizas solo te falto configurarlo adecuadamente.
para enviar o recibir con HSERIN/HSEROUT, es la misma linea que con SEROUT, pero se le suma la H delante...
la configuracion fue esta:

Código:
INCLUDE "modedefs.bas"
DEFINE HSER_RCSTA 90H
DEFINE HSER_TSTA 20H
DEFINE HSER_BAUD9600
Probe en 2400 Baudios y menos que menos... pensando que era el hardware, configure el modem y despues ni con serin y serout pude establecer comunicacion con el hyperterminal, asi que lo deje en 9600 nuevamente y con serin y serout ya hablamos y tomamos mates con el modem...
creo que un 16F628 que tengo dando vueltas me salva las papas (tengo otro 877 pero es mucho ya)
26/04/2014 #2754

Avatar de ferdy575

hola a todos: de nuevo por estos lados con la preguntadera alguien sabe si en LINUX se puede instalar el PBP y el PROTEUS?
26/04/2014 #2755

Avatar de torres.electronico

ferdy575 dijo: Ver Mensaje
hola a todos: de nuevo por estos lados con la preguntadera alguien sabe si en LINUX se puede instalar el PBP y el PROTEUS?
Yo intente con wine en una netbook del gobierno (conectar igualdad) y no me dejo correrlo; mplab y ccs si pero pbp no intente. Que distro le vas a colocar? quizas buscando en google proteus parra linux, te sale que version podrias usar...saludos
26/04/2014 #2756

Avatar de ByAxel

ferdy575 dijo: Ver Mensaje
hola a todos: de nuevo por estos lados con la preguntadera alguien sabe si en LINUX se puede instalar el PBP y el PROTEUS?
Puede que... intenta con Virtual Box para Linux
03/05/2014 #2757

Avatar de torres.electronico

Bueno, anoche termine la segunda beta de un RX-TX 4-20mA HOME MADE para leer instrumentos que trabajan con este protocolo... Le falta pulir, pero lo mas importante es que el hardware despues de renegar lo saque a flote. Basicamente lo que hago es leer señales 4-20mA (24Vcc) y generar con un PWM 4-20mA (24Vcc)... La otra funcion que le sume, es poder generar un espejo de corriente entre la entrada y la salida, osea, si lee 5mA, a la salida genera 5mA.
Todo corre en base a dos LM358 con fuente simple (uno se alimenta a 12Vcc y el otro a 24Vcc). GND se comparte entre ambos amplificadores operacionales y señales de entrada / salida.
Para leer la señal 4-20mA y colocarlo en el display, como anoche estaba cansado y no se me ocurria nada para trabajar con punto flotante, implemente las siguientes lineas y medianamente quedo pasable:

Código:
ADCIN 0, ent420
  nivel = ent420
  aux1=(ent420*100)/250            ;(V*100)/(R*100)
  aux1= aux1 *2
  ;****blabla bla
   LCDOUT $FE, 1
  LCDOut $fe,2,"Sal: ",DEC4 aux1,"mA"


para generar el pwm que me lleve el filtro de 0-5Vcc para crear los 4-20mA, implemente estas lineas:


Código:
PWM PORTC.2,nivelAUX,100 ;nivel PWM = (Vout * 255) / V.Fuente
Les comparto el diagrama, si necesitan algo mas, me lo piden y te lo comparto; La proxima beta es sumarle un par de lineas mas y crear otra funcion mas... "Una fuente a modo generador de corriente" para probar y calibrar instrumentos.

Imágenes Adjuntas
Tipo de Archivo: png RX_4_20-0_5V_TX_0_5V-4_20ma.PNG (26,8 KB (Kilobytes), 60 visitas)
03/05/2014 #2758

Avatar de Dario

hola martin, pudiste configurar los fuses para pics 12fxxx??? saludosss
03/05/2014 #2759

Avatar de torres.electronico

D@rio dijo: Ver Mensaje
hola martin, pudiste configurar los fuses para pics 12fxxx??? saludosss
No , pero seria ideal migrar todo asi queda mucho mas chico una version ... total lo del display es chiche que no se justifica ... practicamente es derrochar un 18F452 o un 16F877
Me olvide comentar que para obtener a la salida del filtro que esta asociado al pin donde sale el PWM, la misma tension que la entrante por el puerto analogico, uso estas lineas, lo cual me simplifica mucho mas las cosas a la hora de querer hacer un espejo de corriente:

Código:
DEFINE OSC 20 
'****************************************************************
TRISA = 1 
ADCON1 = 0 
ADCON0 = %11000001
TRISB = %00000000  
TRISC = %11100000
'****************************************************************
DEFINE ADC_BITS 8 
DEFINE ADC_CLOCK 3 
DEFINE ADC_SAMPLEUS 50 
'****************************************************************
ent420 var word
nivel var byte
nivelAUX var byte
aux1 var byte
tiempo var byte
'****************************************************************
ejemplo:
ADCIN 0, ent420
nivel = ent420
aux1=(ent420*100)/250            ;(V*100)/(R*100)
aux1= aux1 *2
 LCDOUT $FE, 1
 LCDOut $fe,2,"Ent=Sal: ",DEC4 aux1,"mA"
 PWM PORTC.2,nivel,100  ;nivel PWM = (Vout * 255) / V.Fuente
pause 100
GOTO ejemplo
04/05/2014 #2760

Avatar de Dario

ah, bueno, aqui encontre un pequeño programita que hice para un 12f675 y ahi tiene los fuses configurados, el problema era que habia perdido el codigo de calibracion del oscilador interno del pic, el que aparece en la ultima linea del .hex, fijate si te sirve. saludosss
Curso de programación de PIC en PICBasic Pro
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.