From 0c3d1233036801045c8fc73ccb6fa45c7795ca53 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Sun, 6 Apr 2008 23:20:29 +0200 Subject: * digital/asserv: - more encoders tests. --- digital/asserv/src/asserv/test_counter.c | 19 +++++++++++++++++-- digital/asserv/src/hdlcounter/counter_index_test.v | 14 +++++++------- 2 files changed, 24 insertions(+), 9 deletions(-) (limited to 'digital/asserv') diff --git a/digital/asserv/src/asserv/test_counter.c b/digital/asserv/src/asserv/test_counter.c index f41d1295..bcdd966d 100644 --- a/digital/asserv/src/asserv/test_counter.c +++ b/digital/asserv/src/asserv/test_counter.c @@ -32,13 +32,14 @@ #include "counter_ext.avr.c" -uint8_t read, read_cpt; +uint8_t read, read_cpt, read_mode; uint8_t ind, ind_cpt, ind_init; uint8_t count, count_cpt; int main (void) { + uint8_t read_old = 0; uint8_t old_ind = 0; const int total = 5000; LED_SETUP; @@ -54,7 +55,16 @@ main (void) counter_update (); if (read && !--read_cpt) { - proto_send2b ('r', counter_read (0), counter_read (3)); + uint8_t r0, r1, r2, r3; + r0 = counter_read (0); + r1 = counter_read (1); + r2 = counter_read (2); + r3 = counter_read (3); + if (read_mode == 0 || r3 != read_old) + { + proto_send4b ('r', r0, r1, r2, r3); + read_old = r3; + } read_cpt = read; } if (ind && !--ind_cpt) @@ -94,6 +104,11 @@ proto_callback (uint8_t cmd, uint8_t size, uint8_t *args) break; case c ('r', 1): read_cpt = read = args[0]; + read_mode = 0; + break; + case c ('R', 1): + read_cpt = read = args[0]; + read_mode = 1; break; case c ('i', 1): ind_cpt = ind = args[0]; diff --git a/digital/asserv/src/hdlcounter/counter_index_test.v b/digital/asserv/src/hdlcounter/counter_index_test.v index fcfc2355..1d806c35 100644 --- a/digital/asserv/src/hdlcounter/counter_index_test.v +++ b/digital/asserv/src/hdlcounter/counter_index_test.v @@ -40,14 +40,14 @@ module counter_top(clk, rst, q0, q1, q2, q3, ale, rd, wr, ad, i0, i1, ioa, input [3:0] ioa, ioc; wire [1:0] qf0; - wire [size-1:0] count0; + wire [15:0] count0; // Decode encoders outputs. noise_filter f0[1:0] (clk, rst, q0, qf0); - quad_decoder_div4 qd0 (clk, rst, qf0, count0); + quad_decoder_div4 #(16) qd0 (clk, rst, qf0, count0); reg [size-1:0] lcount; - reg [size-1:0] sample; + reg [15:0] sample; // Sample on index pulse. always @(posedge clk or negedge rst) begin @@ -66,10 +66,10 @@ module counter_top(clk, rst, q0, q1, q2, q3, ale, rd, wr, ad, i0, i1, ioa, if (!rst) lcount <= 0; else begin - lcount <= ad[1:0] == 0 ? count0 : - ad[1:0] == 1 ? 0 : - ad[1:0] == 2 ? 0 : - sample; + lcount <= ad[1:0] == 0 ? count0[15:8] : + ad[1:0] == 1 ? count0[7:0] : + ad[1:0] == 2 ? sample[15:8] : + sample[7:0]; end end -- cgit v1.2.3