Guten Tag,

ich bin dabei eine Verbindung von einem ATMEGA 1284 über UART / FT232 an den USB zu meinem Pc herzustellen.

Mein Ziel ist es:
Die Übertragung von zwei Arrays (ASCII) an meinen PC. Ich habe erst ein int_16t Array geffüllt mit random Zahlen und diese dann in ASCII gewandelt und mit einem Trennzeichen 'x' versehen.

Mein PC erkennt das eigene Board. Wenn ich HTERM öffne bekome ich mich auch Verbunden nur erhalteich keine Daten. Ich bekomme garnichts angezeigt.

Ich habe im Programm nach dem senden ma meine LED´s die auf den Board sind angesteuert. Die Leuchten dann auch alle ca. 25sekunden auf.

Muss ich vlt in der Fuses was einsellen?
An den RX von dem FT232 geht der TX von Atmega. Spricht gekreuzt habe ich.

Klicke auf die Grafik für eine größere Ansicht

Name:	FT232.PNG
Hits:	15
Größe:	14,2 KB
ID:	29899
Klicke auf die Grafik für eine größere Ansicht

Name:	Fuses.PNG
Hits:	13
Größe:	26,4 KB
ID:	29900


Quelltext:

Code:
#define F_CPU 14745600UL		 // CPU Taktfrequenz
#include <util/delay.h>			 //
#include <avr/io.h>        	     //
#include <inttypes.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>




/////////////  ---- Baudrate ---- /////////////

#define BAUD 9600UL      // Baudrate
 
// Berechnungen
#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
 
#if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
  #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch! 
#endif



/////////////  ---- Initalisiere UART ---- /////////////

void uart_init(void) {
 	UBRR0H = UBRR_VAL >> 8;
 	UBRR0L = UBRR_VAL & 0xFF;
 
 	UCSR0B |= (1<<TXEN0) |(1<<RXEN0);  					// UART TX / RX einschalten
 	UCSR0C = (1<<UMSEL01)|(1<<UCSZ01)|(1<<UCSZ00);  	// Asynchron 8N1 
}



/////////////  ---- UART Senden  ---- /////////////


int uart_putc(unsigned char sende) {
    while (!(UCSR0A & (1<<UDRE0)))  /* warten bis Senden moeglich */
    {
    }                             
 
    UDR0 = sende;                      /* sende Zeichen */
    return 0;
}
 
 
/* puts ist unabhaengig vom Controllertyp */
void uart_puts (char *s){
    while (*s)
    {   /* so lange *s != '\0' also ungleich dem "String-Endezeichen(Terminator)" */
        uart_putc (*s);
        s++;
    }
}




/////////////  ---- MAIN  ---- /////////////


int main(void)
{
   DDRC  = 0xFF; 
   int16_t zw = 0;					//interner Schleifenzähler
  				
   int16_t sendeDaten1 [5];		//WErte Array1
   int16_t sendeDaten2 [5];		//WErte Array2
   char daten1 [31];			//Sende Array1		--> [x32000x12345x67890x......]
   char daten2 [31];			//Sende Array2
  
   uart_init();

while (1) {

   for (int16_t i=0; i<6; ++i){

   		sendeDaten1 [i] = rand() % 100;	//Zufallswerte in das 1. werte Array
   		sendeDaten2 [i] = rand() % 100;	//Zufallswerte in das 2. werte Array

		daten1[zw] = 'x';					//Trennzeichen x vor jeden WErt
		daten2[zw] = 'x';					//Trennzeichen x vor jeden WErt
		
		itoa (sendeDaten1 [i], daten1[zw+1], 10);	
		itoa (sendeDaten1 [i], daten2[zw+1], 10);

		zw = zw+6;						//
   }


   uart_puts( daten1 );			//erste daten Array als ASCII senden
   uart_puts( daten2 );			//zweites daten Array als ASCII seden
	



		///// Test Routine ´LED Test ///////
			
		PORTC |= (1<<PC0);		// Ausgang auf 1
		_delay_ms(15);
		PORTC |= (1<<PC1);    	
		_delay_ms(15);
		PORTC |= (1<<PC2);
    	_delay_ms(15);       	
		
		PORTC &= ~(1<<PC0);		// Ausgang auf 0
		_delay_ms(15);
    	PORTC &= ~(1<<PC1);
		_delay_ms(15);		   	
		PORTC &= ~(1<<PC2);
    	_delay_ms(20);       	



} 
 
    while (1) {
      ;
   }
 
   return 0; // never reached 
}