Archiv verlassen und diese Seite im Standarddesign anzeigen : RP6 M256 Datenaustausch Problem
Hallo ,
Ich möchte ein Programm für das Wlanboard schreiben mit dem ich über das WIFI-Terminal einen Befehl schreiben kann und der RP6 dann etwas macht.
z.B wenn ich eine Taste auf dem PC drücke soll er über WLAN dem RP6 einen Befehl geben und dieser soll dann z.B eine Status-LED an machen.
Ich habe mir schon die Beispielprogramme RP6M256_11_WIFI_REMOTE_1 und RP6M256_11_WIFI_REMOTE_2 angeguckt aber ich verstehe nicht wie dort auf die eingabe der Tastertur reagiert wird.
Ich würde micht um Hilfe sehr freuen.
MFG Patrick
Hallo Patrick,
ich habe mal ein kleines Programm angehängt, was NUR die Texteingabe im WIFI-Terminal und die Ausgabe auf dem LCD zeigt.
/*
* ************************************************** **************************
* RP6 ROBOT SYSTEM - RP6 CONTROL M256 Examples
* ************************************************** **************************
* Example: WIFI Input Example
* Author(s): Dirk
* ************************************************** **************************
* Description:
* With this program you may test the text input function of the RobotLoader
* WIFI terminal. If you enter a test string (max. 16 characters), this string
* is displayed on line 1 of the LCD.
* There is a bug in RobotLoader 2.3c: If you enter upper case letters in the
* WIFI terminal, they are received via WIFI as lower case letters!
*
* ################################################## ##########################
* The Robot does NOT move in this example! You can simply put it on a table
* next to your PC and you should connect it to the PC via the USB Interface!
* You should also connect to it via WIFI.
* ################################################## ##########################
* ************************************************** **************************
*/
/************************************************** ***************************/
// Includes:
#include "RP6M256Lib.h" // The RP6 M256 Library.
// Always needs to be included!
/************************************************** ***************************/
// Variables:
// Reception buffer for the function getInputLine_WIFI():
char receiveBufferWifi[UART_RECEIVE_BUFFER_SIZE_WIFI + 1];
/************************************************** ***************************/
// WIFI receive functions:
/**
* Get chars of an input line from the WIFI.
*
* Returns 0 (false), if the WIFI receive buffer is empty
* OR a character of the input line has been received.
* Returns 1, if the whole input line has been received
* (with a "new line" character at the end).
* Returns 2, if the WIFI receive buffer overflows.
* The input line is stored in the receiveBufferWifi array.
*
*/
uint8_t getInputLine_WIFI(void)
{static uint16_t buffer_pos = 0;
if(getBufferLength_WIFI()) {
receiveBufferWifi[buffer_pos] = readChar_WIFI();
if((receiveBufferWifi[buffer_pos] == '\n')
|| (receiveBufferWifi[buffer_pos] == '\r')) {
receiveBufferWifi[buffer_pos] = '\0';
buffer_pos = 0;
return 1;
}
else if(buffer_pos >= UART_RECEIVE_BUFFER_SIZE_WIFI) {
receiveBufferWifi[UART_RECEIVE_BUFFER_SIZE_WIFI] = '\0';
buffer_pos = 0;
return 2;
}
buffer_pos++;
}
return 0;
}
/**
* Get a complete input line from the WIFI.
*
* This function waits for a whole input line from the WIFI.
* The input line is stored in the receiveBufferWifi array.
* The function is blocking until one of the two following
* conditions occurs:
* - A "new line" character has been received at the end of
* the input line.
* - The WIFI receive buffer overflows.
*
*/
void enterString_WIFI(void)
{
while(!getInputLine_WIFI());
}
/************************************************** ***************************/
// Main function - The program starts here:
int main(void)
{
initRP6M256(); // Always call this first! The Processor will not work
// correctly otherwise.
initLCD(); // Initialize the LC-Display (LCD)
// Always call this before using the LCD!
setLEDs(0b0000);
clearLCD(); // Clear the whole LCD Screen
/************************************************** ***************************/
// Main test program:
while(true)
{
writeString_P_WIFI("\n\n");
writeString_P_WIFI("\n|============================|");
writeString_P_WIFI("\n| WIFI: Input a test string |");
writeString_P_WIFI("\n| (max. 16 characters) |\n");
enterString_WIFI();
// Show the test string on line 1 of the LCD:
clearLCD();
writeStringLCD(receiveBufferWifi);
mSleep(10000);
writeString_P_WIFI("\n\n");
}
/************************************************** ***************************/
// End of main:
return 0;
}
Jetzt klarer?
Hallo Dirk,
Prima danke das Programm hat mit weiter geholfen jetzt hab ich es verstanden :D
Danke
MFG Patrick
Hallo,
Jetzt hab ich noch eine Frage,
Ich möchte über das WIFI-Board den PORTA |= E_INT1 auf high setzen.
Wie kann ich das machen ?
MFG Patrick
E_INT1 auf der RP6Base ist der Portpin PA4.
Der ist über den XBUS mit PJ3 (Bezeichnung: INT1_PI12) der M256 verbunden.
Wenn du diesen Portpin auf der M256 ein-/ausschaltest, kannst du das auf der Base an PA4 "empfangen".
Hallo Dirk,
Danke für die Antwort ich habe versucht den Port so anzusteuern,
if((receiveBufferWifi[buffer_pos] == 'i'))
{
setLEDs(0b1111);
PORTJ |= INT1_PI12;
}
aber es funktioniert nicht. Es gehen nur die LEDs auf dem WIFI-board an.
Was könnte ich falsch gemacht haben ?
MFG Patrick
Hallo,
frohes Neues erstmal ;)
Warum willst Du denn überhaupt mit dem M256 den INT1 auf dem XBUS steuern?
Das ist eigentlich genau andersherum gedacht - die Base oder andere Slaves signalisieren damit Statusänderungen an den Bus MASTER, der in diesem Fall natürlich die M256 ist.
Natürlich ist der Pin auf der Base als AUSGANG konfiguriert - damit empfängt der MEGA32 auf der RP6Base Platine also gar nix (wenn Du es nicht geändert hast, aber da musst Du schon das Programm herzeigen damit wir hier helfen können).
Auf der M256 ist es ein Eingang.
Vorsicht: Eingang an Eingang und Ausgang an Eingang sind OK, aber Ausgang an Ausgang = Kurzschluss!
Die INT Signale auf dem XBUS sind für OpenDrain Betrieb ausgelegt. Da gibts nen externen Pullup Widerstand und der Pin schaltet nur zwischen Ausgang+LOW (da wird aktiv auf Masse geschaltet) und Eingang+HIGH (= nur Pullup Widerstand aktiv, INT1 wird "schwach" auf +5V Pegel gezogen) um. So können mehrere Slaves am Bus die gleiche Signalleitung nutzen.
Ist für einen Anfänger evtl. etwas verwirrend, daher mein Rat:
Wenn Du einfach nur mal üben willst wie man die I/Os setzen kann, probier doch erstmal lieber die Pins mit den LEDs manuell zu setzen, d.H. ohne die setLED Funktion zu nutzen.
Oder bau irgendwas passendes an einen der I/O Steckverbinder dran.
MfG,
SlyD
PS:
Alle ungenutzten Pins auf dem M256 Modul (abgesehen vom LCD Anschluss) sind standardmäßig als Eingänge konfiguriert.
Die muss man natürlich über die DDRx Register zunächst als Ausgang konfigurieren um damit was schalten zu können.
Hallo,
frohes Neues ;)
Ich habe zur Zeit auf der Base an den Ports INT1,SCL,SDA LEDs als Beleuchtung montiert, und wollte diese jetzt von dem WIFI-board steuern.
Da INT1 auf der Base für Statusänderungen genutzt wir montiere ich die LEDs glaub ich auf dem WIFI-board das dürfte einfacher sein oder ?
MFG Patrick
Ich habe zur Zeit auf der Base an den Ports INT1,SCL,SDA LEDs als Beleuchtung montiert,
Ahja, die sollten dann mal zu den I/O Ports auf der M256 umziehen. Der XBUS ist zwar für sowas nutzbar, aber sobald man eine Erweiterung wie M32 oder M256 montiert hat sollte man das wieder auf die normale Funktion umstellen sonst kann man ja die I2C Kommunikation nicht nutzen.
MfG,
SlyD
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.