jueves, diciembre 15, 2011

Control de LED desde NXP

PCA9685PW control avanzado de LED

Acabo de recibir unas muestras gratis del Chip PCA9685PW, desde NXP.


En la página de NXP Face the road ahead, usted podrá encontrar un montón de productos automovilísticos, pero que usted puede darle uso en otras áreas, como para controlar LEDs en letreros.

En la misma página usted puede jugar un juego de carrera con obstáculos, participar para ganar una computadora tipo "tablet", y pedir muestras gratis de productos para evaluar.

¡Gracias NXP!

lunes, diciembre 05, 2011

Convirtiendo un programa de Propeller SPIN a C


Propeller GCC es el proyecto que está haciendo posible programar el microcontrolador Propeller en C/C++, y aunque todavía está en versión alfa, podemos realizar ya casi cualquier programa.

A continuación mostramos un programa en SPIN, y la versión en lenguaje C:

Código SPIN:


CON
  _clkmode = xtal1 + pll16x
  _xinfreq = 5_000_000

PUB Main | i
  i := 0
  Start_PWM(16)

  repeat
    Duty_PWM(i)
    waitcnt(clkfreq / 100 + cnt)
    i++
    if i > 99
      i := 0

PUB Start_PWM(Pin)
  DIRA[Pin] := 1
  CTRA := %0_0110<<26 + Pin

PUB Duty_PWM(dutyCycle)
  FRQA := $7FFF_FFFF/50 * dutyCycle


Código C:

#include "propeller.h"

void Start_PWM(int Pin)
{
  DIRA = 1 << Pin;
  CTRA = (0b00110<<26) + Pin;
}

void Duty_PWM(int dutyCycle)
{
  FRQA = 0x7FFFFFFF/50 * dutyCycle;
}

int main()
{
    int i = 0;

    Start_PWM(19);
   
    for(;;) {
    Duty_PWM(i);
        waitcnt(CLKFREQ / 100 + CNT);
    i++;
    if (i > 99)
      i = 0;
    }   
}

Los dos programas, línea por línea son muy parecidos, en algunos casos no fue necesario cambiar nada.

Un cambio muy importante fue poner entre paréntesis la expresión: "0b00110<<26", de otro modo el compilador suma "26" y el valor de "Pin", siendo esto un error, y su programa no funcionará.