Inzwischen habe ich einen Adapter zusammengebastelt und ein kleines Testprogramm geschrieben, allerdings funzt es noch nicht so richtig 
Wenn es denn nun funktionieren sollte, was kann der RP6 damit anfangen? Wenn er die Maus über den Boden schieben würde, was könnte er dann mit den Daten anstellen? Oder sollte man daraus einen Trackball basteln? Oder einen Fingerscannern? Fragen über Fragen...
Mein Adapter verwendet SCL(PC0) für Clock- und SDA(PC1) als Datenpin. Mit sleep(10) als extrem langsames Takten sieht der Code so aus:
Code:
/*Standardstecker
Pin Name Farbe Beschreibung
1 VCC Rot +5 V
2 D- Weiß Data - (Clock)
3 D+ Grün Data + (Daten)
4 GND Schw Masse
von: http://de.wikipedia.org/wiki/Univers...us#USB-Stecker
*/
#include "RP6RobotBaseLib.h"
#define clk_port PORTC
#define clk_ddr DDRC
#define clk_h clk_ddr |= 1; clk_port |= 1
#define clk_l clk_ddr |= 1; clk_port &= ~1
#define data_port PORTC
#define data_ddr DDRC
#define data_h data_ddr |= 2; data_port |= 2
#define data_l data_ddr |= 2; data_port &= ~2
#define data_z data_ddr &= ~2; data_port &= ~2
#define data_in (PINC & 2)
void init( void)
{
clk_h;
data_z;
}
void write_data(uint16_t data)
{
uint8_t bit=16;
while(bit--)
{
clk_l;
sleep(10);
if(data & (1<<bit)) {data_h;} else data_l;
sleep(10);
clk_h;
sleep(10);
}
}
uint16_t read_data(uint8_t adr)
{
uint8_t bit, data;
bit=8;
while(bit--)
{
clk_l;
sleep(10);
if(adr & (1<<bit)) {data_h;} else data_l;
sleep(10);
clk_h;
sleep(10);
}
data_z;
sleep(255);
bit=8;
data=0;
while(bit--)
{
clk_l;
sleep(10);
clk_h;
if(data_in) data |= (1<<bit);
sleep(10);
}
return(data);
}
int main(void)
{
initRobotBase();
init();
read_data(0);
mSleep(1000);
while(1)
{
writeInteger(read_data(0), 2);
writeString_P(" - ");
mSleep(1000);
writeInteger(read_data(2), 2);
writeString_P("\n\r");
//write_data(0x0a01 | (1<<15));
mSleep(1000);
}
return(0);
}
.. aber eben, es funktioniert nicht
Lesezeichen