Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Current »

This information is now maintained here: https://github.com/open-ephys/rhythm/blob/master/README.md

Ever since using Intan RHD chips, we've been using a modified version of Intan's Rhythm firmware and API to communicate with the headstages.
While the Open Ephys acquisition board mostly works with the standard intan firmware, there are a few subtle changes. (The Open Ephys software uses the standard intan API with some modifications and will work directly with the intan system and vice versa).

  • the RGB status LEDs require a specific driver 
  • our analog in chips differ from those used by intan, so a different controller code needs to be used.

Here is a list of changes made on top of the firmware version 1.4 (26 February 2014) :


xem6010.ucf:

add the pin out for the LED string. All LEDs are driven by just one signal:

# LED data out
NET "LED_OUT" LOC="B14" | IOSTANDARD=LVCMOS33;


main.v:

insert into module main #(  in/output definitions :

output wire   LED_OUT

Instantiate LED controller for the WS2812 string (see LED controller subpage for info on this module).
This code is still pretty much a place holder - add actually useful information and status display here. 

// OPen Ephys board status LEDs
//assign LED_OUT = 1'b0; // use to set to 0

// led controller for
// format is 24 bit red,blue,green, least? significant bit first color cor current led
LED_controller WS2812controller(
.dat_out(LED_OUT), // output to led string
.reset(reset),
.clk(clk1), // 100MHz clock
/* .led1(24'b000000000000000000000000),
.led2(24'b000000000000000000000000),
.led3(24'b000000000000000000000000),
.led4(24'b000000000000000000000000),
.led5(24'b000000000000000000000000),
.led6(24'b000000000000000000000000),
.led7(24'b000000000000000000000000),
.led8(24'b101010101010101010101010)
);
*/
.led1({data_stream_7_en_in ? {led_d1_dat,led_d2_dat} : 16'b00000001 ,8'b00000001}), // 4 SPI cable status LEDs
.led2({data_stream_5_en_in ? {led_c1_dat,led_c2_dat} : 16'b10000000 ,8'b10000000}),
.led3({data_stream_3_en_in ? {led_b1_dat,led_b2_dat} : 16'b00000000 ,8'b00000000}),
.led4({data_stream_1_en_in ? {led_a1_dat,led_a2_dat} : 8'b00000001,8'b00000001,8'b00000001}),
.led5({TTL_in,TTL_in,TTL_in}), // TTL in
.led6({TTL_out,TTL_out,TTL_out}), // TTL out
.led7({8'b00000000,8'b00000000,8'b00000000}), // Ain
.led8({DAC_register_1,DAC_register_2,8'b01000000}) //Aout
);

ADC_input.v:

Instead of the Analog Devices AD7680 ADC used by intan, we're using the Texas Instruments DS8325 on our acquisition boards.
The usage of the chips is almost identical, but the data timing is a bit different, requiring a small edit in ADC_input.v - instead of populating the register from channel states 4-19, we're populating from 7-22. Everything else can stay the same.

ms_clk11_a: begin
ADC_SCLK <= 1'b1;
case (channel)

7: begin
ADC_register[15] <= ADC_DOUT;
end

8: begin
ADC_register[14] <= ADC_DOUT;
end

9: begin
ADC_register[13] <= ADC_DOUT;
end

10: begin
ADC_register[12] <= ADC_DOUT;
end

11: begin
ADC_register[11] <= ADC_DOUT;
end

12: begin
ADC_register[10] <= ADC_DOUT;
end

13: begin
ADC_register[9] <= ADC_DOUT;
end

14: begin
ADC_register[8] <= ADC_DOUT;
end

15: begin
ADC_register[7] <= ADC_DOUT;
end

16: begin
ADC_register[6] <= ADC_DOUT;
end

17: begin
ADC_register[5] <= ADC_DOUT;
end

18: begin
ADC_register[4] <= ADC_DOUT;
end

19: begin
ADC_register[3] <= ADC_DOUT;
end

20: begin
ADC_register[2] <= ADC_DOUT;
end

21: begin
ADC_register[1] <= ADC_DOUT;
end

22: begin
ADC_register[0] <= ADC_DOUT;
end

endcase
end




  • No labels