ATTiny85 with 74HC595 not matching ?

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 ?

The error on line 131 of your sketch explains the behavior you described.

Probably a bug in the code that compromises compatibility. Post the entire sketch (no snippets - it’s never in the snippet you think it is).

Also, what board package are you using to add support for the ATTiny85? Mine, or some other one?

I attached the entire code.

shiftled2-Tiny85.ino (6.21 KB)

Which board package are you using to add support for ATTiny85?

There are two currently maintained attiny board packages, plus dozens of abandoned versions around the internet, and they are NOT all the same.

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;

I have try naming with numerical number is still not working.

Which attiny board package are you using???

You should

  1. answer DrAzzy's question
  2. try to describe "not working"
  3. 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

Yes. I am using David Mellis core, but I dont know what version. I follow the instruction here.

[https://www.hackster.io/arjun/programming-attiny85-with-arduino-uno-afb829](http://Yes. I am using David Mellis,I dont know what version. I follow the instruction here. https://www.hackster.io/arjun/programming-attiny85-with-arduino-uno-afb829)

Now, I try to install the SpenceKonde core. But I during installation, I have error as below.

I am not sure due to server issue or network issue.

after downloaded, CRC mismatch error. Pls help.

Can anyone else confirm whether this problem is happening for them? I can't test it until I get home late tonight.

I went from version 1.1.4 to 1.1.3 and back to version 1.1.4 without a problem.

Hm - sounds like an issue specific to hamisu-anguan's network (or a transient issue that has passed now).

The manual install described here https://github.com/SpenceKonde/ATTinyCore/blob/master/Installation.md will work regardless.

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;

I think PBx is #defined as x so it should no be problem here but you are right it should not be used: it will fail for (most of) other Arduinos.

Oh...I manage to installed it.

It doesnt work when VPN is ON.

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 ?

Am I right ?

I already install the DrAzzy ATTiny core successfully and the compile do not have error. So I uploaded the following program into my shield.

I try to use the Analog read with a smaller code, the problem is my Serial Monitor doesnt show any things.

*/
//Digital Pin1 is PWM Output to drive the L293 (In ATTiny shall be 1 )
//Pin A1 as Analog probe pin

int probe = A1;
int val;

void setup()
{
pinMode (1, OUTPUT);
Serial.begin(9600);
}

void loop()
{
int pulseWidth;
int val = analogRead(probe);
Serial.println(val);
delay(500);

pulseWidth = map (val, 0, 1023, 0, 255);
analogWrite(1, pulseWidth);

}