Saturday, April 3, 2010

Con apuntadores y sin apuntadores c++



Aún veo lejos el día en que entienda todo esto de los apuntadores... pero tendrá que ser pronto :P


SIN APUNTADORES
#include
#include
#pragma hdrstop
#include "myParametersS1.h"#include "S1.h"
#include "BITS.h"
#include "SDHByte.h"
#include

using namespace std;
using std::cout;using std::cin;
using std::endl;
int main()
int main()
int main()
{
S1 mys1;
BITS mybits;
unsigned char a;
for (int i=1;i<=10;i++)
{
cout<<"\n Dame dato \n"< cin>> a;
cout<<"\n Valor aceptado: \n"< cout<<(mys1.Acceptance(a));
}
system("PAUSE");
return 0;
}


CON APUNTADORES
#include
#include
#pragma hdrstop
#include "myParametersS1.h"
#include "S1.h"
#include "BITS.h"
#include "SDHByte.h"
#include

using namespace std;using std::cout;
using std::cin;
using std::endl;

int main()
{
S1 mys1;
S1 *ps1; //puntero
ps1=&mys1; // puntero tiene la direccion de mys1
unsigned char a;
for (int i=1;i<=10;i++)
{
cout<<"\n \n Dame dato"< cin>> a;
//cout<<(mys1.Acceptance(a));
cout<<"Valor aceptado: ";
cout<<>Acceptance(a);
}

cout<<"\n Valor de a: "< cout<<"\n Direccion de a: "<<&a< ps1->SetValue('s');
cout<<"\n ps1->GetValue()"< cout<GetValue()< //ps1->~S1(); // destructor
cout<<"\n mys1.GetValue()"< cout<
system("PAUSE");
return 0;
}

Reloj 00-24 veriloco


Esto no tiene precio :)

* Programar en codigo verilog en Quartus
* Simular, simular y simular
* Bajar el programa al FPGA Ciclone II EP2C35F672C6 (Altera DE2)

Helo aquí:

GENERADOR DEL PULSO CADA SEGUNDO
(Medio ciclo de trabajo)

module pulso_segundo(clk,reset,q1);
input clk,reset;
output reg q1;
wire Carry_seg;
reg [24:0] q; // registro de 25

always @ (negedge reset or posedge clk)
if (!reset)
q <= 0;
else if(q == 50000) // si llegas a 25 millones, entonces q=0
q <= 0;
else
q <= q + 1'b1 ; // si no has llegado a 25 mill, aumenta q

assign Carry_seg = q == 50000 ? 1'b1:1'b0; // poner carry_seg a 1, cuando q sea igual a 25 mill

always @ ( posedge clk, negedge reset)
if (!reset)
q1 <= 0;
else if (Carry_seg) // si carry_seg es igual a 1, entra y cambia q1 al estado contrario en el que estaba
// carry_seg va a ser igual a 1 cada 25 mill, o sea que q1 va a cambiar cada 25 mill
q1 <= ! q1;
else
q1 <= q1;
endmodule

CONTADORES SEGUNDOS, MINUTOS Y HORAS
module contadores(reset,en,pulso_segundo,rs,OE,contadorseg,OEmin,contadormin,OEhr,contadorhr);
input reset,en,rs;
output reg [5:0]contadorseg,contadormin;
output reg [4:0]contadorhr;
input pulso_segundo;
output OE,OEmin,OEhr;

always @(posedge pulso_segundo ,negedge reset)
begin
if(!reset)
contadorseg<= 0;
else if (en)
begin
if(!rs)contadorseg<=0;
else if (OE==1)
contadorseg<=0;
else
contadorseg = contadorseg + 1'b1;
end
end

assign OE = (contadorseg==59)?1'b1:1'b0;

/////////////////////////////////////////////////

always @(posedge pulso_segundo ,negedge reset)
begin
if(!reset)
contadormin<= 0;
else if (en)
begin
if(!rs)contadormin<=0;
else if (OE==1)
begin
if (OEmin==1)
contadormin<=0;
else
contadormin = contadormin + 1'b1;
end
end
end

assign OEmin = (contadormin==59 && OE)?1'b1:1'b0;

/////////////////////////////////////////////////

always @(posedge pulso_segundo ,negedge reset)
begin
if(!reset)
contadorhr<= 0;
else if (en)
begin
if(!rs)contadorhr<=0;
else if (OEmin==1)
begin
if (OEhr==1)
contadorhr<=0;
else
contadorhr = contadorhr + 1'b1;
end
end
end

assign OEhr = (contadorhr==23 && OEmin)?1'b1:1'b0;

endmodule

CONVIERTE BINARIO A BCD

module binarytobcd(binario,bcd0_out,bcd1_out); // bcd1_out y bcd2_out seran mis salidas del modulo
input [5:0] binario;
reg [5:0] bcd0,bcd1; // cuando van dentro del always tienen que llevar reg
output [3:0] bcd0_out,bcd1_out; // declaración de las variables que si van a salir

always @(binario) // Todo esto va combinacional, no necesita reset o clock
begin
if (binario>=60)
begin
bcd1<=4'b0000; //mas significativo
bcd0<=4'b0000; //menos significativo
end
else if (binario>=50)
begin
bcd1<=4'b0101; // En todos los casos se forza a bcd1 y bcd2 a ser de 4 bits para que puedan ir al decoder
bcd0<=binario-6'b110010;
end
else if (binario>=40)
begin
bcd1<=4'b0100;
bcd0<=binario-6'b101000;
end
else if (binario>=30)
begin
bcd1<=4'b0011;
bcd0<=binario-6'b011110;
end
else if (binario>=20)
begin
bcd1<=4'b0010;
bcd0<=binario-6'b010100;
end
else if (binario>=10)
begin
bcd1<=4'b0001;
bcd0<=binario-6'b001010;
end
else
begin
bcd1<=4'b0000;
bcd0<=binario;
end
end

assign bcd1_out=bcd1[3:0]; // se tuvo que hacer esta asignacion para que finalmente bcd1 se quede con bcd1_out
assign bcd0_out=bcd0[3:0];

endmodule

DECODIFICADOR DE BCD A DISPLAY SIETE SEGMENTOS

module decoder(binary_in,decoder_out);
input [3:0] binary_in; // 4 bit binary input
output reg [6:0] decoder_out; // 6-bit out

always @(binary_in)
begin
case(binary_in)
0: decoder_out = 7'b1000000;
1: decoder_out = 7'b1111001;
2: decoder_out = 7'b0100100;
3: decoder_out = 7'b0110000;
4: decoder_out = 7'b0011001;
5: decoder_out = 7'b0010010;
6: decoder_out = 7'b0000010;
7: decoder_out = 7'b1111000;
8: decoder_out = 7'b0000000;
9: decoder_out = 7'b0010000;
default decoder_out=7'b0000110;
endcase
end
endmodule

TODO EL RELOJ CON INSTANCIACIONES
(La maravilla de las instanciaciones)

module reloj_verilog(clk,reset,en,rs,OE,decoder_out0,decoder_out1,OEmin,decoder_out2,decoder_out3,OEhr,decoder_out4,decoder_out5);

input clk,reset,en,rs;
output OE,OEmin,OEhr;
output [6:0] decoder_out0,decoder_out1,decoder_out2,decoder_out3,decoder_out4,decoder_out5;

wire q1;
wire [5:0]contadorseg,contadormin;
wire [4:0]contadorhr;
wire [3:0]bcd0,bcd1,bcd2,bcd3,bcd4,bcd5;
wire OE,OEmin,OEhr;

pulso_segundo segundero (clk,reset,q1); // No lleva reset
contadores todoscontadores (reset,en,q1,rs,OE,contadorseg,OEmin,contadormin,OEhr,contadorhr);

binarytobcd btobcdseg (contadorseg,bcd0,bcd1);
decoder D0 (bcd0,decoder_out0);
decoder D1 (bcd1,decoder_out1);

binarytobcd btobcdmin (contadormin,bcd2,bcd3);
decoder D2 (bcd2,decoder_out2);
decoder D3 (bcd3,decoder_out3);

binarytobcd btobcdhr (contadorhr,bcd4,bcd5);
decoder D4 (bcd4,decoder_out4);
decoder D5 (bcd5,decoder_out5);

MODULITO PARA DESCARGAR AL FPGA

module descargas(CLOCK_50,SW,HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,LEDR);

input CLOCK_50;
input [2:0]SW;
output [6:0]HEX1,HEX0,HEX2,HEX3,HEX4,HEX5;
output [2:0]LEDR;
reloj_verilog R1(CLOCK_50,SW[2],SW[1],SW[0],LEDR[0],HEX0,HEX1,LEDR[1],HEX2,HEX3,LEDR[2],HEX4,HEX5);
endmodule


ASIGNAR LOS PINES
Usar el documento DE2_pin_assignments.csv
Assignments/Import assignments
LISTO!!!!!!

Thursday, April 1, 2010

Humanos hechos y derechos

Hoy en la mañana estaba pensando en todo lo que me ha pasado desde la mitad del mes pasado a la fecha y como he ido cambiando. Como he ido teniendo avances personales y pequeños retrocesos (como regla los avances siempre serán mayores a los retrocesos). Y me refiero especificamente a avances en mi concepción de la humanidad, el dolor, sufrimiento y alegría ajenos. Creo que antes no me habia percatado de lo mucho que nuestras palabras influyen en los demás, de como una palabra de aliento puede ser elixir en momentos de desanimo o como una palabra con crítica descuidada puede herir a los que más queremos. No estoy diciendo que he avanzado mucho y que ahora soy una humana hecha y derecha, pero el intento se hace.

Pero creanme que a golpes estoy aprendiendo a valorar el esfuerzo de los demás, su capacidad, sus talentos, que por más que no se note, tal vez esa persona se esta esforzando demasiado. Y eso es porque lo estoy viviendo en carne propia.

Monday, March 22, 2010

El tren de la vida :o

No subir al tren de tu vida a una pareja con las siguientes características:
* Que hablen pestes de sus papas.
* Que no tengan sueños o aspiraciones.
* Flojos.

Recomendado ampliamente por: Dr. Jorge Lozano

Sunday, March 21, 2010

El trofeo


2ª Lectura (Flp 3, 8-14)
Lectura de la Carta del apóstol San Pablo a los filipenses
Hermanos: Todo lo que era valioso para mí, lo consideré sin valor a causa de Cristo. Más aún pienso que nada vale la pena en comparación con el bien supremo, que consiste en conocer a Cristo Jesús, mi Señor, por cuyo amor he renunciado a todo, y todo lo considero como basura, con tal de ganar a Cristo y de estar unido a él, no porque haya obtenido la justificación que proviene de la ley, sino la que procede de la fe en Cristo Jesús, con la que Dios hace justos a los que creen. Y todo esto, para conocer a Cristo, experimentar la fuerza de su resurrección, compartir sus sufrimientos y asemejarme a él en su muerte, con la esperanza de resucitar con él de entre los muertos. No quiero decir que haya logrado ya ese ideal o que sea ya perfecto, pero me esfuerzo en conquistarlo, porque Cristo Jesús me ha conquistado. No, hermanos, considero que todavía no lo he logrado. Pero eso sí, olvido lo que he dejado atrás, y me lanzo hacia adelante, en busca de la meta y del trofeo al que Dios, por medio de Cristo Jesús, nos llama desde el cielo.
Palabra de Dios.
A. Te alabamos, Señor.

Saturday, March 13, 2010

Máquinas de Mealy y de... Moore, de Moore!

Ah siempre se me olvidan los dos tipos de máquinas de estados que existen y por eso las voy a dejar por aquí para que no me vuelva a suceder. Antes que todo, una máquina de estados es una forma de modelar el comportamiento de un sistema con las entradas, salidas y la transición entre estados.

Mealy: Basa su estado en el estado actual de sus entradas y anteriores entradas, o sea que usa señales de entrada y salida para determinar cual sera su linea de transición.

Moore: Depende solo del estado actual de la máquina.

Tuesday, March 2, 2010

fftshift y ifftshift en MATLAB

FUNCIONALIDAD DE fftshift e ifftshift en Matlab

>> x=[1 2 3 4 5 6 7];

y=fftshift(x);
y = 5 6 7 1 2 3 4

z=ifftshift(x);
z = 4 5 6 7 1 2 3

--------------------------
>> x=[1 2 3 4 5 6 7];
>> yz=fftshift(ifftshift(x));
yz = 1 2 3 4 5 6 7

>> zy=ifftshift(fftshift(x));
zy = 1 2 3 4 5 6 7
------------------------

USANDO FTOT

% HELP: This command passes a group of samples from the frequency domain to
% the time domain.
% EXAMPLE: x=ftot(X)
% The samples in X freq domain are passed to the time domain in x

function [vector]=ftot(vector)
vector = fftshift(ifft(ifftshift(vector)));
end
------------------------
%% DEMUESTRA VENTAJA DE USAR TTOF
t0=20;
fs=100;
t=-t0/2:1/fs:t0/2; %Eje de tiempo
f=-fs/2:1/t0:fs/2; %Eje de frecuencia
x=sin(2*pi*2*t);
X=fft(x);
subplot(3,1,1)
plot(f,abs(X),'r');grid on;title('Usando solo FFT, con espectro de frecuencia sin centrar en 2Hz');
N=length(t); % numero de muestras
subplot(3,1,2)
plot(f,abs(X)/N,'r');grid on;title('Usando solo FFT dividiendo sobre N');
X=ttof(x);
subplot(3,1,3)
plot(f,abs(X)/N,'r');grid on;title('Usando funcion ttof, con la frec correctamente centrada en 2Hz');


----------------------
FUNCION TTOF (cambia del dominio del tiempo al dominio de la frec mediante fft)

% HELP: This command passes a group of samples from the time domain to
% the frequency domain.
% EXAMPLE: X=ttof(x)
% The samples in X freq domain are passed to the time domain in x
% t =-5:1/20:5;
% x = sin(2*pi*1*t)
function [vector]=ttof(vector)
vector = fftshift(fft(ifftshift(vector)));
end

Sunday, February 28, 2010

Pater Noster

Rezar el padre nuestro en latín en las misas (al menos en la iglesia a donde voy) se ha puesto de moda :P


PATER NOSTER, qui es in caelis, sanctificetur nomen tuum. Adveniat regnum tuum. Fiat voluntas tua, sicut in caelo et in terra. Panem nostrum quotidianum da nobis hodie, et dimitte nobis debita nostra sicut et nos dimittimus debitoribus nostris. Et ne nos inducas in tentationem, sed libera nos a malo. Amen.