Autor Tema: Usart master/slave con address deteccion  (Leído 2566 veces)

0 Usuarios y 1 Visitante están viendo este tema.

25javier

  • Visitante
Usart master/slave con address deteccion
« en: 18 de Enero de 2005, 10:07:00 »
Hola listeros,estoy tratando de comunicar dos 16f628 como master/slave con address deteccion,la idea es despues poner mas 16f628 como esclavos y el master elija con cual se quiere comunicar...pero no logro ni detectar el envio de los 9 bits...hasta cargue el ejemplo de leager(gracias viejo!!)y no hay caso,me queda la duda de que en los esclavos leager no seteo la velocidad porque se supone que la fija el master pero en la hoja de datos dice que hay que setearla a BHRG-(page 80 ds,setting upn 9 bit mode with address detect)
ahi va el codigo
MASTER

CONFIG BODEN_OFF,CP_OFF,PWRTE_OFF,WDT_OFF,LVP_On,MCLRE_OFF,INTRC_OSC_NOCLKOUT
       DEVICE = 16F628A "master
       CMCON=7
        trisb.2=0
        trisb.1=1
        trisb.0=1 "boton para envio de dato
        trisb.3=0
        trisb.5=0
        SPBRG = 103
       TXSTA= %11110001      "asincrono mode master,9 bit transmision,trasnmit enabled,seteo TX9D(txsta.0)=1=9 no bit!!!
        RCSTA=%10000000  
         Symbol LED = PORTB.3
         dim B1 as byte
         LED=0
      
LAZO: IF PORTB.0=0 THEN
      led=1
      delayms 1000
      led=0
      delayms 1000
      B1="@"
                   GOSUB PutChar
      ELSE
      GOTO LAZO
      ENDIF
      GOTO LAZO
      
GetChar: B1 = 0                        " Preset to no character received
        If PIR1.5 = 1 Then B1 = RCREG   " If receive flag then get character
        Return                        " Go back to caller
        
" Send a character to the USART transmitter
PutChar: If PIR1.4 = 0 Then PutChar     " Wait for transmit register empty
        TXREG = B1                    " Send character to transmit register
        Return    
          END
*****************************************************************
                                            ESCLAVO
CONFIG BODEN_OFF,CP_OFF,PWRTE_OFF,WDT_OFF,LVP_On,MCLRE_OFF,INTRC_OSC_NOCLKOUT
       DEVICE = 16F628A "slave
       CMCON=7
        trisb.2=0
        trisb.1=1
      trisb.0=1
      trisb.3=0
        trisb.5=0
       RCSTA = %11111000    "9 BITS ENABLED,ENABLE ADDRESS DETECTION,
        TXSTA = %00110000  
      Symbol LED = PORTB.3
      dim B1 as byte
      dim i as byte
       LED=0
      delayms 1000
      led=1
      delayms 1000
      led=0
      delayms 1000
LAZO:  if rcsta.0=1 then    "VEO SI RECIBI EL 9NO BIT!!!
         led=1
     delayms 100
      led=0
     delayms 100
      rcsta.0=0
        else
      goto lazo
      
                                                                                                                                                                                                                                                        
     
     
      
      
   
      
       
      
"*****************************************************************                  

     






Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: Usart master/slave con address deteccion
« Respuesta #1 en: 21 de Enero de 2005, 13:16:00 »
Que onda javier25,
Bueno el ejemplo que postee utiliza una recepcion  sincronizada SIN deteccion de direccion(sin habilitar el 9° bit{RX9}), no la que tu requieres( con el 9° bit),por tanto el ejemplo que di "no requiere" que se determine la velocidad de recepcion esclavo.

En tu caso,el modo con deteccion de direccion(a 9 bits) asincrono,requiere lo siguiente:

1)Inisializar el registro SPBRGH al a velocidad apropiada, si es una alta velocidad usar el modo BRGH seteado a 1(BRGH=1) y dependiendo del cristal y del porcentaje de error.(En modelos 16f628A, pag.75 para ver este modo,sus velocidades y % de error correspondientes.)

2)Habilitar la comunicacion asincrona o sincrona seteando o limpiando el registro TXSTA.4 y habilitando el  puerto con RCSTA.7=1.

3)Si las interrupciones se usan, habilitar el PIE1.5 .

4)Setear la recepcion del noveno bit RCSTA.6 y habilitar la deteccion de direccion RCSTA.3=1 .

5)Habilitar la recepcion habilitando  el RCSTA.5(recepcion sencilla) o RCSTA.4(recepcion continua)

6)Cuando la recepcion se haya completado elregisto que no los informara es el el de interrupcion(PIR1.5=1, solo si se habilito la interrupcion.....)

7) se leen los 8 bits  con el registro RCREG para determinar si el registro sera direccionado.en caso de algun  error, se limpia el RCSTA.4. Si a sido direccionado. se limpia el registro RCSTA.3 y el PIR1.5(bandera de interrupcion) para permitir leer  los bytes de datos y bytes de direcciones dentro del buffer recivido e interrumpir el MCU.
Por lo que veo en tu codigo no haces el CHEKEO correcto del flag de interrupcion:
LAZO: if rcsta.0=1 then "VEO SI RECIBI EL 9NO BIT!!!  <--- aui no se que estas revizando, si este registro SOLO guarda el 9° bit RECIVIDO.
Acuerdate cual es el proceso a seguir , el transmisor(maestro) tiene que transmitir una cantidad de informacion a VARIOs esclavos, por tanto este primero tiene que enviar un byte de direccion(direccionamiento a esclavo, ..) este es identificado poniendo el 9° bit de esta informacion a 1 logico(por tanto cuando sucede la interrupcion,si es que la habilitaste, el primer byte+1 bit es recivido y y revizado para ver si es la direccion{esta a 1} o a cero si es DATA, en tal caso es ignorado) ,Solo si tienes habilitado de forma correcta el esclavo el bit 3 y el 6 del registro RCSTA(deteccion de direccion y habilitacion del 9° bit),por tanto  ignorara todos los bytes de data. Pero en caso de que no sea data(bit cero de rcsta) y sea direccion(RCSTA.0=1) SURGIRA la interrupcion en el esclavo indicando que se a recivido un byte de direccion y el contenido sera transferido al buffer del modulo,.El esclavo direccionado limpiara el bit 3 del registro RCSTA y se preparara para recivir los bytes de data del Maestro!.
Todo esto viene prefectamente explicado en el DS
Esto es basicamente el formato, si aun sigues con problemas, no dudes en postearlo y con gusto te ayudamos .

Salu2 pana
Lager

25javier

  • Visitante
RE: Usart master/slave con address deteccion
« Respuesta #2 en: 05 de Febrero de 2005, 22:36:00 »
anda todo 10 puntos!Muchas risas
un abrazo lager!!Sonrisa Gigante
Javier

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: Usart master/slave con address deteccion
« Respuesta #3 en: 07 de Febrero de 2005, 21:49:00 »
No hay nada que agradecer pana Rebotado resolviste tu problema eso es lo unico que cuenta Sonrisa

Un abrazo pana


 

anything