TODOPIC
Microcontroladores PIC => - Niple - => Mensaje iniciado por: DroneBorg en 16 de Marzo de 2006, 04:30:00
-
Hola, esto trabajando con un proyecto y estoy enviando datos en seria atraves de radioondas de 433MHZ, antes usaba el PicBasic Pro, pero he empezafdo a usar Niple y me ha gustado bastante, se ha hecho facil transmitir datos en serie de PIC a PIC con Cable y de PC a PIC con cable pero al poner el transmisore y el receptor, la señal se degrada demasiado y no llega ningun dato correcto...
Hay alguna forma de hacer algo que imite el funcionamiento del SERIN de PIC Basic Pro...
Explico...
SerIn PORTA.1,N9600,["C"],D1
esa linea de PICBAsicPRo me indica:
Por el PORTA.1 a una velocidad de 9600 bps, espera a que llegue un byte, si es "C" el siguiente byte q recibas guardalo en D1
logicamente desde el PC envio lo siguiente...
MSComm1.Output = "AC" + Chr(xxx)
como uso radioondas, primero envio una A para iniciar la comunicacion y estabilizar posibles fluctuaciones en la señal, luego envio la C y seguidamente el byte que yo quiero q reciba el PIC...
Estas 2 Lineas han estado funcionando correctamente, pero ahora quiero hacerlo con Niple, ya que estoy intentando demostrar q con niple tambien podemos hacer proyectos de robotica.
http://maskax.sourceforge.net
-
Hola desde El Salvador
Yo he transmitido por usart en rf 315mhz y todo bien con niple
este es un programa generado con niple
;------------------------------------------------------------
; Código assembler generado por Niple V4.0.0
; Nombre del Proyecto: RS232 por RF
; Autor: Emilio Flores.
; Fecha: 17/07/2006
; PIC: 16F877
; Velocidad de reloj: 4 Mhz
; Descripcion:
;------------------------------------------------------------
LIST P=PIC16F877
_XT_OSC EQU 0x3FFD
_DEBUG_OFF EQU 0x3FFF
_WDT_OFF EQU 0x3FFB
_PWRTE_ON EQU 0x3FF7
_BODEN_OFF EQU 0x3FBF
_LVP_OFF EQU 0x3F7F
_CPD_OFF EQU 0x3FFF
_CP_OFF EQU 0x3FFF
_WRT_ENABLE_OFF EQU 0x3DFF
__config _XT_OSC & _DEBUG_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_ENABLE_OFF & _CP_OFF
;------------------------------------------------------------
; Declaración de Registros
;------------------------------------------------------------
w equ 00h
status equ 0x03
portc equ 0x07
pclath equ 0x0a
intcon equ 0x0b
pir1 equ 0x0c
opcion equ 0x181
trisb equ 0x186
rcsta equ 0x18
rcreg equ 0x1a
rf_byte1 equ 0x20
rf_byte2 equ 0x21
rf_byte3 equ 0x22
_np_w equ 0x2a
_np_status equ 0x2b
_np_banderas2 equ 0x2d
trisa equ 0x85
trisc equ 0x87
trisd equ 0x88
trise equ 0x89
pie1 equ 0x8c
txsta equ 0x98
spbrg equ 0x99
adcon1 equ 0x9f
;------------------------------------------------------------
; Declaración de Bits
;------------------------------------------------------------
c equ 0 ;carry / borrow bit
cren equ 4 ;
gie equ 7 ;habilitador general de interrupciones
peie equ 6 ;ee write complete interrupt enable bit
rcie equ 5 ;
rcif equ 5 ;bandera de interrupcion por fin de recepción usart.
rp0 equ 5 ;registrer bank select bit
rp1 equ 6 ;registrer bank select bit
spen equ 7 ;
z equ 2 ;bit cero
sub_inte equ 0 ;bandera de subrrutina cancelada por interrupcion.
;------------------------------------------------------------
; Inicio
;------------------------------------------------------------
reset org 0
goto paso2
org 4
movwf _np_w
swapf _np_w,1
movf status,w
movwf _np_status
bcf status,rp0 ;cambiar a banco 0
bcf status,rp1
btfsc pir1,rcif
goto interrupcion_rc
salir_interrupcion
bsf intcon,gie
bsf _np_banderas2,sub_inte ;activar la bandera de rutina cancelada por interrupcion
movf _np_status,w
movwf status
swapf _np_w,w
retfie
;------------------------------------------------------------
; inicio de la interrupción por rc usart
;------------------------------------------------------------
interrupcion_rc_salir
bcf pir1,rcif
goto salir_interrupcion
interrupcion_rc
bcf status,rp0 ;cambiar a banco 0
bcf status,rp1
bcf intcon,gie ;desactivar habilitador general de interrupciones.
inte_rc_usart_3_esperar_byte_1
btfss pir1,rcif
goto inte_rc_usart_3_esperar_byte_1
movf rcreg,w
movwf rf_byte1
bcf pir1,rcif
inte_rc_usart_3_esperar_byte_2
btfss pir1,rcif
goto inte_rc_usart_3_esperar_byte_2
movf rcreg,w
movwf rf_byte2
bcf pir1,rcif
inte_rc_usart_3_esperar_byte_3
btfss pir1,rcif
goto inte_rc_usart_3_esperar_byte_3
movf rcreg,w
movwf rf_byte3
bcf pir1,rcif
nop ;nota: puedes agregar un checksum a los datos recividos
nop ;usar como deseas el byte 3 (dato recivido)
goto interrupcion_rc_salir
goto interrupcion_rc_salir
;------------------------------------------------------------
; programa principal
;------------------------------------------------------------
paso2
movlw b'00000000' ;configurar el puerto e como xxxxxsss
bsf status,rp0 ;cambiar a banco 1
bcf status,rp1
movwf trise
movlw b'00000000' ;configurar el puerto a como xxssssss
movwf trisa
movlw b'00000111' ;puerto a/e = e/s digital
movwf adcon1
movlw b'00000000' ;configurar el puerto b como ssssssss
bsf status,rp1 ;cambiar a banco 3
movwf trisb
movlw b'10000000' ;configurar el puerto c como esssssss
bcf status,rp1 ;cambiar a banco 1
movwf trisc
movlw b'00000000' ;configurar el puerto d como ssssssss
movwf trisd
movlw b'00100110'
movwf txsta
movlw .25
movwf spbrg
bcf status,rp0 ;cambiar a banco 0
bsf rcsta,spen ;habilitacion del puerto de comunicacion serial
bsf rcsta,cren
bsf intcon,gie ;activar habilitador general de interrupciones.
bsf intcon,peie ;activar habilitador general de interrupciones por perifericos.
bsf status,rp0 ;cambiar a banco 1
bsf pie1,rcie ;activar interrupción por fin de recepción por usart.
paso8
nop
nop
goto paso8 ;cierra el ciclo
End
-
cholo si lo pones a 9600 jamas te va a funcionar ... tenes que ponerlo a 2400 o 1200 bps .... demasiado tarde pero por aquello de alguien que haga lo mismo !