- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 26

Thema: Probleme mit Atmega über FT232 an USB

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    21.02.2015
    Beiträge
    65

    Probleme mit Atmega über FT232 an USB

    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 
    }

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    33
    Beiträge
    1.192
    Hallo,
    du hast noch die CKDIV8-Fuse aktiv, d.h. der ATmega teilt die Taktfrequenz nochmal durch 8.
    Damit wird die Hardware auch nur 1/8 der im Programm eingestellten Baudrate erzeugen und im Terminal kommt Unsinn an.
    Deaktiviere diese Fuse und teste nochmal
    Grüße, Bernhard
    "Im Leben geht es nicht darum, gute Karten zu haben, sondern auch mit einem schlechten Blatt gut zu spielen." R.L. Stevenson

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    21.02.2015
    Beiträge
    65
    Habe jetzt in der Fuses den Haken bei CKDIV8 entfernt.

    Habe dann auch mal die Zeit bei den Test LED auf 500ms erhöht.
    Jetzt blinkt mal und zu mal eine LED extrem kurz, scheinbar undkontrolliert.
    Die Verbindung zu HTERm läss sich weiterhin aufbauen, erhalte jedoch keine Daten, bzw bekomme nichts angezeigt.
    Wenn ich den ISP Adpater entferne, und den Controller neu starte, leuctet dann per zufall eine LED dauerhaft.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Wie wärs, wenn du erst einmal die LEDs im 1s Takt zum blinken bringst? Dann können wir auch über die komplizierteren Themen reden.

    Code:
    #define F_CPU 14745600UL
    #include <util/delay.h>
    #include <avr/io.h>
    
    
    
    
    int main(void) {
    	DDRC = 0xFF;
    
    
    	while(1) {
    		PortC |= (1<<PC0) | (1<<PC1) | (1<<PC2);
    		_delay_ms(1000);
    		
    		PortC &= ~((1<<PC0) | (1<<PC1) | (1<<PC2));
    		_delay_ms(1000);
    	}
    	
    	return 0;
    }
    mfg

Ähnliche Themen

  1. USB Modul mit FT232 an PIC?
    Von bjacke im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 5
    Letzter Beitrag: 24.12.2009, 08:33
  2. FT232 und Atmega32 Probleme (gelöst=
    Von Martin. im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 09.10.2009, 11:21
  3. Atmega 32 über Usb programmieren
    Von Seppi1203 im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 11.01.2007, 22:42
  4. Probleme mit RS232-Verbindung über USB-Serial-Adapter
    Von steph im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 25.12.2005, 00:23
  5. Probleme I/O über usb>RS232
    Von Jenzi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 10.11.2004, 08:20

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress