fix joyswapped with I2C keyboard issue

pull/9/head
jean-marcharvengt 2020-02-28 21:53:43 +01:00
rodzic d4ea70b196
commit 8b0c601006
26 zmienionych plików z 507 dodań i 55 usunięć

Wyświetl plik

@ -3,7 +3,7 @@
(general
(thickness 1.6)
(drawings 12)
(tracks 1128)
(tracks 1131)
(zones 0)
(modules 1)
(nets 1)
@ -909,8 +909,8 @@
(segment (start 151.003 28.956) (end 151.003 27.686) (width 0.8) (layer B.Cu) (net 0))
(via (at 135.636 45.466) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(via (at 133.604 45.466) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(via (at 138.43 52.07) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(via (at 138.43 54.61) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(via (at 138.43 51.435) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(via (at 138.43 55.245) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(segment (start 151.003 44.196) (end 151.003 42.926) (width 0.8) (layer B.Cu) (net 0))
(segment (start 148.463 44.196) (end 148.463 42.926) (width 0.8) (layer B.Cu) (net 0))
(segment (start 47.371 94.234) (end 48.768 94.234) (width 0.6) (layer B.Cu) (net 0))
@ -1104,7 +1104,6 @@
(segment (start 146.685 49.53) (end 146.685 51.689) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 164.465 49.53) (end 164.465 48.257208) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 164.465 48.257208) (end 163.832792 47.625) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 145.415 47.625) (end 144.653 48.387) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 172.085 57.658) (end 172.085 57.404) (width 0.59944) (layer B.Cu) (net 0))
(via (at 166.243 30.734) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
(via (at 168.783 30.734) (size 1.8) (drill 0.4) (layers F.Cu B.Cu) (net 0))
@ -1322,13 +1321,8 @@
(segment (start 182.499 55.88) (end 184.15 55.88) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 184.15 50.8) (end 185.166 50.8) (width 0.59944) (layer F.Cu) (net 0))
(segment (start 184.15 53.34) (end 185.293 53.34) (width 0.59944) (layer F.Cu) (net 0))
(segment (start 145.415 47.625) (end 138.43 54.61) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 131.318 47.498) (end 131.318 46.609) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 138.43 54.61) (end 131.318 47.498) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 131.318 46.609) (end 131.318 33.274) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 137.530001 51.170001) (end 133.604 47.244) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 138.43 52.07) (end 137.530001 51.170001) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 133.604 45.466) (end 133.604 47.244) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 180.467 31.623) (end 180.477999 31.633999) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 152.677584 26.010136) (end 152.677584 26.011416) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 148.59 32.258) (end 172.085 32.258) (width 0.59944) (layer B.Cu) (net 0))
@ -1354,5 +1348,14 @@
(segment (start 172.974 27.432) (end 173.736 27.432) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 178.977583 28.098791) (end 177.421792 26.543) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 178.977583 28.920137) (end 178.977583 28.098791) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 133.604 47.244) (end 133.604 45.466) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 136.895001 50.535001) (end 133.604 47.244) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 137.530001 50.535001) (end 136.895001 50.535001) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 138.43 51.435) (end 137.530001 50.535001) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 131.318 48.133) (end 131.318 47.498) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 138.43 55.245) (end 131.318 48.133) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 144.907 48.768) (end 144.907 48.133) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 138.43 55.245) (end 144.907 48.768) (width 0.59944) (layer B.Cu) (net 0))
(segment (start 145.415 47.625) (end 144.907 48.133) (width 0.59944) (layer B.Cu) (net 0))
)

Wyświetl plik

@ -350,7 +350,7 @@ int emu_SwapJoysticks(int statusOnly) {
int emu_GetPad(void)
{
return(keypadval|((joySwapped?1:0)<<7));
return(keypadval/*|((joySwapped?1:0)<<7)*/);
}
int emu_ReadKeys(void)

Wyświetl plik

@ -350,7 +350,7 @@ int emu_SwapJoysticks(int statusOnly) {
int emu_GetPad(void)
{
return(keypadval|((joySwapped?1:0)<<7));
return(keypadval/*|((joySwapped?1:0)<<7)*/);
}
int emu_ReadKeys(void)
@ -479,9 +479,9 @@ int emu_ReadI2CKeyboard(void) {
if (b != 0xff) hitindex=i;
msg[i++] = b;
}
if (hitindex >=0 ) {
/*
/*
Serial.println(msg[0], BIN);
Serial.println(msg[1], BIN);
Serial.println(msg[2], BIN);
@ -491,7 +491,7 @@ int emu_ReadI2CKeyboard(void) {
Serial.println(msg[6], BIN);
*/
unsigned short match = (~msg[hitindex])&0x00FF | (hitindex<<8);
//Serial.println(match,HEX);
Serial.println(match,HEX);
for (i=0; i<sizeof(i2ckeys); i++) {
if (match == i2ckeys[i]) {
//Serial.println((int)keys[i]);

Wyświetl plik

@ -350,7 +350,7 @@ int emu_SwapJoysticks(int statusOnly) {
int emu_GetPad(void)
{
return(keypadval|((joySwapped?1:0)<<7));
return(keypadval/*|((joySwapped?1:0)<<7)*/);
}
int emu_ReadKeys(void)

Wyświetl plik

@ -350,7 +350,7 @@ int emu_SwapJoysticks(int statusOnly) {
int emu_GetPad(void)
{
return(keypadval|((joySwapped?1:0)<<7));
return(keypadval/*|((joySwapped?1:0)<<7)*/);
}
int emu_ReadKeys(void)

Wyświetl plik

@ -353,7 +353,7 @@ int emu_SwapJoysticks(int statusOnly) {
int emu_GetPad(void)
{
return(keypadval|((joySwapped?1:0)<<7));
return(keypadval/*|((joySwapped?1:0)<<7)*/);
}
int emu_ReadKeys(void)

Wyświetl plik

@ -352,7 +352,7 @@ int emu_SwapJoysticks(int statusOnly) {
int emu_GetPad(void)
{
return(keypadval|((joySwapped?1:0)<<7));
return(keypadval/*|((joySwapped?1:0)<<7)*/);
}
int emu_ReadKeys(void)
@ -480,9 +480,9 @@ int emu_ReadI2CKeyboard(void) {
while (Wire.available() && (i<7) ) { // slave may send less than requested
byte b = Wire.read(); // receive a byte
if (b != 0xff) hitindex=i;
msg[i++] = b;
msg[i++] = b;
}
if (hitindex >=0 ) {
/*
Serial.println(msg[0], BIN);
@ -1411,10 +1411,11 @@ void emu_init(void)
emu_InitJoysticks();
#ifdef SWAP_JOYSTICK
joySwapped = true;
joySwapped = true;
#else
joySwapped = false;
#endif
joySwapped = false;
#endif
readCallibration();
if ((tft.isTouching()) || (emu_ReadKeys() & MASK_JOY2_BTN) ) {
@ -1442,7 +1443,7 @@ void emu_init(void)
Serial.println(msg[4], BIN);
Serial.println(msg[5], BIN);
Serial.println(msg[6], BIN);
*/
*/
if ( (msg[0] == 0xff) && (msg[1] == 0xff) &&
(msg[2] == 0xff) && (msg[3] == 0xff) &&
(msg[4] == 0xff) && (msg[5] == 0xff) && (msg[6] == 0xff)) {

Wyświetl plik

@ -10,8 +10,8 @@
#define EXTRA_HEAP 0x10
// Title: < >
#define TITLE " AtariST Emulator "
// Title: < >
#define TITLE " AtariST Emulator "
#define ROMSDIR "/st"
#define emu_Init(ROM) {ast_Init(); ast_Start(ROM);}

Wyświetl plik

@ -350,7 +350,7 @@ int emu_SwapJoysticks(int statusOnly) {
int emu_GetPad(void)
{
return(keypadval|((joySwapped?1:0)<<7));
return(keypadval/*|((joySwapped?1:0)<<7)*/);
}
int emu_ReadKeys(void)

Wyświetl plik

@ -350,7 +350,7 @@ int emu_SwapJoysticks(int statusOnly) {
int emu_GetPad(void)
{
return(keypadval|((joySwapped?1:0)<<7));
return(keypadval/*|((joySwapped?1:0)<<7)*/);
}
int emu_ReadKeys(void)

Wyświetl plik

@ -350,7 +350,7 @@ int emu_SwapJoysticks(int statusOnly) {
int emu_GetPad(void)
{
return(keypadval|((joySwapped?1:0)<<7));
return(keypadval/*|((joySwapped?1:0)<<7)*/);
}
int emu_ReadKeys(void)

Wyświetl plik

@ -350,7 +350,7 @@ int emu_SwapJoysticks(int statusOnly) {
int emu_GetPad(void)
{
return(keypadval|((joySwapped?1:0)<<7));
return(keypadval/*|((joySwapped?1:0)<<7)*/);
}
int emu_ReadKeys(void)

Wyświetl plik

@ -118,7 +118,7 @@ int emu_SwapJoysticks(int statusOnly) {
int emu_GetPad(void)
{
return(keypadval|((joySwapped?1:0)<<7));
return(keypadval/*|((joySwapped?1:0)<<7)*/);
}
int emu_ReadKeys(void)

Wyświetl plik

@ -350,7 +350,7 @@ int emu_SwapJoysticks(int statusOnly) {
int emu_GetPad(void)
{
return(keypadval|((joySwapped?1:0)<<7));
return(keypadval/*|((joySwapped?1:0)<<7)*/);
}
int emu_ReadKeys(void)

Wyświetl plik

@ -350,7 +350,7 @@ int emu_SwapJoysticks(int statusOnly) {
int emu_GetPad(void)
{
return(keypadval|((joySwapped?1:0)<<7));
return(keypadval/*|((joySwapped?1:0)<<7)*/);
}
int emu_ReadKeys(void)

Wyświetl plik

@ -350,7 +350,7 @@ int emu_SwapJoysticks(int statusOnly) {
int emu_GetPad(void)
{
return(keypadval|((joySwapped?1:0)<<7));
return(keypadval/*|((joySwapped?1:0)<<7)*/);
}
int emu_ReadKeys(void)

Wyświetl plik

@ -350,7 +350,7 @@ int emu_SwapJoysticks(int statusOnly) {
int emu_GetPad(void)
{
return(keypadval|((joySwapped?1:0)<<7));
return(keypadval/*|((joySwapped?1:0)<<7)*/);
}
int emu_ReadKeys(void)

Wyświetl plik

@ -350,7 +350,7 @@ int emu_SwapJoysticks(int statusOnly) {
int emu_GetPad(void)
{
return(keypadval|((joySwapped?1:0)<<7));
return(keypadval/*|((joySwapped?1:0)<<7)*/);
}
int emu_ReadKeys(void)

Wyświetl plik

@ -350,7 +350,7 @@ int emu_SwapJoysticks(int statusOnly) {
int emu_GetPad(void)
{
return(keypadval|((joySwapped?1:0)<<7));
return(keypadval/*|((joySwapped?1:0)<<7)*/);
}
int emu_ReadKeys(void)

Wyświetl plik

@ -350,7 +350,7 @@ int emu_SwapJoysticks(int statusOnly) {
int emu_GetPad(void)
{
return(keypadval|((joySwapped?1:0)<<7));
return(keypadval/*|((joySwapped?1:0)<<7)*/);
}
int emu_ReadKeys(void)

Wyświetl plik

@ -5,8 +5,8 @@
static byte msg[7];
// rows are inputs
//static byte rows[] = {11, 10, 9, 12, 13, 8, 7, 6, 5, 4}; // {2,3,4};
static byte rows[] = {4, 5, 6, 7, 8, 13, 12, 9, 10, 11}; // {2,3,4};
// VERI OLD static byte rows[] = {11, 10, 9, 12, 13, 8, 7, 6, 5, 4}; // VERI OLD
static byte rows[] = {4, 5, 6, 7, 8, 13, 12, 9, 10, 11}; // Teensy4 ILI 9341 + keyboard
const int rowCount = sizeof(rows) / sizeof(rows[0]);
// cols are outputs

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -0,0 +1,187 @@
#include <Wire.h>
static byte msg[7];
// VERI OLD static byte rows[] = {11, 10, 9, 12, 13, 8, 7, 6, 5, 4}; // VERI OLD
// ILI 9341 static byte rows[] = {4, 5, 6, 7, 8, 13, 12, 9, 10, 11}; // Teensy4 ILI 9341 + keyboard
#define REV_DIODE 1
#ifdef REV_DIODE
// rows are inputs
static byte rows[] = {A3, A2, A1, A0, 3}; //{8,9,10,11};
const int rowCount = sizeof(rows) / sizeof(rows[0]);
// cols are outputs
static byte cols[] = {9, 10, 8, 7, 6, 5, 4, 2, 1, 0 }; // Teensy4 ST7789 + keyboard
const int colCount = sizeof(cols) / sizeof(cols[0]);
#else
// rows are inputs
static byte rows[] = {9, 10, 8, 7, 6, 5, 4, 2, 1, 0 }; // Teensy4 ST7789 + keyboard
const int rowCount = sizeof(rows) / sizeof(rows[0]);
// cols are outputs
static byte cols[] = {A3, A2, A1, A0, 3}; //{8,9,10,11};
const int colCount = sizeof(cols) / sizeof(cols[0]);
#endif
#ifdef REV_DIODE
static byte keys[rowCount][colCount];
#else
static byte keys[colCount][rowCount];
#endif
void setup() {
//Serial.begin(115200);
Wire.begin(8); // join i2c bus with address #8
Wire.onRequest(requestEvent); // register event
// input
for (int x = 0; x < rowCount; x++) {
pinMode(rows[x], INPUT_PULLUP);
}
// output
for (int x = 0; x < colCount; x++) {
pinMode(cols[x], OUTPUT);
digitalWrite(cols[x], HIGH);
}
}
void readMatrix() {
// iterate the columns
for (int colIndex = 0; colIndex < colCount; colIndex++) {
// col: set to output to low
byte curCol = cols[colIndex];
//pinMode(curCol, OUTPUT);
#ifdef REV_DIODE
digitalWrite(curCol, LOW);
#endif
// row: interate through the rows
for (int rowIndex = 0; rowIndex < rowCount; rowIndex++) {
byte rowCol = rows[rowIndex];
#ifdef REV_DIODE
keys[rowIndex][colIndex] = digitalRead(rowCol);
#else
digitalWrite(curCol, LOW);
keys[colIndex][rowIndex] = digitalRead(rowCol);
digitalWrite(curCol, HIGH);
#endif
}
#ifdef REV_DIODE
digitalWrite(curCol, HIGH);
#endif;
}
byte * pt = &msg[0];
byte v = 0;
v |= (keys[0][0] ? 0x80 : 0);
v |= (keys[1][0] ? 0x40 : 0);
v |= (keys[2][0] ? 0x20 : 0);
v |= (keys[3][0] ? 0x10 : 0);
v |= (keys[0][1] ? 0x08 : 0);
v |= (keys[1][1] ? 0x04 : 0);
v |= (keys[2][1] ? 0x02 : 0);
v |= (keys[3][1] ? 0x01 : 0);
*pt++ = v;
v = 0;
v |= (keys[0][2] ? 0x80 : 0);
v |= (keys[1][2] ? 0x40 : 0);
v |= (keys[2][2] ? 0x20 : 0);
v |= (keys[3][2] ? 0x10 : 0);
v |= (keys[0][3] ? 0x08 : 0);
v |= (keys[1][3] ? 0x04 : 0);
v |= (keys[2][3] ? 0x02 : 0);
v |= (keys[3][3] ? 0x01 : 0);
*pt++ = v;
v = 0;
v |= (keys[0][4] ? 0x80 : 0);
v |= (keys[1][4] ? 0x40 : 0);
v |= (keys[2][4] ? 0x20 : 0);
v |= (keys[3][4] ? 0x10 : 0);
v |= (keys[0][5] ? 0x08 : 0);
v |= (keys[1][5] ? 0x04 : 0);
v |= (keys[2][5] ? 0x02 : 0);
v |= (keys[3][5] ? 0x01 : 0);
*pt++ = v;
v = 0;
v |= (keys[0][6] ? 0x80 : 0);
v |= (keys[1][6] ? 0x40 : 0);
v |= (keys[2][6] ? 0x20 : 0);
v |= (keys[3][6] ? 0x10 : 0);
v |= (keys[0][7] ? 0x08 : 0);
v |= (keys[1][7] ? 0x04 : 0);
v |= (keys[2][7] ? 0x02 : 0);
v |= (keys[3][7] ? 0x01 : 0);
*pt++ = v;
v = 0;
v |= (keys[0][8] ? 0x80 : 0);
v |= (keys[1][8] ? 0x40 : 0);
v |= (keys[2][8] ? 0x20 : 0);
v |= (keys[3][8] ? 0x10 : 0);
v |= (keys[0][9] ? 0x08 : 0);
v |= (keys[1][9] ? 0x04 : 0);
v |= (keys[2][9] ? 0x02 : 0);
v |= (keys[3][9] ? 0x01 : 0);
*pt++ = v;
v = 0;
v |= (keys[4][0] ? 0x80 : 0);
v |= (keys[4][1] ? 0x40 : 0);
v |= (keys[4][2] ? 0x20 : 0);
v |= (keys[4][3] ? 0x10 : 0);
v |= (keys[4][4] ? 0x08 : 0);
v |= (keys[4][5] ? 0x04 : 0);
v |= (keys[4][6] ? 0x02 : 0);
v |= (keys[4][7] ? 0x01 : 0);
*pt++ = v;
v = 0x3F;
v |= (keys[4][8] ? 0x80 : 0);
v |= (keys[4][9] ? 0x40 : 0);
*pt++ = v;
}
void printMatrix() {
for (int rowIndex=0; rowIndex < rowCount; rowIndex++) {
if (rowIndex < 10) Serial.print(F("0"));
Serial.print(rowIndex); Serial.print(F(": "));
for (int colIndex=0; colIndex < colCount; colIndex++) {
#ifdef REV_DIODE
Serial.print(keys[rowIndex][colIndex]);
#else
Serial.print(keys[colIndex][rowIndex]);
#endif
if (colIndex < colCount) Serial.print(F(", "));
}
Serial.println("");
}
Serial.println("");
Serial.println("");
Serial.println("");
/*
Serial.println(msg[0], BIN);
Serial.println(msg[1], BIN);
Serial.println(msg[2], BIN);
Serial.println(msg[3], BIN);
Serial.println(msg[4], BIN);
Serial.println("");
Serial.println("");
Serial.println("");
*/
}
void loop() {
readMatrix();
//printMatrix();
delay(2);
}
// function that executes whenever data is requested by master
// this function is registered as an event, see setup()
void requestEvent() {
Wire.write(msg, 7);
//Wire.write("hello "); // respond with message of 6 bytes
}

Wyświetl plik

@ -0,0 +1,251 @@
:100000000C9462000C948A000C948A000C948A0070
:100010000C948A000C948A000C948A000C948A0038
:100020000C948A000C948A000C948A000C948A0028
:100030000C948A000C948A000C948A000C948A0018
:100040000C942F030C948A000C94FD020C94D7029C
:100050000C948A000C948A000C948A000C948A00F8
:100060000C9479030C948A000000000025002800FD
:100070002B0000000000240027002A0000000000E0
:1000800023002600290004040404040404040202DA
:100090000202020203030303030301020408102007
:1000A0004080010204081020010204081020000012
:1000B0000008000201000003040700000000000027
:1000C0000000A70411241FBECFEFD8E0DEBFCDBFD4
:1000D00011E0A0E0B1E0ECE5FFE002C005900D9278
:1000E000A433B107D9F722E0A4E3B1E001C01D9227
:1000F000A53BB207E1F710E0C2E6D0E004C02197CB
:10010000FE010E94A107C136D107C9F70E94E00491
:100110000C94AC070C940000FC01538D448D252FEA
:1001200030E0842F90E0821B930B541710F0CF9691
:10013000089501970895FC01918D828D981761F0C3
:10014000828DDF01A80FB11D5D968C91928D9F5F0E
:100150009F73928F90E008958FEF9FEF0895FC01B9
:10016000918D828D981731F0828DE80FF11D858D6C
:1001700090E008958FEF9FEF0895FC01918D228DFF
:10018000892F90E0805C9F4F821B91098F73992784
:100190000895FC01848DDF01A80FB11DA35ABF4F44
:1001A0002C91848D90E001968F739927848FA68976
:1001B000B7892C93A089B1898C9180648C93938D9D
:1001C000848D981306C00288F389E02D80818F7D8D
:1001D00080830895EF92FF920F931F93CF93DF9345
:1001E000EC0181E0888F9B8D8C8D981305C0E88988
:1001F000F989808185FD24C0F62E0B8D10E00F5FFC
:100200001F4F0F731127E02E8C8DE8120CC00FB614
:1002100007FCFACFE889F989808185FFF5CFCE0107
:100220000E94C900F1CF8B8DFE01E80FF11DE35A4A
:10023000FF4FF0820B8FEA89FB898081806207C0C3
:10024000EE89FF896083E889F989808180648083F1
:1002500081E090E0DF91CF911F910F91FF90EF909F
:100260000895CF93DF93EC01888D8823C9F0EA8944
:10027000FB89808185FD05C0A889B9898C9186FD9F
:100280000FC00FB607FCF5CF808185FFF2CFA8899C
:10029000B9898C9185FFEDCFCE010E94C900E7CFCF
:1002A000DF91CF9108958CE092E00E94BD0021E0A3
:1002B000892B09F420E0822F089580E090E0892BBB
:1002C00029F00E94530181110C9400000895E091DF
:1002D000D101F091D201309729F01092CA01109209
:1002E000C90109940895CF93DF93AC01E0915401C3
:1002F000F09155013097F1F09091CC018091CB01B4
:100300009817C0F090E0292F30E02617370754F4F3
:10031000D901AC5CBE4FEA01C20FD31F88818C9318
:100320009F5FF1CF1092CC016093CB01CB01DF91A5
:10033000CF910994DF91CF910895CF92DF92EF9200
:10034000FF920F931F93CF93DF936C017A018B0180
:10035000C0E0D0E0CE15DF0589F0D8016D918D01A8
:10036000D601ED91FC910190F081E02DC601099537
:10037000892B11F47E0102C02196ECCFC701DF91D9
:10038000CF911F910F91FF90EF90DF90CF90089544
:10039000833081F028F4813099F08230A1F0089503
:1003A0008730A9F08830B9F08430D1F48091800092
:1003B0008F7D03C0809180008F77809380000895A7
:1003C00084B58F7702C084B58F7D84BD08958091F8
:1003D000B0008F7703C08091B0008F7D8093B00014
:1003E00008951F93CF93DF93282F30E0F901E25552
:1003F000FF4F8491F901E656FF4FD491F901EA5776
:10040000FF4FC491CC23C9F0162F81110E94C8015F
:10041000EC2FF0E0EE0FFF1FE859FF4FA591B491CC
:100420008FB7F894111105C09C91ED2FE095E92349
:1004300002C0EC91ED2BEC938FBFDF91CF911F9118
:1004400008953FB7F8948091C2019091C301A091A3
:10045000C401B091C50126B5A89B05C02F3F19F076
:100460000196A11DB11D3FBFBA2FA92F982F882734
:10047000820F911DA11DB11DBC01CD0142E0660F8F
:10048000771F881F991F4A95D1F7089585ED8093AE
:10049000BC008091BC0084FDFCCF1092C80108957F
:1004A00040917601262F30E0240F311D2132310595
:1004B000DCF42091C8012430C9F4FC0180E090E014
:1004C000861758F4309176012191DC01AA5ABE4F6B
:1004D000A30FB11D2C930196F3CF80917601680F85
:1004E0006093760180E0089581E0089582E00895A8
:1004F0000895E091CC018091CB01E81730F4F0E051
:10050000EC5CFE4F808190E008958FEF9FEF08959F
:100510009091CC018091CB01981750F4E92FF0E035
:10052000EC5CFE4F208130E09F5F9093CC0102C0D5
:100530002FEF3FEFC90108958091CB0190E020910A
:10054000CC01821B91090895CF93DF9300D0CDB7E2
:10055000DEB7CB01642F49835A830E945002498140
:10056000842F5A81952F0F900F90DF91CF9108958E
:1005700047E050E063ED71E089EA92E00C94A40258
:10058000CF93DF931F92CDB7DEB7698361E0CE01D1
:1005900001960E94500281E090E00F90DF91CF9190
:1005A0000895089580E090E008950E94A7071F92A3
:1005B0000F920FB60F9211242F933F934F935F9397
:1005C0006F937F938F939F93AF93BF93EF93FF931B
:1005D0008CE092E00E94C900FF91EF91BF91AF9132
:1005E0009F918F917F916F915F914F913F912F914B
:1005F0000F900FBE0F901F9018951F920F920FB67D
:100600000F9211242F938F939F93EF93FF93E09179
:100610001C02F0911D028081E0912202F0912302E0
:1006200082FD12C09081809125028F5F8F7320918F
:100630002602821751F0E0912502F0E0E45FFD4FC1
:10064000958F8093250201C08081FF91EF919F914A
:100650008F912F910F900FBE0F901F9018951F92A2
:100660000F920FB60F9211242F933F938F939F9366
:10067000AF93BF938091BE019091BF01A091C00143
:10068000B091C1013091BD0123E0230F2D3720F43B
:100690000196A11DB11D05C026E8230F0296A11DDC
:1006A000B11D2093BD018093BE019093BF01A09323
:1006B000C001B093C1018091C2019091C301A0918A
:1006C000C401B091C5010196A11DB11D8093C20165
:1006D0009093C301A093C401B093C501BF91AF91A2
:1006E0009F918F913F912F910F900FBE0F901F9070
:1006F00018951F920F920FB60F9211242F933F93CC
:100700004F935F936F937F938F939F93AF93BF9319
:10071000EF93FF938091B900887F803609F49CC0E5
:1007200068F5883209F45BC090F4803109F454C054
:1007300038F4882309F4F6C0883009F44DC0F6C0B7
:10074000883109F44CC0803209F45DC0EFC08034B8
:1007500009F468C048F4803309F455C0883309F0BF
:10076000E5C080939901D8C0803509F44FC0883521
:1007700009F45DC0883409F0D9C0D6C0883909F4BD
:10078000C7C0A8F4883709F467C038F4883609F47C
:1007900063C0803709F460C0C9C0883809F4B8C0A4
:1007A000803909F45FC0803809F0C0C05BC0803B6D
:1007B00009F486C038F4803A09F466C0883A09F42E
:1007C0007FC0B4C0803C09F4A7C0883C09F4A4C031
:1007D000883B09F48AC0AAC08091BC0110C09091E6
:1007E000BB018091BA01981770F5E091BB0181E0DF
:1007F0008E0F8093BB01F0E0E656FE4F8081809320
:10080000BB0085EC86C0809399018EC0E091BB014E
:1008100081E08E0F8093BB018091BB00F0E0E65633
:10082000FE4F80839091BB018091BA016EC0E09130
:10083000BB0181E08E0F8093BB018091BB00F0E093
:10084000E656FE4F80838091C70181116DC081E023
:100850008093C60184EA61C083E08093C80110924E
:100860009801CFCF80919801803208F051C0E0917B
:10087000980181E08E0F809398018091BB00F0E099
:10088000E858FE4F8083BDCF85EC8093BC0010926A
:10089000C80180919801803230F4E0919801F0E035
:1008A000E858FE4F10826091980170E0E091CD0110
:1008B000F091CE0188E791E009951092980136C039
:1008C00084E08093C8011092770110927601E09144
:1008D000CF01F091D001099580917601811105C079
:1008E00081E08093760110925601E091770181E0DA
:1008F0008E0F80937701F0E0EA5AFE4F808180935B
:10090000BB009091770180917601981708F479CF18
:1009100085E88093BC000AC085EC8093BC001092EF
:10092000C80104C0109299010E944602FF91EF9104
:10093000BF91AF919F918F917F916F915F914F91F7
:100940003F912F910F900FBE0F901F901895ECE0E4
:10095000F2E01382128288EE93E0A0E0B0E084839C
:100960009583A683B78323E131E03183208325EC8F
:1009700030E03587248724EC30E03787268720EC69
:1009800030E0318B208B21EC30E0338B228B22EC5A
:1009900030E0358B248B26EC30E0378B268B118EA4
:1009A000128E138E148EE9EAF2E01382128284838F
:1009B0009583A683B78385E291E091838083089530
:1009C000789484B5826084BD84B5816084BD85B52A
:1009D000826085BD85B5816085BD80916E00816036
:1009E00080936E00109281008091810082608093DC
:1009F00081008091810081608093810080918000DE
:100A00008160809380008091B10084608093B10008
:100A10008091B00081608093B00080917A00846002
:100A200080937A0080917A00826080937A0080912E
:100A30007A00816080937A0080917A008068809348
:100A40007A001092C10080E18093BA0087E691E0BD
:100A50009093D0018093CF0183E791E09093CE01F2
:100A60008093CD011092CC011092CB011092CA015B
:100A70001092C9011092C80181E08093C7011092C1
:100A8000C60161E082E10E94F10161E083E10E9420
:100A9000F1018091B9008E7F8093B9008091B900F7
:100AA0008D7F8093B90088E48093B80085E48093BB
:100AB000BC0088EB92E09093D2018093D101A0E03A
:100AC000B1E08D9190E0FC01E656FF4F2491FC01CE
:100AD000EA57FF4F84918823C9F090E0880F991F4F
:100AE000FC01EE58FF4F45915491FC01E859FF4F2E
:100AF000C591D4919FB7F894FA013081822F8095E7
:100B000083238083E8812E2B28839FBFF1E0A530CB
:100B1000BF07B9F6C5E0D1E0DE01888190E0FC01B5
:100B2000E656FF4F2491FC01EA57FF4F849188233A
:100B3000A1F090E0880F991FFC01EE58FF4F4591FE
:100B40005491FC01E859FF4F859194918FB7F89427
:100B5000FA019081922B90838FBF219661E08C9156
:100B60000E94F101F1E0CF30DF07B1F60AED11E0AC
:100B7000C5E0D1E0B99060E08B2D0E94F10130E03A
:100B8000E32E31E0F32EC12CD12CF70121917F010E
:100B900030E0F901E255FF4F8491F901E656FF4F2D
:100BA0009490F901EA57FF4FA490AA2079F081119F
:100BB0000E94C801EA2DF0E0EE0FFF1FE458FF4F3E
:100BC000A591B491EC919E2281E009F480E0F801B6
:100BD000EC0DFD1D8083FAE0CF0ED11C22E3C2167E
:100BE000D10499F661E08B2D0E94F1010F5F1F4F38
:100BF00081E0CF30D80709F0BDCF8091DA018111B3
:100C000002C070E001C070E88091E401811102C06F
:100C100050E001C050E48091EE01811102C040E03B
:100C200001C040E28091F801811102C030E001C0B2
:100C300030E18091DB01811102C020E001C028E099
:100C40008091E501811102C090E001C094E08091A3
:100C5000EF01811182E061E0E091F901E11101C051
:100C600060E0672B562B452B342B232B922B892BA3
:100C70008093D3018091DC01811102C070E001C03A
:100C800070E88091E601811102C050E001C050E49B
:100C90008091F001811102C040E001C040E28091EA
:100CA000FA01811102C030E001C030E18091DD0124
:100CB000811102C020E001C028E08091E70181118C
:100CC00002C090E001C094E08091F101811182E0C6
:100CD00061E0E091FB01E11101C060E0672B562B60
:100CE000452B342B232B922B892B8093D40180917D
:100CF000DE01811102C070E001C070E88091E8015E
:100D0000811102C050E001C050E48091F2018111D4
:100D100002C040E001C040E28091FC01811102C0AC
:100D200030E001C030E18091DF01811102C020E09C
:100D300001C028E08091E901811102C090E001C06A
:100D400094E08091F301811182E061E0E091FD0186
:100D5000E11101C060E0672B562B452B342B232B70
:100D6000922B892B8093D5018091E001811102C0E3
:100D700070E001C070E88091EA01811102C050E08A
:100D800001C050E48091F401811102C040E001C033
:100D900040E28091FE01811102C030E001C030E1EB
:100DA0008091E101811102C020E001C028E0809122
:100DB000EB01811102C090E001C094E08091F50147
:100DC000811182E061E0E091FF01E11101C060E08A
:100DD000672B562B452B342B232B922B892B80935F
:100DE000D6018091E201811102C070E001C070E87B
:100DF0008091EC01811102C050E001C050E480916B
:100E0000F601811102C040E001C040E28091000281
:100E1000811102C030E001C030E18091E301811115
:100E200002C020E001C028E08091ED01811102C0E4
:100E300090E001C094E08091F701811182E061E0CF
:100E4000E0910102E11101C060E0672B562B452BB8
:100E5000342B232B922B892B8093D7018091020274
:100E6000811102C070E001C070E88091030281111D
:100E700002C050E001C050E480910402811102C020
:100E800040E001C040E280910502811102C030E0E3
:100E900001C030E180910602811102C020E001C052
:100EA00028E080910702811102C090E001C094E027
:100EB00080910802811182E061E0E0910902E11174
:100EC00001C060E0672B562B452B342B232B922B34
:100ED000892B8093D80180910A02811180E8982F94
:100EE0009F6380910B02811180E4892B8093D9014B
:100EF0000E9421026B017C0192E0892E912CA12C91
:100F0000B12C0E942102DC01CB018C199D09AE0994
:100F1000BF09883E9340A105B10598F3E8EECE0ED7
:100F2000E3E0DE1EE11CF11C8A9489288A288B28C4
:100F300029F0812C912C54018394E3CF0E945D0110
:100F400015CEEE0FFF1F0590F491E02D099481E07E
:0C0F500090E0F8940C94AC07F894FFCFEC
:100F5C0011100F0E03090A08070605040201000010
:100F6C00000000EA009D018C003101BD009B00AF28
:100F7C000000000000C002A402D20278029C028889
:040F8C0002790200E4
:00000001FF

Wyświetl plik

@ -1,18 +1,28 @@
pinout Atmega328p (2x14 pins) as I2C keyboard slave
---------------------------------------------------
V2 V1 V1 V2
RESET 01 28 I2C SCL
9 02 x 27 I2C SDA
8 03 x 26 3 ROW OUT 3
7 04 x 24 2 ROW OUT 2
4 ROW OUT 4 05 25 1 ROW OUT 1
6 COL IN 9 06 x 23 0 ROW OUT 0
V3.3v 07 22 GND
GND 08 21
09 20
10 19 4 COL IN
5 COL IN 8 11 x 18 3 COL IN
4 COL IN 7 12 x 17 0 COL IN
3 COL IN 6 13 x x 16 1 COL IN 1
2 COL IN 5 14 x x 15 2 COL IN 0
RESET 01 28 I2C SCL
02 x 27 I2C SDA
03 x 26 A3 COL3 OUT (kbd row0)
04 x 24 A2 COL2 OUT (kbd row1)
COL4 OUT (kbd row4)05 25 A1 COL1 OUT (kbd row2)
9 ROW9 IN (kbd col9) 06 x 23 A0 COL0 OUT (kbd row3)
V3.3v 07 22 GND
GND 08 21
09 20
10 19 4 ROW4 IN (kbd col4)
8 ROW8 IN (kbd col8) 11 x 18 3 ROW3 IN (kbd col3)
7 ROW7 IN (kbd col7) 12 x 17 0 ROW0 IN (kbd col0)
6 ROW6 IN (kbd col6) 13 x x 16 1 ROW1 IN (kbd col1)
5 ROW5 IN (kbd col5) 14 x x 15 2 ROW2 IN (kbd col2)
ROW and COLUMNS numbers (for V1 and V2):
0 1 2 3 4 5 6 7 8 9
0 x x x x x x x x x x
1 x x x x x x x x x x
2 x x x x x x x x x x
3 x x x x x x x x x x
4 x x x x x x x x x x

Wyświetl plik

@ -1,2 +1,2 @@
#./avrdude -C avrdude.conf -P /dev/cu.usbmodemFD1441 -c stk500 -p m328p -U flash:w:prog.hex
./avrdude -C avrdude.conf -P /dev/cu.usbmodemFA1221 -c stk500 -p m328p -U flash:w:keybrev.hex
./avrdude -C avrdude.conf -P /dev/cu.usbmodemFA1221 -c stk500 -p m328p -U flash:w:keybV2rev.hex