Serie_9
18.07.2013, 20:00
Hallo an alle!
Versuch jetzt schon seit geraumer Zeit einen Atmega328 der mit Bascom als Master programmiert ist mit einem Arduino Pro Mini (ist der Slave) zu verbinden.
Sie kommunizieren im Prinzip auch mit einander, ich sende mehrere Bytes vom Slave an den Master, aber beim Master ist immer nur das erst Byte beschrieben und dann auch mit dem vom Slave zuletzt gesendeten Byte.
Kenne mich noch nicht all zu sehr mit Arduino aus, hab mehr erfahrung in Bascom, bin aber hier auf die Arduino IDE angewiesen weil ich eine lib verwende die es nur im Arduino gibt.
Hab jetzt schon verschiedene Sachen im Arudino ausprobiert:
- kurze warte Zeit nach jedem wire.write
- string gebildet und den dann gesendet
- array erstellt und gesendet
- zu erst ein byte vom Master gesendet, welches bestimmt welches byte der Slave senden soll, also immer
nur ein byte gesendet pro kommunikation
aber alles keinen Erfolg gebracht:(
Slave Routine(Arduino): (ohne Hauptschleife)
--------------------------------------------------------------------------------
#include <Wire.h>
#include <PS3BT.h>
USB Usb;
BTD Btd(&Usb);
PS3BT PS3(&Btd);
boolean printTemperature;
boolean printAngle;
//byte Befehle;
//byte Befehle2;
int Befehle[2];
byte AnalogLeftX;
byte AnalogLeftY;
byte AnalogRightX;
byte AnalogRightY;
byte zahler=1;
void setup()
{
Wire.begin(115);
Wire.onRequest(SCHREIBEN);
Serial.begin(115200);
if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start"));
while(1); //halt
}
Serial.print(F("\r\nPS3 Bluetooth Library Started"));
}
void SCHREIBEN()
{
Wire.write(Befehle[1]);
Wire.write(Befehle[2]);
//Wire.write(AnalogLeftY);
//Wire.write(AnalogRightX);
//Wire.write(AnalogRightY);
//Wire.write(AnalogRightX);
bitWrite(Befehle[1],3,0);
}
Master(Bascom Ausschnitt):
-------------------------------------------------------------------------------------
$regfile = "m328def.dat "
$crystal = 20000000
$lib "i2c_twi.lib"
Config Twi = 100000
Twcr = &B00000100
Do
I2cstart
I2cwbyte Ps3_controller
I2crbyte Ps3_befehle , Ack
I2crbyte Ps3_befehle2 , Nack
'I2crbyte Ps3_leftx_analog , Ack
'I2crbyte Ps3_lefty_analog , Ack
'I2crbyte Ps3_rightx_analog , Ack
'I2crbyte Ps3_righty_analog , Nack
I2cstop
Loop
End
Versuch jetzt schon seit geraumer Zeit einen Atmega328 der mit Bascom als Master programmiert ist mit einem Arduino Pro Mini (ist der Slave) zu verbinden.
Sie kommunizieren im Prinzip auch mit einander, ich sende mehrere Bytes vom Slave an den Master, aber beim Master ist immer nur das erst Byte beschrieben und dann auch mit dem vom Slave zuletzt gesendeten Byte.
Kenne mich noch nicht all zu sehr mit Arduino aus, hab mehr erfahrung in Bascom, bin aber hier auf die Arduino IDE angewiesen weil ich eine lib verwende die es nur im Arduino gibt.
Hab jetzt schon verschiedene Sachen im Arudino ausprobiert:
- kurze warte Zeit nach jedem wire.write
- string gebildet und den dann gesendet
- array erstellt und gesendet
- zu erst ein byte vom Master gesendet, welches bestimmt welches byte der Slave senden soll, also immer
nur ein byte gesendet pro kommunikation
aber alles keinen Erfolg gebracht:(
Slave Routine(Arduino): (ohne Hauptschleife)
--------------------------------------------------------------------------------
#include <Wire.h>
#include <PS3BT.h>
USB Usb;
BTD Btd(&Usb);
PS3BT PS3(&Btd);
boolean printTemperature;
boolean printAngle;
//byte Befehle;
//byte Befehle2;
int Befehle[2];
byte AnalogLeftX;
byte AnalogLeftY;
byte AnalogRightX;
byte AnalogRightY;
byte zahler=1;
void setup()
{
Wire.begin(115);
Wire.onRequest(SCHREIBEN);
Serial.begin(115200);
if (Usb.Init() == -1) {
Serial.print(F("\r\nOSC did not start"));
while(1); //halt
}
Serial.print(F("\r\nPS3 Bluetooth Library Started"));
}
void SCHREIBEN()
{
Wire.write(Befehle[1]);
Wire.write(Befehle[2]);
//Wire.write(AnalogLeftY);
//Wire.write(AnalogRightX);
//Wire.write(AnalogRightY);
//Wire.write(AnalogRightX);
bitWrite(Befehle[1],3,0);
}
Master(Bascom Ausschnitt):
-------------------------------------------------------------------------------------
$regfile = "m328def.dat "
$crystal = 20000000
$lib "i2c_twi.lib"
Config Twi = 100000
Twcr = &B00000100
Do
I2cstart
I2cwbyte Ps3_controller
I2crbyte Ps3_befehle , Ack
I2crbyte Ps3_befehle2 , Nack
'I2crbyte Ps3_leftx_analog , Ack
'I2crbyte Ps3_lefty_analog , Ack
'I2crbyte Ps3_rightx_analog , Ack
'I2crbyte Ps3_righty_analog , Nack
I2cstop
Loop
End