- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 14

Thema: Datenübertragung von pc zu zwei Motorsteuerungen über der Atmega644p

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    31.01.2012
    Beiträge
    26

    Datenübertragung von pc zu zwei Motorsteuerungen über der Atmega644p

    Guten Tag,

    ich versuche gerade Zeile pro Zeile Positionskoordinaten (X,Y) einer Textdatei von PC zu zwei identischen Motorsteuerungen über ein Mikrocontroller zu senden. Die PositionKoordinaten(X,Y) der Textdatei sind in ASCii und werden in dieser Form zu den zwei Motorsteuerungen gesendet. Der Atmega 644p hat zwei USARTS(USART0 und USART1). USART0(RS232) dient zum Empfangen die Positionskoordinaten, die vom PC gesendet wurde. Dann wird über USART1(RS485) die empfangenen Positionskoordinaten zu den beiden Motorsteuerungen gesendet. Das Programm zum Senden der Positionskoordinaten von PC zum Atmega 644p wurde in c++ geschrieben und liegt ganz unten meinem Beitrag.
    Die Positionskoordinaten, die von PC zu den beiden Motorsteuerungen über der Mikrocontroller gesendet werden, sind in folgender Form: "DX,YF".
    D ---> Anfang des Befehls
    X ---> Position auf die x-Achse in ASCii
    ',' ---> Trennzeichnen dient zur Unterscheidung von X und Y- Position
    Y ---> Position auf die y-Achse in ASCii
    F ---> Ende des Befehls.

    Wenn ich die Positionskoordinaten(X,Y) der Textdatei Zeile pro Zeile zum Atmega644p sende, läuft alles wunderbar.
    Aber wenn ich auf einmal alle Positionskoordinaten der Textdatei zum Atmega644p sende, wird nur ein, zwei oder drei Positionskoordinaten ausgeführt. Aber die Andere Positionskoordinaten(X,Y) werden nicht ausgeführt. Ich denke, etwas läuft bei meinem Atmega644p-Programm schief, vielleicht mein Empfangsinterrupt ISR(USART0_RX_vect). Ich komme einfach nicht klar. Mein Atmega644p-Programm liegt im Anhang.

    Ich wäre sehr dankbar, wenn jemand mir hilft.

    Danke im Voraus.

    c++ Programm (PC Programm):
    Code:
    #include <fstream>
    #include <string>
    #include <iostream>
    #include <sstream>
    
    #include <Windows.h>
    
    using namespace std;
    
    // Senden eines Befehls Charakter pro Charakter und man test das Empfangen eines  ACK
    static bool SendungBefehl(HANDLE h, const char *s)
    {
    	DWORD	dummy;
    	char	c;
    
    	// Wenn es seit dem letzten Befehl Antorten  zu lesen gab,
    	// Zu spät, alles muss gelöscht werden.
    	PurgeComm(h, PURGE_RXCLEAR);
    	for (int i = 0; s[i] != 0; ++i)
    	     if (!WriteFile(h, s + i, 1, &dummy, 0))
    		      cout << "Error de WriteFile" << endl;
                          return false;
    	     if (!ReadFile(h, &c, 1, &dummy, 0))
                    cout << "Erreur de ReadFile (time-out)" << endl;
    		return false;	// Time-out
    
            cout << "Réponse : " << (int)c << endl;
    	return c == '\x06';	// ACK
    }
    
    int main(void)
    {
    	ifstream file("koordinaten.txt", ios::in | ios::binary);
    	string line;
    
    	if (!file)
    	{
    		cout << "Error: Die Öffnung der Textdatein in Lesen-Modus ist unmöglich" << endl;
    		return 1;
    	}
    	// Öffnung des seriellen Ports COM1
    	HANDLE h = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    	if (h == INVALID_HANDLE_VALUE)
    	{
    		cout << "Error: Öffnung der seriellen Port ist unmöglich" << endl;
    		return 1;
    	}
    	DCB dcb = { 0 };
    	BOOL dcbOk = GetCommState(h, &dcb);
    	dcb.BaudRate = CBR_115200;
    	dcb.ByteSize = 8;
    	dcb.Parity = NOPARITY;
    	dcb.StopBits = TWOSTOPBITS;
    	dcbOk = SetCommState(h, &dcb);
    	COMMTIMEOUTS timeouts = { 0 };
    	timeouts.ReadIntervalTimeout = 100;
    	timeouts.ReadTotalTimeoutMultiplier = 100;
    	timeouts.ReadTotalTimeoutConstant = 100;
    	timeouts.WriteTotalTimeoutMultiplier = 100;
    	timeouts.WriteTotalTimeoutConstant = 100;
    	if (!SetCommTimeouts(h, &timeouts))
    	{
    		cout << "Erreur: SetCommTimeouts" << endl;
    		return 1;
    	}
    	// Lesen Zeile pro Zeile
    	while (getline(file, line))
    	{
    		int x;					// x, y von der Textdatei
    		int y;
    		int x_steps;			// x, y in Schrittmotor
    		int y_steps;
    		stringstream input;		// Eingangsfluß (Eine Zeile der Textdatei)
    		stringstream output;	// Ausgangsfluß (Ein Koordinatenpaar)
    
    		// Eine Zeile wird ein Eingangsfluß sein
    		input.str(line);
    		// Extraktion von X et du Y.
    		if (input.get() != 'X')
    			continue;
    		input >> x;
    		if (input.get() != 'Y')
    			continue;
    		input >> y;
    		// Konvertierung von Positionkoordinaten(X,Y) in Schrittmotor
    		
    		x_steps = x * 127 / 500;
    		y_steps = y * 127 / 500;
    		// Sendung der PositionsKoordinaten Zeile pro Zeile über der serielle Port (COM1)
    		output << 'D';
    		output << x_steps;
    		output << ',';
    		output << y_steps;
    		output << 'F';
    		cout << "Sendung von : " << output.str() << endl;
    		if (SendungBefehl(h, output.str().c_str()))
    			cout << "OK" << endl;
    		else
    			cout << "ERROR" << endl;
    	}
    	CloseHandle(h);
    	return 0;
    }
    Angehängte Dateien Angehängte Dateien

Ähnliche Themen

  1. Datenübertragung über Funk
    Von bmtil im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 0
    Letzter Beitrag: 19.09.2012, 12:35
  2. Datenübertragung von RP5 zum PC über IR
    Von Bigboy im Forum Robby CCRP5
    Antworten: 42
    Letzter Beitrag: 29.06.2008, 20:07
  3. Antworten: 21
    Letzter Beitrag: 12.02.2007, 13:41
  4. Datenübertragung über RXD und TXD
    Von Heideltrudel im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 13
    Letzter Beitrag: 25.05.2006, 11:38
  5. Datenübertragung über 27 MhZ
    Von Xtreme im Forum Elektronik
    Antworten: 25
    Letzter Beitrag: 22.08.2005, 09:59

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress