Gast
#2569758
Hallo,
ich möchte über die UART-Schnittstelle des ATMega8 Daten über einen
TTL/RS232 Pegelwandler an meinen PC Senden.
Das MC Programm ist fertig und die Daten empfange ich mit einem rxtx
Java Programm. Die Daten Verlassen den TX Ausgang des MC korrekt siehe
Scopebild. Der Wandler ist ein einfacher für 8€ von ebay. Wenn ich nun
die Daten von mit meinem Java Programm empfange kommt statt dem ASCII
Zeichen 1 ein q an und zwischendurch auch mal eine 1 (aber eher selten).
Ich habe es jetzt bereits mit zwei verschiedenen Wandlern versuch bei
beiden kommt es zum selben Ergebniss. Wo ist mein Fehler?
MC Code:
------------------------------------------------
#define FOSC 1000000// Clock Speed
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1
void main( void )
{
USART_Init ( MYUBRR );
while(1){
USART_Transmit('1')
_delay_ms(1000);
}
}
void USART_Init( 6 ) //hab ich einfach ausgerechnet und gleich
eingesetzt
{
/* Set baud rate */
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}
void USART_Transmit( char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRA & (1<<UDRE)) )
;
/* Put data into buffer, sends the data */
UDR = data;
}
Der MC sendet das Signal perfekt. Scopebild vom TX Ausgang des Mega8
liegt im Anhang. Die Einstellungen habe ich Überprüft es sind Startbit
die 8Datenbits und die 2 Stoppbits zu sehen.
JAVA Code:
--------------------------------------------------------
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import java.io.FileDescriptor;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class TwoWaySerialComm
{
public TwoWaySerialComm()
{
super();
}
void connect ( String portName ) throws Exception
{
CommPortIdentifier portIdentifier =
CommPortIdentifier.getPortIdentifier(portName);
if ( portIdentifier.isCurrentlyOwned() )
{
System.out.println("Error: Port is currently in use");
}
else
{
CommPort commPort =
portIdentifier.open(this.getClass().getName(),2000);
if ( commPort instanceof SerialPort )
{
SerialPort serialPort = (SerialPort) commPort;
serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STO
PBITS_2,SerialPort.PARITY_NONE);
InputStream in = serialPort.getInputStream();
OutputStream out = serialPort.getOutputStream();
(new Thread(new SerialReader(in))).start();
}
else
{
System.out.println("Error: Only serial ports are handled
by this example.");
}
}
}
/** */
public static class SerialReader implements Runnable
{
InputStream in;
public SerialReader ( InputStream in )
{
this.in = in;
}
public void run ()
{
byte[] buffer = new byte[1024];
int len = -1;
try
{
while ( ( len = this.in.read(buffer)) > -1 )
{
System.out.print(new String(buffer,0,len));
}
}
catch ( IOException e )
{
e.printStackTrace();
}
}
}
public static void main ( String[] args )
{
try
{
(new TwoWaySerialComm()).connect("COM3");
}
catch ( Exception e )
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
