mirror of
https://github.com/morganPigeron/HCTL2022_Arduino.git
synced 2026-01-09 04:29:37 +03:00
151 lines
2.5 KiB
C++
151 lines
2.5 KiB
C++
#include <Arduino.h>
|
|
#include "Hctl2022.h"
|
|
|
|
//hardcoded arduino port used
|
|
#define SET_PORT DDRD
|
|
#define READ_PORT PIND
|
|
|
|
Hctl2022::Hctl2022(int oe, int sel1, int sel2)
|
|
{
|
|
// 8 bits bus from hctl2022
|
|
SET_PORT = B00000000; // set pin 7,6,5,4,3,2,1,0 as input
|
|
|
|
// enable
|
|
pinMode(oe, OUTPUT);
|
|
_oe = oe;
|
|
|
|
// byte selector
|
|
pinMode(sel1, OUTPUT);
|
|
pinMode(sel2, OUTPUT);
|
|
_sel1 = sel1;
|
|
_sel2 = sel2;
|
|
}
|
|
|
|
void Hctl2022::getMsb()
|
|
{
|
|
_hi_old = READ_PORT;
|
|
_hi_new = READ_PORT;
|
|
|
|
if (_hi_old == _hi_new)
|
|
{
|
|
_result_hi = _hi_new;
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
get2nd();
|
|
}
|
|
}
|
|
|
|
void Hctl2022::get3rd()
|
|
{
|
|
_3rd_old = READ_PORT;
|
|
_3rd_new = READ_PORT;
|
|
|
|
if (_3rd_old == _3rd_new)
|
|
{
|
|
_result_3rd = _3rd_new;
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
get2nd();
|
|
}
|
|
}
|
|
|
|
void Hctl2022::get2nd()
|
|
{
|
|
_2nd_old = READ_PORT;
|
|
_2nd_new = READ_PORT;
|
|
|
|
if (_2nd_old == _2nd_new)
|
|
{
|
|
_result_2nd = _2nd_new;
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
get2nd();
|
|
}
|
|
}
|
|
|
|
void Hctl2022::getLsb()
|
|
{
|
|
_lo_old = READ_PORT;
|
|
_lo_new = READ_PORT;
|
|
|
|
if (_lo_old == _lo_new)
|
|
{
|
|
_result_lo = _lo_new;
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
getLsb();
|
|
}
|
|
}
|
|
|
|
unsigned long Hctl2022::hctlRead()
|
|
{
|
|
_result = 0;
|
|
_temp = 0;
|
|
unsigned long previousMillis = 0;
|
|
unsigned long currentMillis = 0;
|
|
|
|
digitalWrite(_oe, HIGH); // disable oe
|
|
|
|
// delay 25ms
|
|
previousMillis = millis();
|
|
do
|
|
{
|
|
currentMillis = millis();
|
|
}while(currentMillis - previousMillis >= 25);
|
|
|
|
// select MSB
|
|
digitalWrite(_sel1, LOW);
|
|
digitalWrite(_sel2, HIGH);
|
|
digitalWrite(_oe, LOW);
|
|
|
|
getMsb();
|
|
|
|
// select 2nd byte
|
|
digitalWrite(_sel1, HIGH);
|
|
digitalWrite(_sel2, HIGH);
|
|
|
|
get2nd();
|
|
|
|
// select 3rd byte
|
|
digitalWrite(_sel1, LOW);
|
|
digitalWrite(_sel2, LOW);
|
|
|
|
get3rd();
|
|
|
|
// select LSB
|
|
digitalWrite(_sel1, HIGH);
|
|
digitalWrite(_sel2, LOW);
|
|
|
|
getLsb();
|
|
|
|
digitalWrite(_oe, LOW);// enable oe
|
|
|
|
// delay 25ms *************************maybe not mandatory
|
|
previousMillis = millis();
|
|
do
|
|
{
|
|
currentMillis = millis();
|
|
}while(currentMillis - previousMillis >= 25);
|
|
|
|
return 0;
|
|
}
|
|
|
|
void Hctl2022::hctlDebug()
|
|
{
|
|
Serial.print("DEBUG HCTL");
|
|
Serial.print(" | MSB: " + _result_hi);
|
|
Serial.print(" | 3rd: " + _result_3rd);
|
|
Serial.print(" | 2nd: " + _result_2nd);
|
|
Serial.print(" | LSB: " + _result_lo);
|
|
Serial.print(" | result: " + _result);
|
|
}
|
|
|