Autor Tema: pinMode()  (Leído 1315 veces)

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

Desconectado fvergniaud

  • PIC10
  • *
  • Mensajes: 16
pinMode()
« en: 28 de Enero de 2013, 17:41:40 »
Si alguna vez usaron arduino o pinguino conocen este comando, asigna la direccion del pin como entrada o como salida.

Programando los pics en forma tradicional con CCS el comando no existe se utiliza el set_trisX y hay que saber a que port esta cada puerto, etc., nunca entendi porque si las intrucciones output_low, output_high lo hacen porque no existe un set_tris generico para todos los puertos. :?

Personalmente siempre uso el FAST_IO(), si usan esto TIENEN QUE USAR #use FAST_IO(ALL).

En CCS cada pin tiene un numero asignado en las definiciones del Device ejemplo para el 18F4550 el PIN_A5 es 31749 o bien 0x7C05 este numero tiene referencia al port y al pin, siendo:

siguiendo con el ejemplo:
pin = 0x7C05
pinbit = pin&7 ==> 5;
port = pin>>3 ==> 0xf80 que es el portA

Por lo cual tenemos todo resuelto para usar una asignacion dinamica de pines estilo arduino,

/////////////////////////////////////////////////////////////////////////////
// pinmode(u8 pin, u8 state)
// pin es CCS pin PIN_A2,PIN_E2 etc.
// state es 0 salida, 1 entrada
/////////////////////////////////////////////////////////////////////////////
void pinmode(UNSIGNED long pin, int8 state)
{
   INT8 pinbit;
   UNSIGNED long addrtris;
   pinbit = pin&7;
   addrtris = (pin>>3) + 18;

   IF (state == OUTPUT)
      bit_clear ( * addrtris, pinbit) ;

   ELSE
   bit_set ( * addrtris, pinbit) ;
}

Bueno eso es todo, espero que les sirva, personalmente lo uso para hacer las asignaciones dinamicas de los pines ejemplo

const UNSIGNED long sensor[9]={PIN_A0, PIN_A1, PIN_A2, PIN_A3, PIN_E2, PIN_A5, PIN_E0, PIN_E1, PIN_B2};//sensores touch ADC
const UNSIGNED long ledPin[9]={PIN_B5, PIN_D7, PIN_B7, PIN_B6, PIN_C7, PIN_D4, PIN_D5, PIN_C6, PIN_C0};//cada sensor tiene un led

iterando en el init() asigno los pines,

Saludos espero les guste, Fernando.
« Última modificación: 28 de Enero de 2013, 18:16:03 por fvergniaud »


 

anything