I has been programming using UNO and my project working well. Then I try to switch to breadboard ATMega328P in TQFP is also working well.
But I cant get my program to work on ATTiny85. The same program can run perfectly when I use ATMega328P-CU in TQFP. (Of course when i change to ATTiny, I have change the data, clock, latch pins according to ATTiny85 pin configuration).
My program is just reading the variable resistors and shift out the output into two shift registers of 74HC595. Because i think the number of pins in ATTiny85 is sufficient to run this project, so I do not want to use excess pins in ATMega328P.
The only different i thought is in ATTiny85, I cant have external crystal and I thought is the speed to slow, then I try burn bootloader for the ATTiny to 8MHz, it is still not working even though all upload is perfect. There is no errors.
Could someone experience this tell me what is the different and how to get this work ?
This is likely wrong:
int probe = PB2;
I guess you are reading wrong pin because naming of digital pins is different from naming of analog pins. Try probe = 1;
try to isolate the problem: are you able to turn on/off simple LED? Are you able to shift (constant) data to the shift register? Are you able to read the ADC value properly?
I am using ATTiny/UNO on board shield for ATTiny connected UNO. I can upload program and turn on LED with a simple blink program without issue. May be I shall breakdown the code to check the ADC value using serial monitor. I have not done that.
You still haven't answered one question: there are a few different ATTiny cores for Arduino IDE and not all have the same pin naming or coding. Which one are you using? Those are listed in Board section of Arduino IDE. On my IDE I have attiny by David A Mellis v1.0.2
Looking at your code, I think I see the problem (this analysis ONLY applies to my core, I don't know how David handles this; handling the analog vs digital pin numbers has been an incredible headache for me). Pxn type notation (like PB2) will never work with arduino pin manipulation functions. Not on my core or any other core; these are already defined by the compiler, and they are not defined to something that can be used to do what you want. You must use the Arduino Digital Pin Numbers, the A# defines for the analog pins.
With 1.1.4 and later of my core, you can use A# constants for pinMode()/digitalWrite() and analogRead() - however the inverse is not true - if you pass a digital pin number to analogRead() it will not read the pin you expect it to. There's no way to tell when someone does analogRead(1) that they mean the ADC channel attached to digital pin 1, vs ADC channel number 1. There is no way to resolve this without breaking backwards compatibility in a major way (there is a lot of code in use, some of it in actual business applications, that uses ADC channel numbers
This code:
//Pin Analog1 as probe pin, uP (1 input Pin)
int probe = PB2;
//Pin connected to ST_CP of 74HC595, (uP 2nd Output Pin)
int latchPin = PB3;
//Pin connected to SH_CP of 74HC595, (uP 3rd Output Pin)
int clockPin = PB0;
////Pin connected to DS of 74HC595, (uP 4th Output Pin)
int dataPin = PB4;
Change to:
//Pin Analog1 as probe pin, uP (1 input Pin)
int probe = A1;
//Pin connected to ST_CP of 74HC595, (uP 2nd Output Pin)
int latchPin = 3;
//Pin connected to SH_CP of 74HC595, (uP 3rd Output Pin)
int clockPin = 0;
////Pin connected to DS of 74HC595, (uP 4th Output Pin)
int dataPin = 4;
Thank you DRAzzy for the clarification. This pin notation is really headache.
Sowhen I use as Analog pin, I define it as A1.
If I use it as Digital Pin, I will have to use pinMode to define input or output and make it as Pin number 2 ?