Timer0 y salidas D12 y D13

Buenos días. ¿Alguien sabe cuál es la relación entre timer0 y las salidas D12 y D13?
Cuando configuro el timer0 con la librería timehelpers en modo CYC (creo) las salidas D12 y D23 no me responden, con los otros timers no me pasa ( timer1 y timer2).

Según leí en la hoja de datos, cuando se configura el puerto SPI como esclavo, estos pines se vuelven entradas indiferentemente de lo configurado, yo no tengo configurado el SPI.
Si alguien me puede echar un cable, muchas gracias.
 
Última edición por un moderador:
Pon el código que has usado o algo.
No acabo de entender lo que preguntas

Hay que ver que hace cada uno de los timers en el sistema, no todos se pueden usar alegremente.
 
Hola:
Código:
[LIST=1]
[*]#include "TimerOne.h"
[*] 
[*]void setup()
[*]{
[*]  pinMode(10, OUTPUT);
[*]  Timer1.initialize(500000);         // initialize timer1, and set a 1/2 second period
[*]  Timer1.pwm(9, 512);                // setup pwm on pin 9, 50% duty cycle
[*]  Timer1.attachInterrupt(callback);  // attaches callback() as a timer overflow interrupt
[*]}
[*] 
[*]void callback()
[*]{
[*]  digitalWrite(10, digitalRead(10) ^ 1);
[*]}
[*] 
[*]void loop()
[*]{
[*]  // your program here...
[*]}
[/LIST]

http://playground.arduino.cc/Code/Timer1


Saludos.
 
Abajo he puesto un código similar que presenta el mismo problema.
Utilizo los 3 timers en el programa original pero este es el único que me genera este problema.
Las salidas 12 y 13 dejan de responder, no sé si la librería vincula de alguna manera el timer0 a estas salidas.
Gracias de antemano.


Código:
#include <TimerHelpers.h>

#define LED1 12
#define LED2 13
#define TIMER0 6

void setup() {
   pinMode (TIMER0, OUTPUT);
   pinMode (LED1, OUTPUT);
   pinMode (LED2, OUTPUT);


   TIMSK1 = 0;  // no interrupts 
 
   Timer0::setMode (2, Timer0::PRESCALE_64, Timer0::TOGGLE_A_ON_COMPARE);
   OCR0A = 128;

}

void loop() {

    digitalWrite(13,LOW);
    digitalWrite(12,HIGH);
    delay(500);
    digitalWrite(13,HIGH);
    digitalWrite(12,LOW);
    delay(500);
}
 
Última edición por un moderador:
Bueno, parece que el problema viene de la relación entre timer0 y delay(), también afecta a millis() y micros().
Las salidas funcionan bien, pero en el programa necesito retardos y si toco alguna función de estas me afectaría al timer0, el cual necesito que no se toque.
¿Alguna idea?
 
Última edición por un moderador:
Es exactamente por eso que yo detesto Arduino, los procesos corriendo detrás no me gustan y siempre he pensado que en algún momento me serían conflictivos, especialmente esos delay()

No estoy seguro de como se estructura la API del Arduino, pero en "wiring.c" están las funciones millis(), micros() y delay(), respecto a eso, delay() está definido como una comparativa en bucle con micros() y esta está definida por el registro en timer0, así que si tocas ese timer olvídate de usar delay(), ah, y millis() está definida por una cuenta con interrupciones del timer0

En resumen, no toques el Timer0 o inventa tu propio delay().
 
Última edición:
Bueno he tenido que meter un delay propio, que genera un retardo basado en delaymicros() que no utiliza el timer0. Asi que quedo solucionado.
Gracias
 
Atrás
Arriba