Está en la página 1de 5

(/)

Casa Popular Bicicleta eléctrica Arduino

Consejos técnicos GPS Misc.

Buscar ...

c Casa (/) Arduino Momento Temporizador SAMD21

Biblioteca de temporizador SAMD21 para SAM15x15 y Arduino Zero

Detalles
C Última actualización: 29 de septiembre de 2018

Contenido [ Show ]

Intro
Para la placa compatible con SAM15x15 Arduino (/arduino/samd21/sam-15x15.html) , que usa
SAMD21G, necesitaba una biblioteca de temporizadores. Desafortunadamente, tal biblioteca no
existía, así que yo mismo he invertido tiempo en su desarrollo.
Esta biblioteca también se puede utilizar para Arduino Zero y placas equivalentes:

Placa compatible con SAM15x15 Arduino


(/Article_files/Arduino/SAM-D21/SAM15x15/SAMD-mini-development-board.JPG)
Pluma de Adafruit M0
(/Article_files/Arduino/SAMDtimer/Adafruit-Feather-M0.jpg)

Sin tener una biblioteca sofisticada, usar el temporizador / contador es una tarea complicada y debe
entrar en muchos detalles, como los modos de contador, comparar / capturar canales, valores de
preescalador, etc. Aquí, una biblioteca adecuada hace la vida más fácil. Soy vago, lo único que
quiero hacer es especificar el período de tiempo y el pin de salida, y el resto debe ser resuelto por la
biblioteca.

Descargar
Descargue la biblioteca avdweb_SAMDtimer (https://github.com/avandalen/avdweb_SAMDtimer) de
GitHub, aquí también encontrará ejemplos de programas.
La biblioteca Adafruit_ZeroTimer (https://github.com/adafruit/Adafruit_ZeroTimer/) y la
Adafruit_ASFcore (https://github.com/adafruit/Adafruit_ASFcore) también deben ser instalados.
Atención: Las nuevas bibliotecas Adafruit_ASFcore y Adafruit_ZeroTimer ya no funcionan con la
biblioteca avdweb_SAMDtimer. Por lo tanto, instale estas 2 bibliotecas antiguas:
http://www.avdweb.nl/Article_files/Arduino/SAMDtimer/Adafruit_ASFcore-master.zip
(/Article_files/Arduino/SAMDtimer/Adafruit_ASFcore-master.zip)
http://www.avdweb.nl/Article_files/Arduino/SAMDtimer/Adafruit_ZeroTimer-master.zip
(/Article_files/Arduino/SAMDtimer/Adafruit_ZeroTimer-master.zip)

Error de biblioteca Adafruit_ASFcore-master (esto se resuelve en los archivos zip


de arriba)
La biblioteca Adafruit_ASFcore-master tiene un error que puede generar un error del compilador:
Se esperaba '}' al final de la entrada.
Cuando esto sucede, debe editar el archivo system_interrupt.h en el mapa:
C: \ Archivos de programa (x86) \ Arduino \ libraries \ Adafruit_ASFcore-master \
Cambiar esta línea en la parte inferior lo solucionará:
//} // eliminar debido a quejas anidadas extern C '
a
} // eliminar debido a quejas anidadas extern C'
1 Usando un temporizador con un pin de salida
La biblioteca es fácil de usar; el siguiente código genera una onda cuadrada de 1Hz al pin 5 del
Arduino Zero:
SAMDtimer mytimer1 = SAMDtimer (3, TC_COUNTER_SIZE_16BIT, 5,
1e6);
Explicación:
Mytimer1: este es el nombre de objeto de su elección.
3: la tabla de pines muestra que el temporizador3 debe usarse para el pin de salida 5.
TC_COUNTER_SIZE_16BIT: no cambie. Este parámetro existe solo para hacer que la biblioteca
se pueda expandir.
5: pin de salida 5
1e6: necesitamos especificar el período de tiempo en microsegundos.
Los lectores de alertas pueden notar que los dos primeros parámetros no son estrictamente
necesarios porque estos podrían derivarse del pin usado y del período de tiempo. Sin embargo, esto
haría que la biblioteca de temporizadores sea menos expandible y se producirán más errores con las
asignaciones de pines, si se utilizan más temporizadores.
Notas
El período de tiempo máximo es 1398080us (0,7 Hz).
El período de tiempo mínimo es = 2us (500kHz).
Por ahora, la biblioteca tiene tres temporizadores disponibles (número 3, 4, 5), solo en modo de
16 bits.
No se verifican los valores adecuados de los parámetros.
Sin especificar el ancho de pulso, es la mitad del período de tiempo (ciclo de trabajo 50%).

2 interrupciones del temporizador


También se puede usar un temporizador para llamar a interrupciones, sin usar un pin de salida del
temporizador. Para ejecutar periódicamente un ISR, simplemente use este código:

SAMDtimer mytimer2 = SAMDtimer (4, myISR, 5e5);


Explicación:
Mytimer2: este es el nombre de objeto de su elección.
4: toma cualquier temporizador gratis
myISR: el nombre del ISR de su elección.
5e5: el período de tiempo en microsegundos.
El ISR debe verse de la siguiente manera, no intente comprender, simplemente hágalo:
void myISR (struct tc_module * const module_inst)
{su código aquí
}
3 Adjuntar interrupciones a un temporizador con un pin de salida
Se puede usar un temporizador tanto para llamar a una interrupción como para dirigir su pin de
salida al mismo tiempo. Esto debe llevarse a cabo en dos pasos: primero cree un temporizador con
un pin de salida y luego conecte un ISR a él.

Mytimer3.attachInterrupt (myISR);
Explicación:
Mytimer3: un temporizador existente con un pin de salida, consulte el párrafo 1.
myISR: el nombre del ISR, consulte el párrafo 2.
Notas
Si el temporizador está desactivado, el ISR también está desactivado.

(/Article_files/Miscellaneous/Images/Wanted.jpg)

Pines de temporizador / contador SAMD21


Cada temporizador tiene sus propios pines disponibles y esta distribución es bastante complicada,
como puede ver aquí:
Pines SAM15x15 y Arduino Zero Timer / Counter
(/Article_files/Arduino/SAMDtimer/SAMD21G-TimerCounter-pins.jpg)

Mejoras futuras
Los temporizadores 0, 1, 2 y los modos de 8 bits aún no están implementados. Espero que otras
personas quieran hacer esto en GitHub.
También se pueden agregar más funciones, como:
setPeriod_us (us);

Frecuencias más altas


El temporizador puede producir frecuencias superiores a 500 kHz, pero como el período de tiempo
se especifica en microsegundos, la frecuencia máxima es 500 kHz. Para frecuencias más altas, se
puede usar la biblioteca (/arduino/hardware-interfacing/samd21-pwm-dac.html) rápida PWM-DAC
(/arduino/hardware-interfacing/samd21-pwm-dac.html) , pero prefiero tener una función que permita
establecer frecuencias más altas. Entonces esta puede ser la próxima extensión ...

Placa Arduino SAMD bajo prueba en mi banco de trabajo


(/Article_files/Arduino/SAMDtimer/Arduino-SAMD-testing-library.jpg)
¿Tiene algún comentario sobre el sitio web? Por favor, hágamelo saber
(http://www.avdweb.nl/contact.html) .
Descargo de responsabilidad (/disclaimer)
Contacto (/contact)
Privacidad (/privacyverklaring)

© avdweb 2021 Volver arriba

También podría gustarte