TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: yair_xiox en 19 de Agosto de 2015, 18:39:17
-
hola necesito que me ayuden con un programa, en el programa tengo que enviar un pulso cuadrado hecho de ceros y unos por i2c y no se porque no funciona
#INCLUDE<P16F73.INC>
#DEFINE LED PORTA,0
#DEFINE SERIALENABLE SSPCON,5
#DEFINE SSP3 SSPCON,3
#DEFINE SSP2 SSPCON,2
#DEFINE SSP1 SSPCON,1
#DEFINE SSP0 SSPCON,0
#DEFINE OVERFLOW SSPCON,6
#DEFINE CLOCKS SSPCON,4
#DEFINE STA5 STATUS,5
#DEFINE STA6 STATUS,6
#DEFINE BUFFER SSPSTAT,0
#DEFINE READ SSPSTAT,2
#DEFINE INFLAG PIR1,3
#DEFINE VAR PORTA,4
#DEFINE LED_2 PORTB,0
#DEFINE LED_3 PORTB,1
#DEFINE LED_4 PORTB,2
#DEFINE LED_5 PORTB,3
#DEFINE LED_6 PORTB,4
#DEFINE LED_7 PORTB,5
#DEFINE LED_8 PORTB,6
#DEFINE datos PORTC,3
CBLOCK 0x00
CONTA_1
CONTA_2
CONTA_3
CONTA_4
ENDC
PUERTOS
BSF STA5
BCF STA6
CLRF TRISB
CLRF TRISA
CLRF TRISC
BCF STA5
BCF STA6
BTFSC VAR
CALL RUT
BTFSS VAR
CALL RUT_2
CALL ENVIO
CALL I2CSLAVEMODE7
GOTO LED_1
RUT
BCF LED_2
BCF LED_3
BCF LED_4
BCF LED_5
RETURN
RUT_2
BSF LED_2
BSF LED_3
BSF LED_4
BSF LED_5
RETURN
LED_1
BSF LED
GOTO LED_1
I2CSLAVEMODE7
BCF SSP0
BSF SSP1
BSF SSP2
BCF SSP3
MOVLW 0x18
MOVWF TRISC
BSF SERIALENABLE
BCF BUFFER
BCF OVERFLOW
BSF INFLAG
BCF BUFFER
BSF CLOCKS
BSF READ
BSF CLOCKS
BCF INFLAG
BSF INFLAG
BSF CLOCKS
BCF READ
BCF INFLAG
BCF BUFFER
BSF OVERFLOW
RETURN
ENVIO
BSF datos
CALL Retardo_1ms
BSF datos
CALL Retardo_1ms
BCF datos
CALL Retardo_1ms
BSF datos
CALL Retardo_1ms
BCF datos
CALL Retardo_1ms
BSF datos
CALL Retardo_1ms
BSF datos
CALL Retardo_1ms
BCF datos
CALL Retardo_1ms
BSF datos
CALL Retardo_1ms
BCF datos
CALL Retardo_1ms
BSF datos
CALL Retardo_1ms
BCF datos
CALL Retardo_1ms
BCF datos
CALL Retardo_1ms
BSF datos
CALL Retardo_1ms
BSF datos
CALL Retardo_1ms
BCF datos
CALL Retardo_1ms
RETURN
#INCLUDE<C:\Users\ciel\Desktop\archivos mplab\RETARDOS.INC>
end
-
Por que enviarias una onda que podrias generar tranquilamente con cualquier pin, en ves de I2C ?
-
es que esa onda la tengo que enviar por i2c pero al mirar la señal que sale del circuito por el pin c3 no sale un pulso cuadrado sale una linea recta
-
es que justamente, si vas a usar I2C es para enviar datos. NO para hacer una onda cuadrada
Por que ? por que I2C es un protocolo, tiene un bit de inicio + uno de stop que deben respetarse, si sigue la transimision debe repetirse el bit de start. tiene un bit a Ack (como para saber si llego o no desde el otro lado), entonces si queres hacer una onda cuadrada simplemente sacas el valor que queres por el pin y listo. es ilogico tratar de hacerlo por el I2C.
No se cual es tu objetivo, a no ser que sea algo que te pidieron que sea exactamente asi, pero no es una aplicacion practica. Creo que el PWM te serviria mas que lo que estas pidiendo.
Si tenes que enviar una onda cuadrada por que no directamente la genera lo que lo recibe? Si tiene para I2C entonces deberia tenerlo.