Cursos intensivos 2018..

bairesrobotics@gmail.com





Comunicacion Social
Boletin de novedades
BairesRobotics
Reciba gratis las novedades del blog en su correo electrónico de una manera sencilla y comoda. Recuerde revisar la carpeta de correo no deseado ya que algunos servicios de e-mail marcan el mensaje de confirmacion como spam.
BairesRobotics en tu eMail


Debes revisar tu correo para activarlo.





Pagar

Arduino CursoLa tarjeta entrenadora Arduino (ArduKit) es una placa de bajo costo que se conecta directamente con los controladores Arduino UNO o Arduino Mega2560. Gracias a sus sencillos periféricos y variedad de conectores se convierte en el complemento ideal para realizar los primeros programas y proyectos basados en la plataforma ARDUINO, apta para todos los públicos. Opcionalmente a esta tarjeta se le puede conectar un motor DC de bajo consumo (menos de 40mA), el cual se conecta a las salidas (PWM) D3 y D5. Con ellas se puede controlar velocidad y sentido de giro. Mas Info...
Arduino CursoCurso de programación Arduino, características, usos y aplicaciones. Ya que el objetivo principal de Arduino es interactuar con el mundo físico, se incluyen en este curso los conocimientos y recursos necesarios para actuar en el mundo real y recoger información de éste. Además, se impartirán nociones básicas de electrónica necesarias para...

Más Info Curso Arduino Regular...

Descarga ejemplos y programas Arduino...

Arduino timer interruptA continuación escribiré el código de un programa ejemplo donde se aplica una forma sencilla de generar ondas cuadradas. Para este ejemplo se han utlizado las interrupciones por CTC (Clear Timer on Compare) del Timer0, Timer1 y Timer 2. Con el Timer 0 generamos una frecuencia de 1kHz, con el Timer1 generamos 0.5kHz y con el Timer3 4kHz.
El programa principal o loop no hace nada, todas las acciones estan realizadas dentro de las respectivas interrupciones. Cada interrupción da vuelta 1 pin en el cual se encuentra conectado un LED.

Timer0 genera una frecuencia 2kHz/2 = 1kHz
= (16*10^6) / (2000*64) – 1 (tiene que ser <256) Timer1 genera una frecuencia 1Hz/2 = 0.5kHz = (16*10^6) / (1*1024) - 1 (tiene que ser <65536) Timer2 genera una frecuencia 8kHz/2 = 4kHz = (16*10^6) / (8000*8) - 1 (tiene que ser <256)


// Este ejemplo utiliza las 3 interrupciones de Timer.
// Timer0 va a interrumpir a 2kHz
// Timer1 va a interrumpir a 1Hz
// Timer2 va a interrumpir a 8kHz

#include < stdio.h >
#include < avr/io.h >
#include < avr/interrupt.h > 
#define F_CPU 16000000UL
#include < util/delay.h >

#define LEDA  0b00001000           // PTB3
#define LEDP  0b00100000           // PTB5
#define LEDV  0b00100000           // PTD5
#define LEDR  0b01000000           // PTD6

int main(void){
	
	DDRD  |=  (LEDV | LEDR);       
	DDRB  |=  (LEDP | LEDA);

	PORTD &= ~(LEDV | LEDR);             // Para apagar las 3 salidas
	PORTB &= ~(LEDP | LEDA);             // Para apagar las 3 salidas

	cli();                               // Stop interrupts

	// Setea interrupciones de Timer0 para 2kHz
	TCCR0A = 0;                          
	TCCR0B = 0;                          
	TCNT0  = 0;                          

	OCR0A = 124;                         // = (16*10^6) / (2000*64) – 1 (tiene que ser <256)
	TCCR0A |= (1 << WGM01);              // Coloca modo CTC
	TCCR0B |= (1 << CS11) | (1 << CS10); // Setea el bit CS10 para prescaler 64
	TIMSK0 |= (1 << OCIE0A);             // Habilita interrupción de CTC

	// Setea interrupciones de Timer1 para 1Hz
	TCCR1A = 0;                          
	TCCR1B = 0;                          
	TCNT1  = 0;                          

	OCR1A = 15624;                       // = (16*10^6) / (1*1024) - 1 (tiene que ser <65536)
	TCCR1B |= (1 << WGM12);              // Coloca modo CTC
	TCCR1B |= (1 << CS12) | (1 << CS10); // Setea el bit CS10 para prescaler 1024
	TIMSK1 |= (1 << OCIE1A);             // enable timer compare interrupt

	// Setea interrupciones de Timer2 para 8kHz
	TCCR2A = 0;                          
	TCCR2B = 0;                          
	TCNT2  = 0;                          

	OCR2A = 249;                         // = (16*10^6) / (8000*8) - 1 (tiene que ser <256)
	TCCR2A |= (1 << WGM21);              // Coloca modo CTC 
	TCCR2B |= (1 << CS11);               // Setea el bit CS11 para prescaler 8
	TIMSK2 |= (1 << OCIE2A);             // Habilita interrupción de CTC 

	sei();                               // Permite las interrupciones
	for(;;){
		
	}
}

//=================================================
// Genera una frecuencia 2kHz/2 = 1kHz

ISR(TIMER0_COMPA_vect){
    PORTD ^= LEDV;
}

//=================================================
// Genera una frecuencia 1Hz/2 = 0.5kHz

ISR(TIMER1_COMPA_vect){
    PORTD ^= LEDR;
}

//=================================================
// Genera una frecuencia 8kHz/2 = 4kHz
ISR(TIMER2_COMPA_vect){
    PORTB ^= LEDA;
}

Una respuesta a ANSI C & Arduino (parte 3) Timers Interrupts

  • Hola flicitaciones por vuestra web.

    Estoy buscando la manera de controlar dos transistores T1 y T2 desde un pulso PWM generado por un arduino.

    Quiero usar el tiemer 1 de 16bits, usar el pin 9 para el T1 y el pin 10 para el T2.

    Cuando el PWM esté alto activará el T1 y cuando el PWM esté bajo que active el T2

    La frecuencia de los dos pins debe ser la misma, el pin 9 que contola el T1 es el principal.
    Los pulsos del pin 10 deben estar invertidos respecto a los que salen por el pin 9.

    No se si me he explicado, podeis ayudarme?
    un millon de gracias por vuestra esperada respuesta.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>