So.....minicom zeigt das vom Atmel gesendete Zeichen. Das ist ja schonmal vielversprechend!
readAtmel() leider immer noch 0.
Habe den fehlenden Code natürlich eingefügt...aber leider immer noch nix.

***edit
hab das TIMEOUT mal erhöht und um eine Null erweitert und siehe da...es kommt was zurück vom Port.
Jetzt aber erstmal ins Bett...

***edit
konnte es dann doch nicht erwarten \/

Danke dir für deine Hilfe!!!
Jetzt kann ich alles über USB steuern, Daten empfangen und das dicke Kabel für LPT1 kann weg.

Hier der funktionierende Code
Code:
#include <errno.h>
#include <fcntl.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/time.h>

#include <linux/serial.h>

#define READ_TIMEOUT 100000 
#define _POSIX
#define USB_DEVICE "/dev/ttyUSB0"

int dev_fd = 0;

/* openAtmel */
int openAtmelPort(char *dev_name)
{
  
  if ((dev_fd = open(dev_name, O_RDWR | O_NOCTTY, 0)) < 0)
  {
    return (-1);
  }
	
   //============ DIESE ZEILEN HIER SETZEN DIE PORT SETTINGS ========================
    struct termios ctio;
    
  tcgetattr(dev_fd, &ctio); /* save current port settings */
  ctio.c_iflag = IXON | IGNPAR; // TODO: IXON oder IXOFF ?!?? < < < <
  ctio.c_oflag = 0;
  // | SW flow control | Parity 0 | 8 Databits | 1 StopBit
  ctio.c_cflag = CREAD | CLOCAL | 0 | CS8 | 1;
  ctio.c_lflag = 0;
  ctio.c_cc[VTIME] = 0; /* inter-character timer unused */
  ctio.c_cc[VMIN] = 0; /* blocking read until 0 chars received */
  cfsetispeed(&ctio, (speed_t) B9600);
  cfsetospeed(&ctio, (speed_t) B9600);
  tcflush(dev_fd, TCIFLUSH);
  tcsetattr(dev_fd, TCSANOW, &ctio);
  
  return (dev_fd);
   //========================================================================== 
  return (dev_fd);
}

/* closeAtmel */
int closeAtmelPort()
{
  return close(dev_fd);
}

/* writeAtmel */
int writeAtmelPort(char *c)
{
  
  int n = write(dev_fd, c, 1);
  
  if (n < 0)
  {
    // error
    printf("write() of n bytes failed -> %d", n);
  }
  
  return n;
}
 
/* readAtmel */
int readAtmelPort(unsigned char *buf, int nChars)
{

  int amountRead = 0, bytes_read = 0;
  struct timeval t;
  fd_set set;
  int err;
  
  while(nChars > 0)
  {
    t.tv_sec = 0;
    t.tv_usec = READ_TIMEOUT;
    FD_ZERO(&set);
    FD_SET(dev_fd, &set);
    err = select(dev_fd + 1, &set, NULL, NULL, &t);

    if(err == 0)
      return 0;
  
    amountRead = read(dev_fd, buf, nChars);
    if(amountRead < 0 && errno != EWOULDBLOCK)
      return -1;
    else if(amountRead > 0) {
      bytes_read += amountRead;
      nChars -= amountRead;
      buf += amountRead;
    }
  }
  return bytes_read;
}


int main()
{
	unsigned char *buffer;
	int result;
	char *myChar[1];
	myChar[0]="w";
	
	
	result = openAtmelPort(USB_DEVICE);
	printf("openAtmelPort: %d\n", result);
	result = readAtmelPort(buffer, 2);
	printf("readAtmelPort: %d\n", result);
	printf("in: %d\n", buffer[0]);
	printf("out: %s\n", myChar[0]);
	result = writeAtmelPort(myChar[0]);
	printf("writeAtmelPort: %d\n", result);
	closeAtmelPort();
	return (0);
}
Das TIMEOUT konnte ich wieder runtersetzen, da ich beim Atmel den Loop hab schneller laufen lassen.