0% encontró este documento útil (0 votos)
123 vistas3 páginas

Codigos Base Burst Desarrollo Magneto

Este documento contiene código para generar señales magnéticas utilizando timers en Arduino. Incluye código para generar pulsos a 40Hz usando timer0, generar señales de 5Hz y 40Hz usando PWM en timer1, y usar timer2 para controlar dos salidas con diferentes frecuencias de activación.

Cargado por

Adriana Komyk
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
123 vistas3 páginas

Codigos Base Burst Desarrollo Magneto

Este documento contiene código para generar señales magnéticas utilizando timers en Arduino. Incluye código para generar pulsos a 40Hz usando timer0, generar señales de 5Hz y 40Hz usando PWM en timer1, y usar timer2 para controlar dos salidas con diferentes frecuencias de activación.

Cargado por

Adriana Komyk
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

CODIGOS BASE PARA DESARROLLO DEL MAGNETO

Generador Base Burst


byte val;

void setup() {
DDRD |= _BV (7); // pinMode (7, OUTPUT);
val = TIMSK0;
}

void loop() {
TIMSK0 = 0; // deshabilita timer0

for (int i = 0; i < 60; i++) { // Cantidad de pulsos exactos en ráfaga si se usa PORTD &= ~_BV (7);
// Si se usa solo PIND |= _BV (7); el valor es el doble
PORTD &= ~_BV (7); // digitalWrite (7, LOW);
__builtin_avr_delay_cycles (10); // Tiempo en "0" de pulsos del burst
PORTD |= _BV (7); // digitalWrite (7, HIGH);
__builtin_avr_delay_cycles (30); // Tiempo en "1" de pulsos del burst
//PIND |= _BV (7); // digitalWrite (7, TOGGLE); -> 50% duty cycle. USARLO SOLO
}
__builtin_avr_delay_cycles (400000); // para 16MHz CPU -> 160 ciclos = 10µs (400.000=25ms, 40Hz)
//TIMSK0 = val; // habilita timer0
}

/* ---------------------------------------------------------------------------------------------------------------------------------------------------*/
40Hz con Timer Arduino
/* T= 49999 (ICR1)
|<--------------------->|
---- ----
| | | |
____| |_____________________| |_____________

--->| |<---- t=100us (OCR1A)

PIN 9 -> SALIDA


*/

//#include <Arduino.h>

void setup() {
DDRB |= ( 1 << PB1 ); // PIN 9 salida. pinMode (9, OUTPUT);

TCNT1 = 0; // Reiniciamos el contador inicial (por siacaso)

ICR1 = 49999; // T de la señal (el TOP de nuestra PWM). 49999 -> T=25ms f=40Hz

TCCR1A = (1 << COM1A1) | (0 << COM1A0); // Ponemos a 'bajo' el OCR1A cuando coincida el Compare Match
TCCR1A |= (1 << WGM11) | (0 << WGM10 ); // Fast PWM: TOP: ICR1
TCCR1B = (1 << WGM13) | (1 << WGM12 ); // Fast PWM: TOP: ICR1

TCCR1B |= (0 << CS12) | (1 << CS11) | ( 0 << CS10 ); // Preesc = 8

OCR1A = 200; // Duracion del pulso 100 us. Minimo = 1us


}

void loop() {
TCNT2 = OCR2B - 1; // Ponemos el contador justo antes del OCR2B
//delay(100);
}

Para 5 Hz
/* T= 49999 (ICR1)= 200 ms = 5Hz
|<---------------->|
----------- -----------
| | | | duty cycle 50%
____| |______| |_____________

--->| |<---- t=25000us (OCR1A)

PIN 9 -> SALIDA


*/

//#include <Arduino.h>

void setup() {
DDRB |= ( 1 << PB1 ); // PIN 9 salida. pinMode (9, OUTPUT);

TCNT1 = 0; // Reiniciamos el contador inicial (por siacaso)

ICR1 = 49999; // T de la señal (el TOP de nuestra PWM). 49999 -> T=200ms f=40Hz

TCCR1A = (1 << COM1A1) | (0 << COM1A0); // Ponemos a 'bajo' el OCR1A cuando coincida el Compare
Match
TCCR1A |= (1 << WGM11) | (0 << WGM10 ); // Fast PWM: TOP: ICR1
TCCR1B = (1 << WGM13) | (1 << WGM12 ); // Fast PWM: TOP: ICR1

TCCR1B |= (0 << CS12) | (1 << CS11) | ( 1 << CS10 ); // Preesc = 64

OCR1A = 25000; // Duracion del pulso 25000 us. Minimo = 1us


}

void loop() {
TCNT2 = OCR2B - 1; // Ponemos el contador justo antes del OCR2B
//delay(100);
}

/* ---------------------------------------------------------------------------------------------------------------------------------------------------*/
Timer 2 – Para 2 salidas
//DECLARACION DE VARIABLES GLOBALES
volatile unsigned long ticks;
unsigned long Tarea1;
unsigned long Tarea2;
//* ----------------------------------------------------------------------------------------------------
void setup(){
DDRB = _BV(PB5); // Pin 13 Arduino UNO equivale a PB5
DDRD = _BV(PD3); // Pin 3 Arduino UNO equivale a PD1 - //pinMode (3, OUTPUT);//

// NORMAL MODE
TCCR2A = (1 << COM2A1) | (0 << COM2A0) | (0 << COM2B1) | (0 << COM2B0) | (0 << 3) | (0 << 2) | (0 << WGM21) |
(0 << WGM20);
TCCR2B = (0 << FOC2A ) | (0 << FOC2B ) | (0 << 5) | (0 << 4) | (0 << WGM22) | (1 << CS22) | (0 << CS21) | (0 <<
CS20);

// Configurado a 1.024 ms
// Activo Timer2 Overflow Interrupt
TIMSK2 = (0 << 7) | (0 << 6) | (0 << 5) | (0 << 4) | (0 << 3) | (0 << OCIE2B) | (0 << OCIE2A) | (1 << TOIE2);

// Oscilador interno
ASSR = (0 << 7) | (0 << EXCLK) | (0 << AS2) | (0 << TCN2UB) | (0 << OCR2AUB) | (0 << OCR2BUB) | (0 << TCR2AUB) |
(0 << TCR2BUB);

// Inicializo variables
Tarea1 = 10;
Tarea2 = 25;

// Activo interrupciones globales.


sei();
}

//* -----------------------------------------------------------------------------------------------------------
void loop() {
if (ticks >= Tarea1){
PINB |= _BV(PB5); //Conmuto pin 13
Tarea1 += 10; //Configuro para que se ejecute de nuevo la Tarea1 dentro de 10 ticks
}

if (ticks >= Tarea2){


PIND |= _BV(PD3); //Conmuto pin 2 - se REEMPLAZA POR
Tarea2 += 25; //Configuro para que se ejecute de nuevo la Tarea2 dentro de 25 ticks
}
}

//-----------------------------------------------------
// Rutina de Interrupcion [TIMER2_OVF_vect es la rutina que se ejecuta cuando el Timer2 ->Overflow]
// Arduino tiene un cristal de 16 Mhz
// Por lo que tenemos una interrupcion cada => 1/ ((16000000 / PRESCALER) / 256)
ISR(TIMER2_OVF_vect){
ticks++;
}

/* ---------------------------------------------------------------------------------------------------------------------------------------------------*/

También podría gustarte