Anoniem
beste mensen,
zou iemand mij kunnen helpen met het zoeken van de fouten in mijn stukje code ?!?
het gaat om het stukje genaamd servo en servo_controller.
de bedoeling is dat ik 5 waarden ingeef die 5 hoeken van de servo moeten voorstellen bev.(0g = 1200ms, 90g = 1500ms , 180g = 1800ms)
en dat de servo_controller er een netjes mapje van maakt.
en dat servo dan de hoek in graden geeft aan servo_controller die dan weer de goede delay aangeeft.
mocht er nog meer info nodig zijn hoor ik dat.
zie hier het quartus archive http://mangavalk.dyndns.org/firefly.qar
flipflop
"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
Anoniem
hier een zip versie. (let op server tot 21:30 bereikbaar)http://mangavalk.dyndns.org/FireFly.zip
qar is een archief voor de compiler Quartus II (Altera)
Gamesbond
Enige overeenkomst tussen wat hierboven staat en de werkelijkheid berust op puur toeval
Anoniem
misschien niet de beste oplossing, maar anders krijg ik weer geklaag om Groote lappen code.http://mangavalk.dyndns.org/verilog.html
flipflop
"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
Post dan een klein stuk van je code
Dan is het over een tijdje ook nog te lezen, je zip file is dan weg. Anyway, Quartus dus. Wat is het probleem? Ik voel me niet zo geroepen om het voor je te gaan debuggen.
Simuleren lijkt met het toverwoord hier (zoals gebruikelijk).
[Bericht gewijzigd door flipflop op (36%)]
Anoniem
het probleem is dat ik met deze test niet een puls krijg die ~1500ms moet zijn.
ik zal morgen de code neerzetten.
het is nu te laat om het uit te gaan zoeken zodat alleen de hoofd nodige delen hier komen.
Anoniem
hier de belangrijke stukjes.
zo klein mogelijk.
module hexapod (
input CLOCK_50, // systeem clock
input [3:0] key, // 4 drukknoppen
output [0:7] led, // 8 leds
// pins I/O connector 40Polig
output IOA0, // pin1 b16
output IOA1, // pin2
output IOA2, // pin3
output IOA3, // pin4
output IOA4, // pin5
output IOA5, // pin6
output IOA6, // pin7
output IOA7, // pin8
output IOA8, // pin9
output IOA9, // pin10
// pin11 +5V
// pin12 GND
output IOA10, // pin13
output IOA11, // pin14
output IOA12, // pin15
output IOA13, // pin16
output IOA14, // pin17
output IOA15, // pin18
output IOA16, // pin19
output IOA17, // pin20
input IOA18, // pin21
input IOA19, // pin22
output IOA20, // pin23
output IOA21, // pin24
output IOA22, // pin25
output IOA23, // pin26
output IOA24, // pin27
output IOA25, // pin28
// pin29 +3V3
// pin30 GND
output IOA26, // pin31
output IOA27, // pin32
output IOA28, // pin33
output IOA29, // pin34
output IOA30, // pin35
output IOA31, // pin36
output IOA32, // pin37
output IOA33, // pin38
output IOA34, // pin39
output IOA35 // pin40 h4
);
clock_module sys_clocks
(
.clk_50mhz (CLOCK_50),
.clk_100ns (clk_100ns),
.clk_1us (clk_1us),
.clk_10us (clk_10us),
.clk_100us (clk_100us),
.clk_1ms (clk_1ms),
.clk_10ms (clk_10ms),
.clk_100ms (clk_100ms),
.clk_1s (clk_1s)
);
reg [0:7] pos1,pos2,pos3,pos4,pos5,pos6,pos7,pos8,pos9,pos10,pos11,pos12,pos13,pos14,pos15,pos16,pos17,pos18;
servo servo1
(
.clk_1us (clk_1us),
.servo_signal (IOA17),
.pos (128),//pos1[0:7]
.cor_a (900), //===
.cor_b (1200),//*
.cor_c (1500),//---
.cor_d (1800),//*
.cor_e (2100),//===
.sycle (20000),
.led (led)
);
endmodule
module servo (
input clk_1us,
input [0:7] pos,
output reg servo_signal,
input [0:12] cor_a,
input [0:12] cor_b,
input [0:12] cor_c,
input [0:12] cor_d,
input [0:12] cor_e,
input [0:15] sycle,
output [0:7] led
);
// ---registers--
reg [0:14] tm1;
reg [0:7] pos2;
reg init;
// ---sub-programma---
servo_controller scm
(
.servo_in (pos [0:7]),
.servo_uit (pos2 [0:12]),
.clk (clk_1us),
.cor_2_a (cor_a [0:12]),
.cor_2_b (cor_b [0:12]),
.cor_2_c (cor_c [0:12]),
.cor_2_d (cor_d [0:12]),
.cor_2_e (cor_e [0:12])
);
// ---hoofdprogramma---
always @ (posedge clk_1us)
begin
led[0:7] = pos2[0:7];
if (tm1!=sycle)
begin
tm1 <= tm1 + 1;
end
else
begin
tm1 <= 0;
end
end
always @ (posedge clk_1us)
begin
if (init == 0)
begin
init=1;
servo_signal=0;
end
if (tm1 <= pos2)servo_signal = 1;
else servo_signal <= 0;
end
endmodule
module servo_controller
(
input [0:7] servo_in,
output reg [0:12] servo_uit,
input clk,
input [0:12] cor_2_a,
input [0:12] cor_2_b,
input [0:12] cor_2_c,
input [0:12] cor_2_d,
input [0:12] cor_2_e,
output reg EN
);
// ---registers---
reg [0:8] teller_1;
reg [0:8] deelvactor = ((255)/(5-(1)));
// ---registers---
reg [0:8][0:12] map;
// string/waarde
// ---assing-programma---
assign servo_uit [0:12] = map [servo_in][0:12];
// ---hoofd-programma---
always @ (posedge clk)
begin
if ((teller_1 <= 255)&(EN=0))
begin
if ((teller_1 >= 0) & (teller_1 <= deelvactor)) map[teller_1][0:12] = ((( cor_2_b - cor_2_a ) / deelvactor ) * teller_1 ) + cor_2_a;
else if ((teller_1 >= ( deelvactor + 1 )) & (teller_1 <= (deelvactor * 2))) map[teller_1][0:12] = ((( cor_2_c - cor_2_b ) / deelvactor ) * teller_1 ) + cor_2_b;
else if ((teller_1 >= (( deelvactor * 2 ) + 1 )) & (teller_1 <= (deelvactor * 3))) map[teller_1][0:12] = ((( cor_2_d - cor_2_c ) / deelvactor ) * teller_1 ) + cor_2_c;
else if ((teller_1 >= (( deelvactor * 3 ) + 1 )) & (teller_1 <= (deelvactor * 4))) map[teller_1][0:12] = ((( cor_2_e - cor_2_d ) / deelvactor ) * teller_1 ) + cor_2_d;
end
if (teller_1 == 255)
begin
EN = 1;
//teller_1 = 0;
end
else teller_1++;
end
endmodule