Quantcast
Channel: Question and Answer » uart
Viewing all 57 articles
Browse latest View live

USB to RS485 converter: Auto enable control

$
0
0

I have been trying to program infineon mcu via usb to rs485 converter.

Procedure to check mcu is working fine: Query command sent using hercules : 0×80 Response sent by mcu : 0×55 (correct response)

I developed usb to rs485 converter and mcu is getting programmed. But when i try to program it using generic usb to rs485 converters available is market, it is not programming.

I have also found the reason. Auto enable pin of generic usb to rs485 converters goes low (change to receive mode) after start bit sent by mcu. Thus converters assume next high to low pulse as start bit and reads 0xD5 instead of 0×55.

This peculiar behavior is happening since controller does not let auto enable line to be stabilized and sends response immediately.

I have to use generic converters due to some reasons but quick response of mcu is putting restriction.

Could somebody help in this matter please? How can i either control auto enable logic via A,B signal of rs485 or send response after some delay so that line could be stabled.


PIC18f45J50 2nd Serial port?

$
0
0

I am working on a GPS tracker Project where i need to interface with a GPS module and a UMTS module for 3g connectivity. with this i need 2 serial ports on a single microcontroller.

For this requirement i opted for PIC18F45J50, As i saw in it’s datasheet that it has 2 EUSART ports.

It has first Rx/Tx pins on pin 1 and 44 respectively… but i can’t find the second serial port.

So are there any examples or guidance on the second serial port on the microcontroller?

Measuring if a transistor can work for SPI/UART when doing logic level conversion

$
0
0

I need to convert 3v3 to 5V and 5V to 3v3 for SPI/UART. I found many options. But I’m still confuse whats good for me. Because Transistors and few other components has rise and fall time. I want to know if a transistor is able to get to the speed that I want of SPI/UART.

My only concern here is about speed, not voltage threshold.

Lets say I want SPI clock speed of 1MHz, how do I know if specific transistor can able to work properly with it.

For example, SparkFun Logic Level Converter – Bi-Directional

The above product is using BSS138, according to its datasheet. It’s total fall and rise time is (5 + 18 + 36 + 14) = 73ns

What I think is, convert 1 frequency to nano second and check if its higher than the total fall and rise time. I’m not sure about duty cycle of clock but I assume its 50%.

So if I need 1MHz clock speed, it would be 1us for each freq. Divide it by 2 as duty cycle is 50%. Making it 500ns.

Now reducing 500ns – 73ns = 427ns of actual duty cycle. But I do not know if 427ns is enough for SPI/UART ? or I’m completely wrong about whole thing ?

UART voltage on RX pin?

$
0
0

I bought an uart ttl to usb 2.0 adapter on ebay which I tried out yesterday with no luck. I measured all the pins and found to my surprise that the RX pin actually carries 3.3V. This can’t be right as the unit I intend to communicate with has 5V on its TX and 0V on its RX. Can my adapter be dysfunctional?

Secondly, I wonder if it doesn’t matter that one seem to carry 3.3V on its TX and the other 5V, can the respective devices handle this in any cases or must it be carefully matched?

STM32F3 Discovery reading values from sensor using I2C

$
0
0

I need to read values from on-board LSM303DLHC (connected via I2C) sensor and send them through UART.
UART part is working but PuTTy shows: “S▒▒” every restart… Can anyone tell me what’s wrong? I know that I2C part is not perfect but it should return something, right?

PS. I don’t want to use their library – I will learn more this way :)

#include "stm32f30x.h"

void SysTick_Handler(void);
void TimingDelay_Decrement(void);
void Delay(__IO uint32_t nTime);

static __IO uint32_t TimingDelay;
int b=0;

void UART_init (void);
void UART_SendChar (char data);
void USART_SendString (uint8_t * str);
int UART_read (void);

void i2c_conf();
void i2c_write_byte(uint8_t addr, uint8_t data);
uint8_t i2c_read_byte(uint8_t addr);

char read;
char data_from_i2c;

uint8_t CRA_REG_M = 0x00;
uint8_t MR_REG_M = 0x02;
uint8_t CRB_REG_M = 0x01;
uint8_t scldel;
uint8_t sdadel;

int main(void)
{
    SysTick_Config(SystemCoreClock / 1000);                         // Delay(1) = 1 ms with */1000

    UART_init();
    i2c_conf();

    /* ustaw zakres pomiarowy */
    i2c_write_byte(CRB_REG_M, 0x80);
    /* wlacz termometr i ustaw czestotliwosc odswiezania */
    i2c_write_byte(CRA_REG_M, 0x90);
    i2c_write_byte(MR_REG_M, 0x00);

    UART_SendChar('S'); 

    data_from_i2c = i2c_read_byte(0x03);
    UART_SendChar(data_from_i2c); 
    data_from_i2c = i2c_read_byte(0x04);
    UART_SendChar(data_from_i2c);

    while(1)
    {
//      uint8_t String[]="Hello world!";
//      USART_SendString (String);
//      Delay(1000);

        read=UART_read();
        UART_SendChar(read);
        read=0;

    }
}

void SysTick_Handler(void)
{
  TimingDelay_Decrement();
}

void Delay(__IO uint32_t nTime)
{
  TimingDelay = nTime;

  while(TimingDelay != 0);
}

void TimingDelay_Decrement(void)
{
  if (TimingDelay != 0x00)
  { 
    TimingDelay--;
  }
}

void UART_init (void) {
    RCC -> AHBENR  |=  (1UL << 19);                                     // Enable GPIOC clock
    GPIOC -> MODER |= (2 << 2*10) | (2 << 2*11);                // PC10 PC11 as AF mode
    GPIOC -> AFR[1] |= (7 << 8);                                                // PC10 as AF7 - USART3_TX
    GPIOC -> AFR[1] |= (7 << 12);                                               // PC11 as AF7 - USART3_RX

    RCC->APB1ENR  |=  (1UL << 18);                                      // Enable USART3 clock
    USART3 -> BRR = 3750; //Baudrate based on 24MHz clock 
    USART3 -> CR1 |= (USART_CR1_RE | USART_CR1_TE); 
    USART3 -> CR1 |= USART_CR1_UE;
}

void UART_SendChar (char data) {
    while( ( USART3 -> ISR & USART_ISR_TXE) == 0 ); 
    USART3 -> TDR = data;
}

void USART_SendString (uint8_t * str) {
    while(*str != 0) {
        UART_SendChar(*str); 
        str++;
    }
    UART_SendChar(10); 
    UART_SendChar(13); 
}

int UART_read (void)
{
    while ( (USART3->ISR & USART_ISR_RXNE) == 0); 
    return USART3-> RDR & USART_RDR_RDR;
}

void i2c_conf() {
    /* ustaw altenatywne funkcje GPIO */
    RCC -> AHBENR |= RCC_AHBENR_GPIOBEN;
    GPIOB -> OSPEEDR &= ~GPIO_OSPEEDER_OSPEEDR6 | ~GPIO_OSPEEDER_OSPEEDR7;
    GPIOB -> MODER |= GPIO_MODER_MODER6_1 | GPIO_MODER_MODER7_1;
    GPIOB -> OTYPER |= GPIO_OTYPER_OT_6 | GPIO_OTYPER_OT_7;
    GPIOB -> AFR[0] |= (4 << 24) | (4 << 28);

    /* zegar z APB1 - 72 MHz */
    //RCC->CFGR3 |= RCC_CFGR3_I2C1SW;
    RCC->APB1ENR |= RCC_APB1ENR_I2C1EN ;

    /* skonfiguruj I2C1 */
    I2C1->CR1 |= I2C_CR1_ANFOFF;
    scldel = 4;
    sdadel = 5;
    I2C1->TIMINGR = 0xF0001317 | ((scldel & 0x0F) << 20) | ((sdadel & 0x0F) << 16);
    I2C1->CR2 |= (0x1E << 1);
    I2C1->CR1 |= I2C_CR1_PE;
}

void i2c_write_byte(uint8_t addr, uint8_t data) {
    I2C1->CR2 &= ~(I2C_CR2_RD_WRN);
    I2C1->CR2 |= I2C_CR2_START |  (2 << 16);
    while(I2C1->CR2 & I2C_CR2_START);
    I2C1->TXDR = addr;
    while (!(I2C1->ISR & I2C_ISR_TXE));

    I2C1->TXDR = data;
    while (!(I2C1->ISR & I2C_ISR_TXE));
    I2C1->CR2 |= I2C_CR2_STOP;
    while(I2C1->CR2 & I2C_CR2_STOP);
}

uint8_t i2c_read_byte(uint8_t addr) {
    uint8_t data = 0;

    I2C1->CR2 &= ~(I2C_CR2_RD_WRN);
    I2C1->CR2 &= ~(0xff << 16);
    I2C1->CR2 |= I2C_CR2_START | (1 << 16);
    while(I2C1->CR2 & I2C_CR2_START);

    I2C1->TXDR = addr;
    while (!(I2C1->ISR & I2C_ISR_TXE));

    I2C1->CR2 |= I2C_CR2_RD_WRN;
    I2C1->CR2 |= I2C_CR2_START | (1 << 16);
    while(I2C1->CR2 & I2C_CR2_START);
    while (!(I2C1->ISR & I2C_ISR_RXNE));
    data = I2C1->RXDR;
    I2C1->CR2 |= I2C_CR2_STOP;
    while(I2C1->CR2 & I2C_CR2_STOP);
    return data;
}

So the problem with UART is because I’m sending hex values which are shown as ASCII characters. So I’m receiving values which should be for example my X-axis acceleration data in two bits (High and Low) in two’s complement. But how to convert that to decimal value and send it through UART?

FTDI2232d + TM4C1294 configurations

$
0
0

I posted this question before, but I am still struggling with this.
I captured a schematic and others in this time so it should be more clear to see what’s going on.

I was given a custom board including Tiva C TM4C1294 + other components on it. Unlike EK-TM4C, FTDI2232d is applied on the custom board.

I have tried to configure ft2232 using FT Prog and programmed .bin into the custom board, but nothing works so far.

Here is a schematic for FT2232D interfacing TM4C:
enter image description here

Here is My Computer’s hardware Configurations:

enter image description here

Here is how I set up using FT Prog:

enter image description here

I have chose other options but nothing works. According to the schematic Ch A is MPSSE mode
enter image description here

Also I have tried on different options, but…
enter image description here

For the Ch B, 232 UART and Virtual Com Port are selected.

enter image description here

As I program .bin into the custom board. It says “unable to find a target
I am not sure what is wrong with it.

Thanks,
Jin

Can't run 460800 baude rate on Nexys2

$
0
0

I have Nexys2 Spartan 3E board and I am running Ken Chapman’s UART IP core, I need to transmit data to another device at a baude rate of 460800. I was successful in sending data at 115200 and 9600 using 50MHz clock of my board, but when it comes to 460800 I get garbage values. I even tried with 100MHz clock (using DCM) but it did not really work.

Any ideas why I am having these issues?

Convert ASCII represented HEX into HEX

$
0
0

I have a question which I was unable to solve but it seemed trivial. I am getting a stream of characters from a processor over UART and this stream represents a JPEG file.

I captured this stream, as file.txt and can open it in (say) notepad and see FFD8…lots of data…FFD9. FFD8 and FFD9 are JPEG start of image and end of image codes and the data in between is presumably the jpeg image. I want to view this image, but the problem is that this data represents HEX characters (FFD8 for instance) but being a text file it is actually just ASCII and hence I can not open it as a JPEG.

Is there a program or a utility which will let me convert this file which contains “ASCII HEX” to true binary so I can view it as a jpeg file?

Thanks!


SLEEP_MODE_ADC interfering with USART (and beep)

$
0
0

On an AVR ATmega328P, once per second I am doing 3 AD conversions immediately following each other with 16x oversampling using SLEEP_MODE_ADC like this:

EMPTY_INTERRUPT(ADC_vect);

uint16_t getVoltage(uint8_t pin) {
    ADMUX = (0b11110000 & ADMUX) | pin;

    uint32_t overValue = 0;
    for (uint8_t i = 0; i < 16; i++) {
        sleep_mode();
        overValue += ADC;
    }
    int16_t mV = (((overValue >> 2) * AREF_MV) >> 12);

    return mV;
}

It works fine.

At the same time, I am generating a 4 kHz beep with a timer toggling an output pin, and I am reading and writing data over USART.

The beep has a short click once per second which looks like this: enter image description here

And every now and then a character sent over USART gets garbled.

While I’d expect that the beep timer is put to sleep during AD conversion in order reduce internal noise, I didn’t quite expect USART tx/rx to be disturbed.

When I don’t use sleep mode and do AD conversions like this:

    // sleep_mode();
    ADCSRA |= (1 << ADSC);
    loop_until_bit_is_clear(ADCSRA, ADSC);

the beep is “clean”, there are no more USART tx/rx issues, and after some extensive measuring, I am pretty sure the AD conversion results are just as accurate as they are with sleep mode.

So I am wondering about two things:

  1. Is it expected that USART tx/rx gets disturbed by
    SLEEP_MODE_ADC?
  2. Does sleep mode actually make sense in combination
    with oversampling? Does some noise maybe not even help to increase
    accuracy (dithering) or does that apply only to noise coming from
    the sensors?

MIDI IN : many circuits

$
0
0

I’m building a MIDI IN to serial port RX cicruit (for Raspberry Pi, or Arduino, or anything else…) using a 6N138 optoisolator.

But I find many different circuits, I don’t know why there are so different, and which one to choose:

Are these correct?

  1. First, this one with a 470 Ohm and 1KOhm resistor

  2. Another, with respectively 1KOhm and 3.3KOhm resistor

  1. The official one on midi.org, with different resistor values, but not based on 6N138…

Last thing (maybe off topic here): If I want to connect to Raspberry Pi’s GPIO’s RX, should I use 3.3V for the optoisolator instead of 5V, to prevent breaked with GPIO’s RX?

UART: two transmitters, single slave

$
0
0

schematic

simulate this circuit – Schematic created using CircuitLab

My circuit is shown above – where I have the TXD pin of an ATMEGA connected to the RXD pin of a BT slave. Both devices operate on 3.3V – so far so good. However, because I needed to be able to access the BT slave from an external device, such as a PC through an FTDI connector, I have connected the TXD pin from the FTDI connector to the same line.

Questions:

  1. I will be using the FTDI connector only for initial setup/test of the BT slave and the ATMEGA UART will not be transmitting at that point of time. As the ATMEGA TXD pin should be held high when it is idle, can I get away with the above circuit – i.e, would I be able to communicate with the BT slave using the FTDI connector without damaging the ATMEGA TXD pin? Would it be better (and work) if I add a 1K resistor in series with the FTDI TXD pin?

  2. I can program/test the BT slave using the FTDI connector BEFORE I program the ATMEGA (both parts would be powered up though). In this case, would I be correct in expecting that the ATMEGA TXD pin would offer high impedance (UART not configured yet) and therefore there should be no chance of damage to the TXD pin?

Thanks.

74HCT244 UART level translator, how would the circuit look?

$
0
0

I am building a UART 3.3V to 5V Level translator between a Raspberry Pi and a ATMega328.

The 74HCT244 is my choice of translator but I can’t find a good example of of hooking it up.

  1. Am I right that I should power it with 3.3V(VCC)?
  2. Output enabled(Grounded)
  3. 3.3v TX on Input 1.This should Output 1 at 3.3V to the ATMega328 that can work with 3.3V logic.
  4. 5v RX on Input 2 with Output Enabled. Connecting Output 2 at 3.3V to the RPI.

Number 4 to me is the bit I am not certain about. If I run the VCC at 3.3V will the input pins accept voltages above VCC.

What IRQ to use for USART transmission handling under SAM3x8e?

$
0
0

I’ve made the USART support for SAM3x8e arduino based board.
The MCU has TXRDY, ENDTX, TXEMPTY, TXBUFE interrupts. What would be the best choice to be used in IRQ driven transmission handling? Now I use TXRDY. Everything works, but I would like to know maybe ENDTX, TXEMPTY are more suitable for such a purpose?

Thanx.

FTDI UART programming (first steps)

$
0
0

Im currently trying to leave the arduino board aside and starting program microcontrollers on pcb boards via programming pins, im using an ATMEGA328u from this premade board, For starters im trying to upload the bootloader, i know every single connection its in place since this pcb is a kit, the FTDI driver is instlalled in my machine, the cable has been verified to work by using this guide

enter image description here

ftdi Board pins

enter image description here

However I have no idea of how to actually write the program and upload it to the microcontroller, I have been messing with the arduino IDE all day my FTDI cable its at COM10, however no programmer avaiable at the arduino IDE seems to work with this cable, I have been looking and trying all day with no luck,

How can i write code in c and upload it to my microcontroller using the FTDI cable? do I need a specific software to do this? Any special configuration or hack? what am I missing?

Actual schemmatic of the project Im trying to program

enter image description here
enter image description here
I am currently using this datasheet for my cable

enter image description here
enter image description here
enter image description here

How to troubleshoot serial communication?

$
0
0

I connected my computer to a RM-BR300 controller to read its data, to try and mimic its functionality in the future.

I’m using RealTerm and a USB to RS422 converter for the job – here’s the result:

UART receiver framing error

Sony’s VISCA protocol says packets should start with an address like 0×80 and end with 0xFF.

Why there are no visible packets in that sample?

What does the “UART receiver framing error” represent?

Here is the list of commands that could be sent by this controller.

This image shows some info on the USB to Serial converter:

enter image description here


Jitter in UART start-bit

$
0
0

Experimental setup:

STM32F103RB microcontroller, Keil uVision 4.72, USART2 on PA.2, PA.3.

Experiment:

initialize USART for 9600 baud/s, initialize PORTA, initialize SysTick (for delays, interrupt every millisecond)

then:

// delay for 5 milliseconds
1) Delay(5);

// high level on PA.4
2) GPIOA->BSRR = 1<<4;

// fixed length delay
3) for(volatile uint32_t i=0; i<1000; i++){}

// send byte
4) USART2->DR = 0x55;

// wait for transmit complete
5) while(! (USART2->SR & USART_FLAG_TC) );

// clear transmit complete flag
6) USART2->SR &= ~USART_FLAG_TC;

// low level on PA.4
7) GPIOA->BRR = 1<<4;

Here is code for Delay:

volatile uint32_t SystemTime;

void Delay(uint32_t delayTime)
{
    uint32_t time = SystemTime;
    while((SystemTime - time) < delayTime)
    {
        continue;
    }    
}

void SysTick_Handler(void)
{
    SystemTime++;
}

Then I looked in my oscilloscope and I saw that time between line 2 (rising edge on PA.4) and start-bit on USART (line 4) is different every time. Jitter was about 150 microseconds.

If I substitide Delay (which uses systick) with an empty for-loop – there is no jitter.

I was startled. After doing some experiments I found that for-loop with fixed length causes no jitter. Even if there is access to SystemTime variable in that loop.

Then I disabled all interrupts and used this for delay:

uint8_t xorshiftRandomByte(void)
{
    // seed value
    static uint8_t y8 = 1;

    y8 ^= (y8 << 7);
    y8 ^= (y8 >> 5);
    return y8 ^= (y8 << 3);
}

void Delay()
{
    uint32_t r = xorshiftRandomByte() * 2 + 5000;

    for(uint32_t i=0; i<r; i++)
    {
        ;
    }
}

And I saw jitter once again. Jitter between two lines (2 and 4) that DO NOT have a Delay call between them!

Can somebody please explain me what is going on here?

UPD: I tried to check a theory that jitter is caused by “beat” between CPU clock and UART clock. I thought if that’s the case, then there would be some value of delay with which there will be no jitter (cause UART clock cycle will be divided integrally by CPU clock).

And on close to integral division jitter should change slowly.

I saw something like that on oscilloscope. So, I guess, that theory is correct.

But for some reason, only for very specific delays there was no jitter – only if there was a 4 on the end. Like, 4 ms, 14 ms, 24. But not a multiple of 4!

That is weird. What’s so special about that 4? And they are not even multiple of something common.

U(S)ART/SPI/I2C – any common/prevalent/recommended connectors?

$
0
0

Good morning everyone!

I’m currently building the board with the STM32F417 microcontroller, and I want to have separate (out-of-GPIO) I2C, SPI, UART and USART outputs on the board.

But I’m lost on what physical connector should I use for each of the interfaces.
Any recommendations? Are there any commonly accepted variants?

Thank you in advance.

Bitwise operation for UART, AVR

$
0
0

I’m trying to work on UART for AVR. After setting the baud rate registers UBRRnX, I’m trying to configure the UCSRnA register.
UCSR0A register.

I’m trying to set the 2nd bit, U2XO. Which is the right way to do it?
UCSR0A = (1 << U2X0)

or

UCSR0A = UCSR0A | (1 << U2X0) (Notice the OR operator in the 2nd statement)

Error in turning ON the LED using UART in PIC32

$
0
0

I have a PIC32 starter Kit & IO Expansion Board. PIC32 Starter Kit has 3 LEDs on baord LED1 LED2 LED3 . I have made a uart program such that if someone presses 1 on the keyboard, this 1 will be send serially to PIC32 and LED1 will be ON and if someone presses 4, LED1 will be OFF. In the same way, 2 & 5 will turn ON & OFF LED2 & 3 & 6 for LED3. Program is running fine and LED1 & LED3 are responding properly but LED2 is always turn ON whether I press the 2 or not. I dont know why is this happening with this LED2. Is there anything which I am missing. I know LEDs are working but I dont know what is happening in this case. Does anyone have any idea about this thing. Please help.

CODE:

#include <plib.h>
#include <string.h>

#pragma config FNOSC = PRIPLL, POSCMOD = HS, FPLLMUL = MUL_18, FPLLIDIV = DIV_2, FPBDIV = DIV_2, FPLLODIV = DIV_1
#pragma config FWDTEN = OFF

#define SYSTEM_FREQUENCY        72000000L
#define BAUDRATE                57600

int main()
{
    int pbFreq;
    TRISDbits.TRISD0 = 0; //output
    TRISDbits.TRISD1 = 0; //output
    TRISDbits.TRISD2 = 0; //output

    char RxBuffer[5];

    pbFreq=SYSTEMConfigPerformance(SYSTEM_FREQUENCY);
    OpenUART2( UART_EN | UART_NO_PAR_8BIT | UART_1STOPBIT, UART_RX_ENABLE | UART_TX_ENABLE, (pbFreq/16/BAUDRATE)-1);

while(1)
    {

        if((U2STAbits.URXDA)!=0)
        {
            getsUART2(5,RxBuffer , 123);

            U2STAbits.URXDA = 0;
            U2STAbits.OERR = 0; 


        }


        if(RxBuffer[0] == '1')
        {
            PORTDbits.RD0 = 1;
            putsUART2(">>LED: 1 ON");

           memset(RxBuffer,0,5*sizeof(char));
    }
    else if(RxBuffer[0] == '4')
    {
        PORTDbits.RD0 = 0;
        putsUART2(">>LED: 1 OFF");

        memset(RxBuffer,0,5*sizeof(char));
    }


    if(RxBuffer[0] == '2')
    {
        PORTDbits.RD1 = 1;
        putsUART2(">>LED: 2 ON");
        memset(RxBuffer,0,5*sizeof(char));
    }
    else if(RxBuffer[0] == '5')
    {
        PORTDbits.RD0 = 0;
        putsUART2(">>LED: 2 OFF");
        memset(RxBuffer,0,5*sizeof(char));
    }

    if(RxBuffer[0] == '3')
    {
        PORTDbits.RD2 = 1;
        putsUART2(">>LED: 3 ON");
        memset(RxBuffer,0,5*sizeof(char));
    }
    else if(RxBuffer[0] == '6')
    {
        PORTDbits.RD2 = 0;
        putsUART2(">>LED: 3 OFF");
        memset(RxBuffer,0,5*sizeof(char));
    }
}
}

Low cost UART over fibre

$
0
0

I need to extend an existing 5V UART over fibre for isolation reasons. Digital isolators / optos are no good as I need more isolation than that (0.1pF coupling max. from one side to the other). UART content is fixed due to backward compatibility requirements – 57600 baud. Maximum transmission distance is 10m.

My initial thought was to use TOSLINK transmitters and receivers. I bought some (three connections – 5V, GND and IN or OUT respectively) and got to playing. First issue I saw was data inversion when driving with a simple 10ms on, 20ms off test signal. Fine, added an inverter – this got fixed.

I then set it up at 57600 with a continuous data stream – and got horrible garbage (character-wise – waveform is clean but incorrect). Reduced the speed to 9600 and sent individual characters so I could observe the waveform – no problem. Increased speed back to 57600 and sent individual characters. Strange things. Basically, the character waveform starts well, but then half way through inverts. It looks to me like the transmitter is trying to ensure 0 DC bias – this would make sense in a way as I believe that TOSLINK uses Manchester encoding.

So two questions:

  1. Is this behaviour people have seen with other TOSLINK transmitters? Are there “straight passthrough” transmitters out there?

  2. Does anyone have an alternative solution using fibre? The best option I have seen so far is the Avago HFBR series – easy to use (it seems) but relatively high cost. Any better suggestions?

Viewing all 57 articles
Browse latest View live