Autor Tema: :: PIC18F250 nunca entra en #INT_SSP ::  (Leído 14548 veces)

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

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: :: PIC18F250 nunca entra en #INT_SSP ::
« Respuesta #60 en: 02 de Julio de 2012, 12:43:25 »
Hola

En ccs el while (1) da error algunas veces, yo lo que hago
es sustutuirlo por true
ya que en la libreria tiene sustituido true por 1 y false por 0.

no se si te entendi bien,
¿falta un bucle while por algun lado?,
o es el while del main?

En el master no hay instruccion de while(){..} ni de do{}while()
 y en el esclavo tampoco.




Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: :: PIC18F250 nunca entra en #INT_SSP ::
« Respuesta #61 en: 02 de Julio de 2012, 12:58:16 »
Hola

En ccs el while (1) da error algunas veces, yo lo que hago
es sustutuirlo por true
ya que en la libreria tiene sustituido true por 1 y false por 0.

no se si te entendi bien,
¿falta un bucle while por algun lado?,
o es el while del main?

En el master no hay instruccion de while(){..} ni de do{}while()
 y en el esclavo tampoco.



  Justamente me refiero a eso que no hay tal instrucción.  Si un programa hace algo indefinidamente tiene que estar dentro de un ciclo while. Ahora, si sólo ejecutas algo por única vez -como en tu caso- luego de ello tenés que colocar un while(true) para que el programa se quede allí y no prosiga hacia un lugar incierto.

Código: C
  1. void main(void)
  2. {
  3.   instruccion;
  4.  ....
  5. ....
  6. ....
  7.   instruccion;
  8. ...
  9. ....
  10.  
  11. // todo lo anterior sería el codigo que se va a ejecutar
  12.  
  13.   while(true);
  14. }
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: :: PIC18F250 nunca entra en #INT_SSP ::
« Respuesta #62 en: 02 de Julio de 2012, 16:52:20 »
Hola

coloque un while(true){}

al final del main del esclavo y sigue igual
en el debug del i2c veo que solo muestra S.
el master se queda clavao en el escribir..



el code queda asi:

solo coloco la parte modificada:

Código: C++
  1. /***************************************************
  2. *
  3. * esclavo_ag_1.c
  4. *
  5. ***************************************************/
  6.  
  7. #include "esclavo_ag_1.h"
  8.  
  9. //define bit a bit
  10.  
  11. #BIT SSPIF = 0xF9E.3         //PIR1 bit 3
  12. #BIT SSPOV = 0xFC6.6         //SSPCON1 bit 6
  13. #BIT BF = 0xFC8.0            //SSPSTAT bit 0
  14. #BIT RW = 0xFC7.2            //SSPSTAT bit 2
  15. #BIT DA = 0xFC7.5            //SSPSTAT bit 5
  16.  
  17. char lectura;
  18. #int_SSP
  19. void  SSP_isr(void)
  20. {
  21.  
  22. if (SSPIF == 1)  // interrupcion por SSP
  23. //if(bit_test (PIR1, 3))
  24.  {    
  25.    if (SSPOV == 1) // si hay overflow leo el buffer y borro dicho flag
  26.    //if(bit_test (SSPCON1, 6)) // return 0 o 1
  27.    {
  28.      //lectura = read_i2c(1);
  29.      lectura=i2c_read(1);
  30.      output_High(PIN_B6);// añado para vericar entro
  31.      SSPOV = 0;
  32.      //bit_clear(SSPCON1,6); //limpio bit 6 del SSPCON1
  33.    }
  34.    else             // si no hay overflow proceso el dato
  35.    {
  36.      if (BF == 1)  // si hay dato
  37.      //if(bit_test (SSPSTAT, 0))
  38.      {
  39.        if (RW == 0)  // esclavo para escritura
  40.        //if(bit_test (SSPSTAT, 2))
  41.        {    
  42.          //lectura = read_i2c(0);
  43.          lectura=i2c_read(0);
  44.          if (DA == 1)
  45.          //if(bit_test (SSPSTAT, 5))
  46.           {
  47.              PORTB = lectura;  // si llego un dato, lo mando al puerto
  48.              printf("\n\n lectura: %d"lectura);
  49.           }  
  50.        }      
  51.      }
  52.      if (RW == 1)
  53.      //if(bit_test (SSPSTAT, 2))
  54.       {
  55.          //write_i2c(0x77); // esclavo para lectura
  56.          i2c_write(0x77); // esclavo para lectura
  57.          output_High(PIN_B7);// añado para vericar entro
  58.       }
  59.    }
  60.    SSPIF = 0;
  61.    //bit_clear(PIR1, 3);
  62.  }
  63. }
  64.  
  65.  
  66.  
  67. void main()
  68. {
  69.  
  70.    setup_adc_ports(NO_ANALOGS|VSS_VDD);
  71.    setup_adc(ADC_CLOCK_DIV_2);
  72.    setup_wdt(WDT_OFF);
  73.    setup_timer_0(RTCC_INTERNAL);
  74.    setup_timer_1(T1_DISABLED);
  75.    setup_timer_2(T2_DISABLED,0,1);
  76.    setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
  77.    setup_comparator(NC_NC_NC_NC);
  78.    setup_vref(FALSE);
  79.    set_tris_b(0x00);
  80.    
  81.    
  82.    enable_interrupts(INT_SSP);
  83.    enable_interrupts(GLOBAL);
  84. //Setup_Oscillator parameter not selected from Intr Oscillator Config tab
  85.  
  86.    // TODO: USER CODE!!
  87.  
  88. printf("\n\r ESCLAVO: ");
  89.  
  90. while(true){
  91. }
  92.  
  93. }


No se lo que le pasa al dichoso programa
pero esto es una pesadilla ....y de las peores

 :5]


Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: :: PIC18F250 nunca entra en #INT_SSP ::
« Respuesta #63 en: 02 de Julio de 2012, 18:48:34 »
  Elimina la instrucción de configuración del puerto "set_tris_b(0x00)" porque así lo estás configurando como salida y sin embargo para que trabaje el I2C el puerto debe quedar configurado como entrada. Desconozco si una vez configurado por el "#use i2c.." ya no puede ser cambiado por "set_tris..." pero por las dudas, eliminala.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: :: PIC18F250 nunca entra en #INT_SSP ::
« Respuesta #64 en: 03 de Julio de 2012, 06:23:53 »
Hola AngelGris

Comente esa linea y sigue igual
en el esclavo hay algo que hace que cuelgue al master..
no se lo que es, pero lo bloquea de tal forma que solo le deja haceR un start
ya que en el debug del i2c solo aparece S.

si le quito el sclavo el esclavo no se enclava...

http://es.scribd.com/doc/47987479/MODO-I2C

http://es.scribd.com/doc/3023813/Curso-PIC16F87X-10

« Última modificación: 03 de Julio de 2012, 07:35:34 por pajaro »