PISO 74HC165 till arduino ger opålitlig data
- Jan Almqvist
- Inlägg: 1655
- Blev medlem: 1 oktober 2013, 20:48:26
- Ort: Orust
Re: PISO 74HC165 till arduino ger opålitlig data
Jag tittade lite i den gamla koden men gav snart upp...
Re: PISO 74HC165 till arduino ger opålitlig data
Med viss modifikation av koden så funkar den nu även med 2st chip vilket ger mig totalt 16 inputs. Jag har dessutom gjort mig av med alla delays så den jobbar så snabbt som arduinon klarar.
Problemet har alltså hela tiden legat i koden. Jag har ännu inte konstaterat var/vad som varit fel för med min kod har jag än så länge inte lyckats få fram samma problem.
Ett stort tack till alla som engagerat sig i frågan och kommit med tips, ideer och åsikter!
För den intresserade så delar jag med mig av koden här. Denna fungerar för tillfället felfritt med 2st chip kaskadkopplade och går enkelt att utöka med fler.
Problemet har alltså hela tiden legat i koden. Jag har ännu inte konstaterat var/vad som varit fel för med min kod har jag än så länge inte lyckats få fram samma problem.
Ett stort tack till alla som engagerat sig i frågan och kommit med tips, ideer och åsikter!



För den intresserade så delar jag med mig av koden här. Denna fungerar för tillfället felfritt med 2st chip kaskadkopplade och går enkelt att utöka med fler.
Kod: Markera allt
// Set up Pins
const int plPin = 31; // This pin will control the parallel load pin(s)
const int cpPin = 33; // This pin will control the clock pin(s)
const int q7Pin = 37; // This pin will recieve the serial data
// Variables
unsigned int chips = 2; // Enter how many chips you use totally
unsigned int bits_per_chip = 8; // Enter the amount of bits to read per chip
unsigned int total_bits_to_read = chips * bits_per_chip; // Calculates the total amount of bits to read
unsigned long pinValues;
unsigned long oldPinValues;
// Setup once
void setup()
{
Serial.begin(9600); // Set up serial monitoring for output of the serial data collected
pinMode(plPin, OUTPUT);
pinMode(cpPin, OUTPUT);
pinMode(q7Pin, INPUT_PULLUP); // Set this pin to INPUT and activate the internal pull-up resistor so it's not floating
digitalWrite(plPin, HIGH); // This is active LOW so I set this inactive for now
digitalWrite(cpPin, LOW); // This is active HIGH so I set this inactive for now
}
void loop()
{
load_parallel_data_into_register();
pinValues = shift_out_data();
if(pinValues != oldPinValues) // Only print to serial monitor if there's been a change
{
output_data_to_serial_monitor(pinValues);
oldPinValues = pinValues;
}
}
void load_parallel_data_into_register()
{
digitalWrite(plPin, LOW); // Pull PL low (active) to load parallel data into the register
digitalWrite(plPin, HIGH); // Pull PL high (inactive) so we can shift out the register
}
unsigned long shift_out_data()
{
long bitVal;
unsigned int bytesVal = 0;
// Send clock-signals to CP to shift out the register
for(int i = 0; i < total_bits_to_read; i++) {
bitVal = digitalRead(q7Pin);
bytesVal |= (bitVal << ((total_bits_to_read-1) - i));
digitalWrite(cpPin, HIGH); // Activate clock-signal to shift to next bit
digitalWrite(cpPin, LOW); // Deactivate clock-signal
}
return(bytesVal);
}
void output_data_to_serial_monitor(unsigned long data)
{
Serial.print("Data = ");
Serial.println(data, BIN);
}
- SeniorLemuren
- Inlägg: 8426
- Blev medlem: 26 maj 2009, 12:20:37
- Ort: Kristinehamn
Re: PISO 74HC165 till arduino ger opålitlig data
Kan inte se att data in pin är satt som "INPUT_PULLUP" utan bara till "INPUT" i den första koden. Kanske det var hela felet?
Re: PISO 74HC165 till arduino ger opålitlig data
Kul att höra att det löste sig.
Angående kontaktstuds så lär en nummerskiva från en gammal telefon ge bra "klockpulser". Såg en video där en typ byggt en räknemaskin av 555or och stor LEDmatris. Han vevade in siffrorna med nummerskiva.
Angående kontaktstuds så lär en nummerskiva från en gammal telefon ge bra "klockpulser". Såg en video där en typ byggt en räknemaskin av 555or och stor LEDmatris. Han vevade in siffrorna med nummerskiva.