inka
28.08.2010, 16:14
Hi allerseits,
Ich habe mir jetzt auch das M32 Modul gekauft und möchte in Zukunft versuchen mich in der Programmierung darauf zu konzentrieren...
In einem der Bespiele sind diese Code-schnipsel für das Ausführen von z.B. des move Befehls durch den Base-Prozessor verantwortlich:
#include "RP6I2CmasterTWI.h" // I2C Master Library
#include "RP6Control_I2CMasterLib.h" //RP6 Control I2C Master library
void watchDogRequest(void)
{
static uint8_t heartbeat2 = false;
if(heartbeat2)
{
clearPosLCD(0, 14, 1);
heartbeat2 = false;
}
else
{
setCursorPosLCD(0, 14);
writeStringLCD_P("#");
heartbeat2 = true;
}
}
// I2C Requests:
/**
* The I2C_requestedDataReady Event Handler
*/
void I2C_requestedDataReady(uint8_t dataRequestID)
{
checkRP6Status(dataRequestID);
}
// I2C Error handler
/**
* This function gets called automatically if there was an I2C Error like
* the slave sent a "not acknowledge" (NACK, error codes e.g. 0x20 or 0x30).
*/
void I2C_transmissionError(uint8_t errorState)
{
writeString_P("\nI2C ERROR - TWI STATE: 0x");
writeInteger(errorState, HEX);
writeChar('\n');
}
// ---------------------------------------
WDT_setRequestHandler(watchDogRequest);
// ---------------------------------------
// Init TWI Interface:
I2CTWI_initMaster(100);
I2CTWI_setRequestedDataReadyHandler(I2C_requestedD ataReady);
I2CTWI_setTransmissionErrorHandler(I2C_transmissio nError);
// ---------------------------------------
I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_ACS_POWER, ACS_PWR_MED);
I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT, true);
I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT_RQ, true);
In der BASE ist „RP6Base_I2CSlave.hex“ geladen.
Fragen:
- Wäre es vorstellbar diesen Code in eine Funktion, meinetwegen „void master-slave(void)„ auszulagern und bei Bedarf als „master-slave();“ in ein Programm (Hauptschleife) ähnlich wie z.B. „task_motionControl();“ einzutragen?
- wäre/ist mit dem einbinden der obigen Code-schnipsel sichergestellt, dass alle in der BASE-lib-Dateien vorhandene Funktionen zwar in/durch das Programm im Controlmodul initiiert, aber im Base-Prozessor ausgeführt werden, oder ist das viel komplizierter als ich es mir hier vorstelle?
Ich habe mir jetzt auch das M32 Modul gekauft und möchte in Zukunft versuchen mich in der Programmierung darauf zu konzentrieren...
In einem der Bespiele sind diese Code-schnipsel für das Ausführen von z.B. des move Befehls durch den Base-Prozessor verantwortlich:
#include "RP6I2CmasterTWI.h" // I2C Master Library
#include "RP6Control_I2CMasterLib.h" //RP6 Control I2C Master library
void watchDogRequest(void)
{
static uint8_t heartbeat2 = false;
if(heartbeat2)
{
clearPosLCD(0, 14, 1);
heartbeat2 = false;
}
else
{
setCursorPosLCD(0, 14);
writeStringLCD_P("#");
heartbeat2 = true;
}
}
// I2C Requests:
/**
* The I2C_requestedDataReady Event Handler
*/
void I2C_requestedDataReady(uint8_t dataRequestID)
{
checkRP6Status(dataRequestID);
}
// I2C Error handler
/**
* This function gets called automatically if there was an I2C Error like
* the slave sent a "not acknowledge" (NACK, error codes e.g. 0x20 or 0x30).
*/
void I2C_transmissionError(uint8_t errorState)
{
writeString_P("\nI2C ERROR - TWI STATE: 0x");
writeInteger(errorState, HEX);
writeChar('\n');
}
// ---------------------------------------
WDT_setRequestHandler(watchDogRequest);
// ---------------------------------------
// Init TWI Interface:
I2CTWI_initMaster(100);
I2CTWI_setRequestedDataReadyHandler(I2C_requestedD ataReady);
I2CTWI_setTransmissionErrorHandler(I2C_transmissio nError);
// ---------------------------------------
I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_ACS_POWER, ACS_PWR_MED);
I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT, true);
I2CTWI_transmit3Bytes(I2C_RP6_BASE_ADR, 0, CMD_SET_WDT_RQ, true);
In der BASE ist „RP6Base_I2CSlave.hex“ geladen.
Fragen:
- Wäre es vorstellbar diesen Code in eine Funktion, meinetwegen „void master-slave(void)„ auszulagern und bei Bedarf als „master-slave();“ in ein Programm (Hauptschleife) ähnlich wie z.B. „task_motionControl();“ einzutragen?
- wäre/ist mit dem einbinden der obigen Code-schnipsel sichergestellt, dass alle in der BASE-lib-Dateien vorhandene Funktionen zwar in/durch das Programm im Controlmodul initiiert, aber im Base-Prozessor ausgeführt werden, oder ist das viel komplizierter als ich es mir hier vorstelle?