What commands does the ATtiny84 support?

Ok I recently purchased this product AVR 14 Pin 20MHz 8K 12A/D - ATtiny84 - COM-11232 - SparkFun Electronics and am programming it using an Arduino UNO R3 SMD edition.

I got everything to work correctly and got the ATtiny84 to blink and led. The problem I am having is that the sketch I wrote has commands in it that the ATtiny doesn't support. Is there a way around this? Would it help to use some other type of programmer? I am not familiar with the C++ but does the ATtiny support that? I am trying to make a trail camera. Here is the sketch I compiled. Thanks... if there a better way to write this sketch let me know. And if you have questions about it I would be glad to help! Thanks

/* 
 * //////////////////////////////////////////////////
 * //making sense of the Parallax PIR sensor's output
 * //////////////////////////////////////////////////
 *
 * Switches a LED according to the state of the sensors output pin.
 * Determines the beginning and end of continuous motion sequences.
 *
 * @author: Kristian Gohlke / krigoo (_) gmail (_) com / http://krx.at
 * @date:   3. September 2006 
 *
 * kr1 (cleft) 2006 
 * released under a creative commons "Attribution-NonCommercial-ShareAlike 2.0" license
 * http://creativecommons.org/licenses/by-nc-sa/2.0/de/
 *
 *
 * The Parallax PIR Sensor is an easy to use digital infrared motion sensor module. 
 * (http://www.parallax.com/detail.asp?product_id=555-28027)
 *
 * The sensor's output pin goes to HIGH if motion is present.
 * However, even if motion is present it goes to LOW from time to time, 
 * which might give the impression no motion is present. 
 * This program deals with this issue by ignoring LOW-phases shorter than a given time, 
 * assuming continuous motion is present during these phases.
 * 
 * 1. Hook pir to breadboard with gnd to gnd on Arduino and 5v to 5v on Arduino and Alarm pin to pin 3 Arduino
 * 2. put LED in pin 13 Arduino
 * 3. Light sensor: Get power from same line on BB as the PIR, put 10k resistor from other leg to ground, put alarm wire from "other leg of sensor" to pin 7 on Arduino
 * 4. Potientally IR LED (now regular LED), Get power from Pin 9 Arduino and hook to 1.5k resistor on breadboard, other end of resistor to long leg of LED and gnd to short end.  
 */

/////////////////////////////
//VARS
//the time we give the sensor to calibrate (10-60 secs according to the datasheet)
int calibrationTime = 30;        

//the time when the sensor outputs a low impulse
long unsigned int lowIn;         

//the amount of milliseconds the sensor has to be low 
//before we assume all motion has stopped
long unsigned int pause = 5000;  

boolean lockLow = true;
boolean takeLowTime;  

int LED = 9; // the pin that the IR led is connected to
const int BUTTON = 7; // the input pin where the photocell is connected
int val = 0; // val is used to store the state of the input pin
int PHOTOCELL = 12; // pin that supplies photocell with power
int SHUTTER = 2; //pin that controls SHUTTER

int pirPin = 3;    //the digital pin connected to the PIR sensor's output
int ledPin = 13;


/////////////////////////////
//SETUP
void setup(){
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
  pinMode(BUTTON, INPUT);
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(PHOTOCELL, OUTPUT);
  digitalWrite(pirPin, LOW);
  pinMode(SHUTTER, OUTPUT);
  digitalWrite(SHUTTER, HIGH);
  delay(5000);
  digitalWrite(SHUTTER, LOW);
  

  //give the sensor some time to calibrate
  Serial.print("calibrating sensor ");
    for(int i = 0; i < calibrationTime; i++){
      Serial.print(".");
      delay(1000);
      }
    Serial.println(" done");
    Serial.println("SENSOR ACTIVE");
    delay(50);
  }

////////////////////////////
//LOOP
void loop(){ 

  if(digitalRead(pirPin) == HIGH){
    digitalWrite(PHOTOCELL, HIGH); //sends power to photocell   
    digitalWrite(ledPin, HIGH);   //the led visualizes the sensors output pin state
    
    if(lockLow){
      lockLow = false;
      digitalWrite(SHUTTER, HIGH);
      delay(250);
      digitalWrite(SHUTTER, LOW);
    }
    takeLowTime = true;
    
    val = digitalRead(BUTTON);
    if(val == LOW) {
      digitalWrite(LED, HIGH);
    } else {
      digitalWrite(LED, LOW);
    }

       
       if(lockLow){  
         //makes sure we wait for a transition to LOW before any further output is made:
         lockLow = false;            
         Serial.println("---");
         Serial.print("motion detected at ");
         Serial.print(millis()/1000);
         Serial.println(" sec"); 
         delay(50);
         }         
         takeLowTime = true;
       }

     if(digitalRead(pirPin) == LOW){       
       digitalWrite(PHOTOCELL, LOW); //cuts power to photocell
       digitalWrite(ledPin, LOW);  //the led visualizes the sensors output pin state
       digitalWrite(LED, LOW);
       
       if(takeLowTime){
      takeLowTime = false;
      digitalWrite(SHUTTER, HIGH);
      delay(250);
      digitalWrite(SHUTTER, LOW);
       }
       if(takeLowTime){
        lowIn = millis();          //save the time of the transition from high to LOW
        takeLowTime = false;       //make sure this is only done at the start of a LOW phase
        }
       //if the sensor is low for more than the given pause, 
       //we assume that no more motion is going to happen
       if(!lockLow && millis() - lowIn > pause){  
           //makes sure this block of code is only executed again after 
           //a new motion sequence has been detected
           lockLow = true;                                 
           Serial.print("motion ended at ");      //output
           Serial.print((millis() - pause)/1000);
           Serial.println(" sec");
           delay(50);
           }
       }
  }

You probably need to download new Arduino core software for the ATtiny84. Then you will need to know how the digital and analog pin numbers used by digitalWrite, analogRead etc. map on to the physical pins of the ATtiny84 chip. Here is a link to an Arduino core that claims to support the ATtiny84: Google Code Archive - Long-term storage for Google Code Project Hosting..

However, when I decided to do a project using an ATtiny85 recently, after investigating alternative cores for a short while, I found it easier to write the code in C++ using AVR Studio 6. I copied a couple of functions from the Arduino core, but wrote the rest of the code using direct port access.

Using the core dc42, the sketch builds without errors...

Binary sketch size: 2,560 bytes (of a 8,192 byte maximum)

dc42:
However, when I decided to do a project using an ATtiny85 recently, after investigating alternative cores for a short while, I found it easier to write the code in C++ using AVR Studio 6. I copied a couple of functions from the Arduino core, but wrote the rest of the code using direct port access.

I do this on Tiny84/Tiny85, too. :slight_smile:

Do you have a link to download that core?
Thanks

Pick your poison...

Google Code Archive - Long-term storage for Google Code Project Hosting. ...look for Download the latest version for Arduino 1.0 close to the center of page.

Google Code Archive - Long-term storage for Google Code Project Hosting. ...look for Featured / Downloads on the left side. The core download starts with arduino-tiny-.

Google Code Archive - Long-term storage for Google Code Project Hosting. ...the core download starts with arduino-tiny-.

I downloaded this and tried to verify the sketch and this is the error it gave me...

PIR_controlling_led_and_light_sensor_COMPLETE.cpp: In function 'void setup()':
PIR_controlling_led_and_light_sensor_COMPLETE:59: error: 'Serial' was not declared in this scope
PIR_controlling_led_and_light_sensor_COMPLETE.cpp: In function 'void loop()':
PIR_controlling_led_and_light_sensor_COMPLETE:110: error: 'Serial' was not declared in this scope
PIR_controlling_led_and_light_sensor_COMPLETE:140: error: 'Serial' was not declared in this scope

/////////////////////////////
//SETUP
void setup(){
  [color=yellow]Serial.begin(9600);[/color]
  pinMode(LED, OUTPUT);
  pinMode(BUTTON, INPUT);
  pinMode(pirPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(PHOTOCELL, OUTPUT);
  digitalWrite(pirPin, LOW);
  pinMode(SHUTTER, OUTPUT);
  digitalWrite(SHUTTER, HIGH);
  delay(5000);
  digitalWrite(SHUTTER, LOW);

sorry the "color yellow" in the code line Serial.begin(9600) was supposed to color the text yellow like it does in the IDE

Which board do you have selected?

ATtiny84(internal 1MHz clock) and i am using Arduino 1.0.1

ATtiny84 @ 16 MHz (external crystal; 4.3 V BOD)
ATtiny84 @ 8 MHz (internal oscillator; BOD disabled)
ATtiny84 @ 1 MHz (internal oscillator; BOD disabled)

That is not one of the choices available for the ATtiny84 processor so I assume you either did not correctly install the Tiny Core or you have a board selected from a different core.

Thanks for your help!! I got it figured out and everything works perfectly!! I love this forum!!

You are welcome.