Help with ATTINY85 clock and PWM

Hi there, I am trying to recreate the sketch from this thread: Arduino Forum on the ATTiny85.

I am programming the 85 with arduino as ISP using the tiny cores found here: Google Code Archive - Long-term storage for Google Code Project Hosting.

I have had basic digital IO stuff working fine with these cores for some time now.

So I ported the sketch from the thread mentioned above, changing the registers to relevant ones on the 85. I'm using pin0 as the output. The problem I have is that I get a high pitched squeel very loud over the output. I tried using timer1 instead on timer0 - same problem. I have also tried an RC low-pass, doesn't reduce the squeel much.

Here is my sketch:

void setup() {
  TCCR0B = (TCCR0B & 0xf8) | 1;

  analogWrite(0,1);
  pinMode(0,OUTPUT);
}

void putb(byte b)
{
  static long m;
  long t;
  while((t=micros())-m < 250);
  m=t;
  
  OCR0A=b;

}

void loop() {
  long v;
  for(long t=0;;t++)putb(

   t*((t>>12|t>>8)&63&t>>4)   // by viznut
  
  );
  
}

Any ideas where I'm going wrong? I'm sure this little chip is capable of making the exact same noises as the atmega328 in this way..

Thanks

Have you taken into account potential timing differences cause by whatever clock source your using on the tiny85?

I have tried it at 1MHz, 8MHz and with an external 16MHz crystal. Same problem at all speeds. I have had problems getting ext 16MHz to work with the attiny core actually, and did think that must be the problem for a while, but if you run this sketch on an atmega at 8MHz, it still sounds ok..

I think Coding Badly, the guy who created the attiny cores (at least the one I am using) said that he swapped the functionality of Timer 0 and Timer 1... Not sure how that would effect the PWM. Do you know which tiny core and version you are using?

P.S. How do you know you were using the external crystal? Did you test that?

Well, I'm pretty sure it didn't work actually... I selected the board ATtiny85 @ 16mHz with external crystal and connected a 16mhz crystal with 2 22uF caps and it made no difference.. When I removed the crystal, nothing changed.

As far as the timers go, I just don't see what more I need to do but use the appropriate timer for the pin and set the clock.... should hear something more than I do..

matto:
Well, I'm pretty sure it didn't work actually... I selected the board ATtiny85 @ 16mHz with external crystal and connected a 16mhz crystal with 2 22uF caps and it made no difference.. When I removed the crystal, nothing changed.

As far as the timers go, I just don't see what more I need to do but use the appropriate timer for the pin and set the clock.... should hear something more than I do..

Did you burn a new bootloader after you did that, but before you downloaded the sketch?

No I didn't... I was under the impression that the tiny doesn't use a bootloader in this case as it's programmed over SPI?

The tiny is programmed over ISP, but the burn bootloader process configures the fuses, which is nescessary to use different clock options.

ahhhhhhhh ok, nice one. I didn't know that. I'll try that tonight.

I'm making a very basic simulator of the ATtiny85 in MaxMSP as a reference for all the timing related register settings. It's a great way to get your head around the complexity of it. If I ever finish it I'll post it up!

Cheers wanderson.

Ok so I burnt the bootloader for 16MHz internal, re-uploaded and I now have awesome noises.

One other thing that caught me out - I still had a cap between reset and gnd from the aduino as isp and it was causing the chip to reset everytime the cap discharged.

Thankyou for your help!!