Академический Документы
Профессиональный Документы
Культура Документы
En el trabajo 108 habíamos hecho un generador de onda senoidal con un PIC. Aquí lo
repetimos con un Arduino UNO.
En este trabajo se genera una onda fija, de 50 KHz. Se varía la frecuencia con el valor de
delay. Si el retardo es cero, la frecuencia es de 250 KHz.
La generación se basa en el principio mostrado en la imagen siguiente, que fue tomado de
una página de Internet, no así todo el desarrollo, que es propio.
Son 4 resistencias en paralelo, que forman un divisor de tensión, con la quinta, de 1K.
Esta disposición permite 16 combinaciones de valores 1 o 0 de las salidas del PIC.
Cada una de esas combinaciones da un valor de tensión que se usa para general una onda
parecida a una onda senoidal.
1
Esta es la onda generada:
Firmware
No se debe armar con ciclo for porque se introducen retardos que modifican la curva.
// R 9.4K al 4
// R 4.7K al 5
// R 2.2K al 6
// R 1 k al 7
// Tierra a Gnd
void setup()
{
// 76543210
DDRD = DDRD | B11110000; // Setea el puerto completo con uso del Serial 1 = OUTPUT / 0
= INPUT
}
void loop()
{
PORTD= 128; // 9
delayMicroseconds(T);
PORTD= 144; // 10
delayMicroseconds(T);
PORTD= 160; // 11
delayMicroseconds(T);
PORTD= 176; // 12
delayMicroseconds(T);
PORTD= 192; // 13
3
delayMicroseconds(T);
PORTD= 208; // 14
delayMicroseconds(T);
PORTD= 224; // 15
delayMicroseconds(T);
PORTD= 240; // 16
delayMicroseconds(T);
PORTD= 224; // 15
delayMicroseconds(T);
PORTD= 208; // 14
delayMicroseconds(T);
PORTD= 192; // 13
delayMicroseconds(T);
PORTD= 176; // 12
delayMicroseconds(T);
PORTD= 160; // 11
delayMicroseconds(T);
PORTD= 144; // 10
delayMicroseconds(T);
PORTD= 128; // 9
delayMicroseconds(T);
PORTD= 112; // 8
delayMicroseconds(T);
PORTD= 96; // 7
delayMicroseconds(T);
PORTD= 80; // 6
delayMicroseconds(T);
PORTD= 64; // 5
delayMicroseconds(T);
PORTD= 42; // 4
delayMicroseconds(T);
PORTD= 32; // 3
delayMicroseconds(T);
PORTD= 16; // 2
delayMicroseconds(T);
PORTD= 0; // 1
delayMicroseconds(T);
PORTD= 16; // 2
4
delayMicroseconds(T);
PORTD= 32; // 3
delayMicroseconds(T);
PORTD= 42; // 4
delayMicroseconds(T);
PORTD= 64; // 5
delayMicroseconds(T);
PORTD= 80; // 6
delayMicroseconds(T);
PORTD= 96; // 7
delayMicroseconds(T);
PORTD= 112; // 8
delayMicroseconds(T);