Lantronix X-Port 
Lantronix X-Port är en rolig liten sak! Den kan användas som en Ethernet-UART brygga för mindre processorer där man inte vill eller har möjligheter att implementera en hel TCP/IP stack. Men den är faktiskt så väldigt mycket mer: Bland annat hittar man en komplett webserver i den, stöd för SMTP (möjlighet att skicka mail från den), FTP och mycket annat smått och gott. 384 kB finns att leka med om man vill lägga upp egna hemsidor i den.

Eftersom jag kommit över några ex av X-Port kunde jag förstås inte låta bli att prova den så jag satte snabbt ihop följande kretskort:



Den består av en ATMega som kör på ca 11 MHz, en röd lysdiod som är kopplad till PD6 på ATMegan, en switchregulator för att få 3.3 V (X-Port vill ha detta men dess datapinnar är 5 V kompatibla) samt förstås X-Port själv. X-Ports dataingång är direkt kopplad till AtMega TXD0 (PD0) och dess datautgång är således kopplad till ATMegas RXD0 (PD1).

Jag skrev ihop ett litet program till ATMega som i princip bara väntar på data från UART:en. När ett tecken tas emot kollar ATMega om det är en ”0”. Isåfall släcks lysdioden. Är det istället en ”1” tänds den. Enkelt men bra för att testa med.


#define F_CPU 11059200L

#include <avr/io.h>

#include <util/delay.h>

////////////////////////////////////////////
//
// HARDWARE DEFINITIONS
//
////////////////////////////////////////////

#define BAUDRATE_9600BPS 71

#define LED_PORT PORTD
#define LED_DDR DDRD
#define LED_STATUS PD6

///////////////////////////////////////////////////
//
// UART
//
////////////////////////////////////////////////////

/* Initialize UART */
void uart_init( unsigned char baudrate )
{
/* Set baud rate */
UBRR0H = (unsigned char)(baudrate>>8);
UBRR0L = (unsigned char)baudrate;
/* Enable receiver and transmitter */
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
/* Set frame format: 8data, 2stop bit */
UCSR0C = (1<<USBS0)|(3<<UCSZ00);
}

/* Read and write functions */
unsigned char uart_receive( void )
{
/* Wait for data to be received */
while ( !(UCSR0A & (1<<RXC0)) )
;
/* Get and return received data from buffer */
return UDR0;
}

////////////////////////////////////////////////////
//
// L E D S
//
////////////////////////////////////////////////////

void led_init()
{
LED_DDR |= ( 1 << LED_STATUS );
}

void led_active()
{
LED_PORT &= ~( 1 << LED_STATUS );
}

void led_deactive()
{
LED_PORT |= ( 1 << LED_STATUS );
}

int main()
{
led_init();

uart_init( BAUDRATE_9600BPS );

while(1)
{
uint8_t r = uart_receive();

if( r == '0' )
led_deactive();
if( r == '1' )
led_active();
}

return 0;
}


Sedan kopplades X-Porten in på nätverket via en router. Eftersom X-Port utnyttjar DHCP (man kan naturligtvis sätta en fast adress som man vill) i mitt nätverk kommer den automatiskt att få en IP adress. Denna IP adress kan man ta reda på antingen genom att kolla i routern eller använda Lantronix speciella program som letar upp alla X-Portar på nätverket.

Programmet för att styra lysdioden valde jag att skriva i C#. Ett formulär skapas där man kan fylla i IP adressen samt portnummer för X-Porten. Två knappar finns också, en för att tända lysdioden och en för att släcka den. När användaren trycker på en knapp skapas en TCPSocket som går mot IP-numret. Därefter skrivs ett värde, 0 eller 1 beroende på vilken knapp som trycktes, till socketen och sedan stängs den.



Och koden:


public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void ConnectAndSend(string message)
{
TcpClient socketForServer;
try
{
socketForServer = new TcpClient(textBoxIP.Text, int.Parse(textBoxPort.Text));
}
catch
{
string err = String.Format("Failed to connect to server at {0}:{1}", textBoxIP.Text, textBoxPort.Text);
MessageBox.Show(err);
return;
}

NetworkStream networkStream = socketForServer.GetStream();
System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(networkStream);
try
{
streamWriter.WriteLine(message);
streamWriter.Flush();

}
catch (Exception ex)
{
MessageBox.Show("Exception reading from Server " + ex.Message);
}

// tidy up
networkStream.Close();
}

private void button1_Click(object sender, EventArgs e)
{
ConnectAndSend("1" ) ;
}

private void button2_Click(object sender, EventArgs e)
{
ConnectAndSend("0" ) ;
}
}


Eftersom det hela går över TCP/IP och Internet skulle alltså ATMega kunna sitta på andra sidan jorden och låta sig styras från Sverige. Ganska fantastiskt egentligen!

Några andra roligt finesser är att man kan få den att skicka ut förkonfigurerade mail genom att låta den lyssna på det som skickas från mikroprocessorn. Man kan i inställningarna för X-Port välja vilken tecken som den ska reagera på och när X-Port känner av dessa skickas ett mail iväg.

Nackdelar då? Jo, den är väldigt dyr, ca 500 kr plus moms men å andra sidan får du faktiskt ett helt komplett system så ur den aspekten kan den inte anses vara dyr. Men det är klart, utnyttjar man inte hela potentialen så springer kostnaderna iväg.

Själv har jag en hel del tankar om projekt där man kan utnyttja en X-Port men det som ligger närmast är en temperaturloggningssystem med OneWire, ett SD kort (för att lagra all data) samt en X-Port förstås för at kunna kommunicera med omgivningen. Ytterligare en tanke jag har är att ta fram en ROV styrkort där man pratar med TCP/IP istället för RS485 för att kunna utnyttja t.ex. IP kameror på ett bekvämt sätt.


[ kommentera ] ( 12 views )   |  permalink

<<Första <Backa | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | Nästa> Sista>>