Autor Tema: :: Reset del buffer de recepcion del i2c ::  (Leído 996 veces)

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

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
:: Reset del buffer de recepcion del i2c ::
« en: 13 de Agosto de 2012, 22:27:46 »
Hola amigos

el presente post es para indagar sobre un posible error
sobre el protocolo i2c, el cual se da cuando tras haber enviado
un vector de elementos desde un master a un esclavo
estos quedan almacenados en una variable del esclavo,
un vector de tipo int8.


cada vez que se entra en la interrupcion de recepcion de i2c
la variable cnt se pone a cero si el valor recibido es 99
la variable cnt se resetea a cero de nuevo.

porque la variable cnt?

si creas una varable sin el cnt lo almacena en donde primero le viene en gana
ya que desde el master solo le enviaste el esclavo y el dato.

cuando el envio lo haces de un vector de datos lo hace bien
pero si lo haces con la funcion que le envias el esclavo, la direcion de almacen y el dato
y un solo dato.

el primero lo hace bien.

ejemplo:

envia a S1 la direcion 0 el dato 1
en el esclavo hace:

dato[0]=1;

pero el siguiente no ,o mete otra vez en en cero sino en 1

la pregunta es ¿como trabaja esto?

desde el debug de proteus se aprecia que pone :

master:

s    Addr    A    Dato   A  P

esclavo:

s    Addr    A    Dato   A  P


si envio esto.

master:

s    Addr    A    Addr_dato   A  Dato   A  P

esclavo:

s    Addr    A    Addr_dato  A  Dato   A  P

solo la primera vez me hace:

dato[addr_dato]=dato;  //addr_dato seria la cariable cnt que se deberia de haber reseteado al entrar en la interupcion

cada vez que recibe P debe de entrar en la interrupcion y resetear el contador como es que no es asi


Alguien tiene una explicacion?




« Última modificación: 13 de Agosto de 2012, 22:30:19 por pajaro »


 

anything