Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
¿Alguien ha probado el programa de JP Mandon disponible en
https://groups.google.com/group/pinguinocard/tree/browse_frm/month/2009-04/cc38b0de79820207?rnum=11&_done=/group/pinguinocard/browse_frm/month/2009-04?fwc%3D2%26&hl=fr " onclick="window.open(this.href);return false;
que hace funcionar los pines del 0 al 7 como salidas PWM?
Yo lo he intentado cargar, pero no compila.
El código es:
// How to use interrupt on Pinguino
// add 8 analog outputs ( PWM ) to your Pinguino
// can be extended to 16
// Jean-Pierre MANDON 2009
// output level can be set beetween 0 and 100%
int outputlevel[8];
// this is an internal counter
int compteur1=0;
void setup()
{
int i;
// configure 0 to 7 as output
for (i=0;i<8;i++) pinMode(i,OUTPUT);
TMR1H=0xFF;
TMR1L=0x00;
// timer 1 prescaler 1 source is internal oscillator
T1CON=0x01;
// enable interrupt for timer1 in register PIE1
PIE1bits.TMR1IE=1;
// enable peripheral interrupt
INTCONbits.PEIE=1;
// global enable interrupt
INTCONbits.GIE=1;
// now an interrupt will be generated by timer1 every 42,5 microS
}
void UserInterrupt()
{
int compteur;
if (PIR1bits.TMR1IF)
{
PIR1bits.TMR1IF=0;
TMR1H=0xFF;
TMR1L=0x00;
compteur=compteur1;
compteur++;
if (compteur>99) compteur=0;
compteur1=compteur;
// compute output level
// for a better speed bit functions are used rather than digitalWrite
if (compteur<outputlevel[0]) PORTBbits.RB0=1;
else PORTBbits.RB0=0;
if (compteur<outputlevel[1]) PORTBbits.RB1=1;
else PORTBbits.RB1=0;
if (compteur<outputlevel[2]) PORTBbits.RB2=1;
else PORTBbits.RB2=0;
if (compteur<outputlevel[3]) PORTBbits.RB3=1;
else PORTBbits.RB3=0;
if (compteur<outputlevel[4]) PORTBbits.RB4=1;
else PORTBbits.RB4=0;
if (compteur<outputlevel[5]) PORTBbits.RB5=1;
else PORTBbits.RB5=0;
if (compteur<outputlevel[6]) PORTBbits.RB6=1;
else PORTBbits.RB6=0;
if (compteur<outputlevel[7]) PORTBbits.RB7=1;
else PORTBbits.RB7=0;
}
}
void loop()
{
// pin 0 is set to 50%
outputlevel[0]=50;
// pin 1 is set to 100%
outputlevel[1]=100;
// pin 2 is set to 20%
outputlevel[2]=20;
// pin 3 is set to 0
outputlevel[3]=0;
// etc.....
outputlevel[4]=50;
outputlevel[5]=50;
outputlevel[6]=50;
outputlevel[7]=50;
}
si lo probé hace tiempo ¿que te ocurre?
Se producen 7 errores (uno por salida) del tipo "paso de parámetros invalidos" en las líneas de tipo
if (compteur<outputlevel[0]) PORTBbits.RB0=1;
y un error sin especificar tipo ni lugar.