Documentos de Académico
Documentos de Profesional
Documentos de Cultura
INTRODUCCIÓN:
Timer 555
Amplificador operacional OPAM
Tiristores
Ardruino
Pic
Transistores
DIAGRAMA GENERAL
Al tratarse de dos señales sumadas se utilizara dos circuitos paralelos para dores
sumarlos y así generar nuestra señal , previamente a este paso se debe usar un
generador astable para poder excitar nuestro circuito ya que este tipo de
generador diente sierra se activa al ver una señal de flanco de subida de una
señal cuadrada, por lo cual lo excitaremos con una astable discreto ya que
contamos con dos señales de salida Q y Q negada lo cual servirá para excitar
nuestros dos circuitos paralelos paralelos y luego sumar estos
ELEMENTOS DEL GENERADOR DIENTE SIERRA
CIRCUITO
DIENTE
SIERRA
ASTABLE
SUMADOR
CIRCUITO
DIENTE
SIERRA
CALCULO Y FORMULAS
Vcc − Vd
𝐼=
𝑅
Vcc−0.7
𝐼= (1)
𝑅
I∗t
𝑉𝑐 = (2)
𝐶
Reemplazando 1 en 2
(Vcc−0.7)∗t
𝑉𝑐 = 𝐶𝑅
Si R pequeño, C e I serán grandes y en el retorno Q2 tendrá que tomar una
corriente de descarga grande. Un valor de R en kilohms da I en mA con el orden
correcto de magnitud, así que comience con un algo arbitrario de R=3.3 KΩ
Ri
25 X 10−3
𝑅𝑖 >=
𝐶
Si Ri = ℎ𝑓𝑒 *Rc
Cs = 100* C
Ardruino :
Barato: Las placas Arduino son relativamente baratas comparadas con otras
plataformas microcontroladoras. La versión menos cara del modulo Arduino puede
ser ensamblada a mano, e incluso los módulos de Arduino preensamblados
cuestan menos de 50$.
Código
#ifndef cbi
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
//
// pins assignment
//
#define BUILTINLED 13
#define PWM_GENERATOR 11
//
// globals
//
//
// Commands
//
#define CMD_IDLE 0
#define CMD_RESET 175
// set the analog reference (high two bits of ADMUX) and select the
// to 0 (the default).
ADMUX |= _BV(ADLAR);
#if defined(__AVR_ATmega1280__)
// the MUX5 bit of ADCSRB selects whether we're reading from channels
ADCSRB = (ADCSRB & ~(1 << MUX5)) | (((pin >> 3) & 0x01) << MUX5);
#endif
//delay(1);
sbi(ADCSRA, ADSC);
}
uint8_t EndAnalogRead()
return result;
void setup()
// set prescale to 16
sbi(ADCSRA,ADPS2) ;
cbi(ADCSRA,ADPS1) ;
cbi(ADCSRA,ADPS0) ;
pinMode( 4, OUTPUT );
pinMode( 5, OUTPUT );
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
//Serial.begin(115200);
Serial.begin(1000000);
for(int i=2;i<8;i++)
digitalWrite(i, LOW);
// Serial.begin(1000000);
// Serial.begin(153600);
// Serial.begin(9600);
{
if ( in == CMD_PING )
Serial.write( 79 ) ;
Serial.write( 67 ) ;
Serial.write( triggerVoltage ) ;
Serial.write( DataRemaining>>8 ) ;
Serial.write( DataRemaining&0xff ) ;
Serial.write( triggerVoltage ) ;
else if ( in == CMD_RESET )
command = CMD_IDLE;
Serial.write( "OK" ) ;
digitalWrite(ledPin, LOW);
else if ( in == CMD_READ_ADC_TRACE )
triggerVoltage = Serial.read();
DataRemaining = Serial.read()<<8;
DataRemaining |= Serial.read();
numChannels = Serial.read();
channels[i] = Serial.read();
analogWrite(PWM_GENERATOR, Serial.read());
Serial.write( 85 );
triggered = 0;
channel = 0;
StartAnalogRead(channels[channel]);
lastADC = EndAnalogRead();
digitalWrite(ledPin, HIGH);
command = CMD_READ_ADC_TRACE;
else if ( in == CMD_READ_BIN_TRACE )
triggerVoltage = Serial.read();
DataRemaining = Serial.read()<<8;
DataRemaining |= Serial.read();
analogWrite(9, 64);
analogWrite(10, 128);
analogWrite(11, 192);
triggered = 0;
digitalWrite(ledPin, HIGH);
command = CMD_READ_BIN_TRACE;
Serial.write( 85 );
void loop()
if (Serial.available() > 0)
ProcessSerialCommand( Serial.read() );
if ( command == CMD_READ_ADC_TRACE )
triggered = 1;
digitalWrite(ledPin, LOW);
else
lastADC = v;
StartAnalogRead(channels[channel]);
return;
channel++;
if ( channel == numChannels )
channel=0;
DataRemaining--;
if ( DataRemaining == 0 )
command = CMD_IDLE;
}
Serial.write(v);
StartAnalogRead(channels[channel]);
Serial.write(v);
DataRemaining--;
if ( DataRemaining == 0 )
command = CMD_IDLE;