v20210423

This commit is contained in:
2021-04-24 01:37:21 +02:00
commit c3e4447f6e
7 changed files with 431 additions and 0 deletions
+175
View File
@@ -0,0 +1,175 @@
/*!
ER1400.cpp
v20210423: Initial version
*/
#include "er1400.h"
ER1400::ER1400(uint8_t clockPin, uint8_t c1Pin, uint8_t c2Pin, uint8_t c3Pin, uint8_t outPin, uint8_t inPin) {
this->clockPin = clockPin;
this->c1Pin = c1Pin;
this->c2Pin = c2Pin;
this->c3Pin = c3Pin;
this->inPin = inPin;
this->outPin = outPin;
init();
}
void ER1400::init() {
digitalWrite(clockPin, 0);
digitalWrite(c1Pin, 0);
digitalWrite(c2Pin, 0);
digitalWrite(c3Pin, 0);
digitalWrite(outPin, 0);
pinMode(clockPin, OUTPUT);
pinMode(c1Pin, OUTPUT);
pinMode(c2Pin, OUTPUT);
pinMode(c3Pin, OUTPUT);
pinMode(inPin, INPUT_PULLUP);
pinMode(outPin, OUTPUT);
}
//readData
int ER1400::readData(int adr) {
acceptAddress (adr);
read();
return shiftDataOut();
}
//writeData
void ER1400::writeData(int adr, int data) {
acceptAddress(adr);
erase();
acceptData(data);
write();
}
// STANDBY (C1: 0, C2: 0, C3: 0)
void ER1400::standby() {
digitalWrite(clockPin, 0);
digitalWrite(c1Pin, 0);
digitalWrite(c2Pin, 0);
digitalWrite(c3Pin, 0);
digitalWrite(outPin, 0);
delayMicroseconds(delayvalue);
digitalWrite(clockPin, 1);
delayMicroseconds(delayvalue);
}
// ACCEPT ADDRESS (C1: 0, C2: 1, C3: 1)
void ER1400::acceptAddress(int adr) {
i;
adr1 = 1 << (adr / 10);
adr2 = 1 << (adr % 10);
for (i = 0; i < 10; i++) {
digitalWrite(clockPin, 0);
digitalWrite(c1Pin, 0);
digitalWrite(c2Pin, 1);
digitalWrite(c3Pin, 1);
digitalWrite(outPin, !!(adr1 & (1 << (9 - i))));
delayMicroseconds(delayvalue);
digitalWrite(clockPin, 1);
delayMicroseconds(delayvalue);
}
for (i = 0; i < 10; i++) {
digitalWrite(clockPin, 0);
digitalWrite(c1Pin, 0);
digitalWrite(c2Pin, 1);
digitalWrite(c3Pin, 1);
digitalWrite(outPin, !!(adr2 & (1 << (9 - i))));
delayMicroseconds(delayvalue);
digitalWrite(clockPin, 1);
delayMicroseconds(delayvalue);
}
standby();
}
// READ (C1: 1, C2: 0, C3: 0)
void ER1400::read() {
digitalWrite(clockPin, 0);
digitalWrite(c1Pin, 1);
digitalWrite(c2Pin, 0);
digitalWrite(c3Pin, 0);
digitalWrite(outPin, 0);
delayMicroseconds(delayvalue);
digitalWrite(clockPin, 1);
delayMicroseconds(delayvalue);
standby();
}
// SHIFT DATA OUT (C1: 1, C2: 0, C3: 1)
int ER1400::shiftDataOut() {
x = 0;
y = 0;
for (i = 0; i < 14; i++) {
digitalWrite(clockPin, 0);
digitalWrite(c1Pin, 1);
digitalWrite(c2Pin, 0);
digitalWrite(c3Pin, 1);
delayMicroseconds(delayvalue);
digitalWrite(clockPin, 1);
y = digitalRead(inPin);
y = y << 14;
x = x + y;
x = x >> 1;
delayMicroseconds(delayvalue);
}
standby();
return x;
}
// ERASE (C1: 0, C2: 1, C3: 0)
void ER1400::erase() {
digitalWrite(clockPin, 0);
digitalWrite(c1Pin, 0);
digitalWrite(c2Pin, 1);
digitalWrite(c3Pin, 0);
digitalWrite(outPin, 0);
delayMicroseconds(delayvalue);
digitalWrite(clockPin, 1);
delayMicroseconds(delayvalue);
standby();
}
// ACCEPT DATA (C1: 1, C2: 1, C3: 1)
void ER1400::acceptData(int data) {
x = 0;
y = 0;
for (i = 0; i < 14; i++) {
digitalWrite(clockPin, 0);
digitalWrite(c1Pin, 1);
digitalWrite(c2Pin, 1);
digitalWrite(c3Pin, 1);
digitalWrite(outPin, map(bitRead(data, i), 0, 1, 1, 0));
delayMicroseconds(delayvalue);
digitalWrite(clockPin, 1);
delayMicroseconds(delayvalue);
}
standby();
}
// WRITE (C1: 1, C2: 1, C3: 0)
void ER1400::write() {
digitalWrite(clockPin, 0);
digitalWrite(c1Pin, 1);
digitalWrite(c2Pin, 1);
digitalWrite(c3Pin, 0);
digitalWrite(outPin, 0);
delayMicroseconds(delayvalue);
digitalWrite(clockPin, 1);
delayMicroseconds(delayvalue);
standby();
}
+56
View File
@@ -0,0 +1,56 @@
/*!
ER1400.h
v20210423: Initial version
*/
#ifndef ER1400_H
#define ER1400_H
#include <Arduino.h>
class ER1400 {
private:
uint8_t clockPin;
uint8_t c1Pin;
uint8_t c2Pin;
uint8_t c3Pin;
uint8_t outPin;
uint8_t inPin;
int data;
int adr;
const int delayvalue = 25;
int adr1;
int adr2;
int x;
int y;
uint8_t i;
public:
ER1400(uint8_t clockPin, uint8_t c1Pin, uint8_t c2Pin, uint8_t c3Pin, uint8_t outPin, uint8_t inPin);
void init();
// readData (acceptAddress -> read -> shiftDataOut)
int readData(int adr);
// writeData (acceptAddress -> erase -> acceptData -> write)
void writeData(int adr, int data);
// STANDBY (C1: 0, C2: 0, C3: 0)
void standby();
// ACCEPT ADDRESS (C1: 0, C2: 1, C3: 1)
void acceptAddress(int adr);
// READ (C1: 1, C2: 0, C3: 0)
void read();
// SHIFT DATA OUT (C1: 1, C2: 0, C3: 1)
int shiftDataOut();
// ERASE (C1: 0, C2: 1, C3: 0)
void erase();
// ACCEPT DATA (C1: 1, C2: 1, C3: 1)
void acceptData(int data);
// WRITE (C1: 1, C2: 1, C3: 0)
void write();
// NOT USED (C1: 0, C2: 0, C3: 1)
};
#endif
+28
View File
@@ -0,0 +1,28 @@
/*!
erase.ino
v20210423: Initial version
*/
#include <Arduino.h>
#include <ER1400.h>
#define PIN_CLK 2
#define PIN_C1 3
#define PIN_C2 4
#define PIN_C3 5
#define PIN_OUT 6
#define PIN_IN 7
ER1400 er1400(PIN_CLK, PIN_C1, PIN_C2, PIN_C3, PIN_OUT, PIN_IN);
void setup() {
int i;
for (i = 0; i < 100; i++) {
er1400.acceptAddress(i);
er1400.erase();
er1400.write();
}
}
void loop() {
}
@@ -0,0 +1,76 @@
/*!
retention_update.ino
v20210424: Initial version
*/
#include <Arduino.h>
#include <ER1400.h>
#define PIN_CLK 2
#define PIN_C1 3
#define PIN_C2 4
#define PIN_C3 5
#define PIN_OUT 6
#define PIN_IN 7
ER1400 er1400(PIN_CLK, PIN_C1, PIN_C2, PIN_C3, PIN_OUT, PIN_IN);
String command;
int i;
void setup() {
Serial.begin(9600);
Serial.println("Before:");
char j[4];
char dataOut[4];
for (i = 0; i < 100; i++) {
if ( (i % 8) == 0) {
sprintf(j, "%04X", i);
Serial.print(j);
Serial.print(": ");
}
sprintf(dataOut, "%04X", er1400.readData(i), HEX);
Serial.print(dataOut);
if ( ( (i + 1) % 8) == 0) {
Serial.println("");
} else {
Serial.print(" ");
}
}
Serial.println("");
Serial.println("");
Serial.println("Send \"update\" (lowercase) to update the retention.");
}
void loop() {
if (Serial.available()) {
command = Serial.readStringUntil('\n');
if (command.equals("update")) {
Serial.println("");
int data;
for (i = 0; i < 100; i++) {
data = er1400.readData(i);
er1400.writeData(i, data);
}
Serial.println("After:");
int i;
char j[4];
char dataOut[4];
for (i = 0; i < 100; i++) {
if ( (i % 8) == 0) {
sprintf(j, "%04X", i);
Serial.print(j);
Serial.print(": ");
}
sprintf(dataOut, "%04X", er1400.readData(i), HEX);
Serial.print(dataOut);
if ( ( (i + 1) % 8) == 0) {
Serial.println("");
} else {
Serial.print(" ");
}
}
Serial.println("");
}
}
}
+30
View File
@@ -0,0 +1,30 @@
/*!
serial_output.ino
v20210423: Initial version
*/
#include <Arduino.h>
#include <ER1400.h>
#define PIN_CLK 2
#define PIN_C1 3
#define PIN_C2 4
#define PIN_C3 5
#define PIN_OUT 6
#define PIN_IN 7
ER1400 er1400(PIN_CLK, PIN_C1, PIN_C2, PIN_C3, PIN_OUT, PIN_IN);
void setup() {
Serial.begin(9600);
int i;
char dataOut[4];
for (i = 0; i < 100; i++) {
sprintf(dataOut, "%04X", er1400.readData(i), HEX);
Serial.print(dataOut);
}
Serial.println("");
}
void loop() {
}
@@ -0,0 +1,42 @@
/*!
serial_output_readable.ino
v20210423: Initial version
v20210424: 0x0000 reading shown as 0000 instead of 0
*/
#include <Arduino.h>
#include <ER1400.h>
#define PIN_CLK 2
#define PIN_C1 3
#define PIN_C2 4
#define PIN_C3 5
#define PIN_OUT 6
#define PIN_IN 7
ER1400 er1400(PIN_CLK, PIN_C1, PIN_C2, PIN_C3, PIN_OUT, PIN_IN);
void setup() {
Serial.begin(9600);
int i;
char j[4];
char dataOut[4];
for (i = 0; i < 100; i++) {
if ( (i % 8) == 0) {
sprintf(j, "%04X", i);
Serial.print(j);
Serial.print(": ");
}
sprintf(dataOut, "%04X", er1400.readData(i), HEX);
Serial.print(dataOut);
if ( ( (i + 1) % 8) == 0) {
Serial.println("");
} else {
Serial.print(" ");
}
}
Serial.println("");
}
void loop() {
}
+24
View File
@@ -0,0 +1,24 @@
/*!
write.ino
v20210423: Initial version
*/
#include <Arduino.h>
#include <ER1400.h>
#define PIN_CLK 2
#define PIN_C1 3
#define PIN_C2 4
#define PIN_C3 5
#define PIN_OUT 6
#define PIN_IN 7
ER1400 er1400(PIN_CLK, PIN_C1, PIN_C2, PIN_C3, PIN_OUT, PIN_IN);
void setup() {
er1400.writeData(26, 0x1DD2);
er1400.writeData(36, 0x2ADA);
}
void loop() {
}