Loading...
Pages: 1 [2]   Go Down
Author Topic: Solution to PCREL error for avr25/ATTiny84/ATTiny85/ATTiny88.  (Read 2573 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 1
Posts: 175
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi all. Fist let me say I am very new to all this so If I am asking a dumb question forgive me.

I have been trying all day to program an atTiny84 with a 3x3 LED cube sketch i found, an I am having no luck. I have a post in the forum and some one was kind enough to send me a link to this post.

This is the sketch I am trying to use:
Code:
/*
    ledcube.pde - Example sketch for controlling an LED cube.
    Created by Gamaiel Zavala (gzip), 2009-2012
    MIT License. See accompanying LICENSE file for terms.
*/

#include <LedCube.h>

#define SIZE 3
#define COLS (SIZE*SIZE)

byte levelPins[SIZE] = {2,3,4};
byte colPins[COLS] = {0,1,5,6,7,8,9,10};

LedCube cube(SIZE, levelPins, colPins);

void setup ()
{
}

void loop ()
{
    delay(10);
   
    // light each light one at a time
    for(byte level=0; level<cube.getLevels(); level++)
    {
        for(byte col=0; col<cube.getCols(); col++)
        {
            cube.lightPulse(level, col, 100);
        }
    }
   
    // light one level at a time, increasing speed each time
    for(byte d=25; d>2; d-=2)
    {
        for(byte l=1; l <= cube.getLevels(); l++)
        {
            cube.lightLevel(l, d);
        }
    }
   
    // light each row on each level
    for(byte level=1; level<=cube.getLevels(); level++)
    {
        for(byte row=1; row<=cube.getLevels()*2; row++)
        {
            cube.lightRow(row, level);
        }
    }
   
    // light each plane
    for(byte i=3; i; i--)
    {
        for(byte row=1; row<=cube.getLevels()*2; row++)
        {
            cube.lightPlane(row, 10*i);
        }
    }
   
    // single random light at a time
    cube.randomLight(random(25,100),100);
   
    // random column drop
    for(byte x=0; x<=15; x++)
    {
        cube.lightDrop(random(0,cube.getCols()), random(50,150));
    }
   
    // circle around cube at a random level
    for(byte x=0; x<=5; x++)
    {
        cube.lightPerimeter(random(0,cube.getLevels()), random(1,5), random(25,100));
    }
   
    // light each face
    byte planes[] = {cube.getLevels()+1,cube.getLevels(),cube.getLevels()*2,1};
    for(byte i=5; i; i--)
    {
        for(byte p=0; p<sizeof(planes); p++)
        {
            cube.lightPlane(planes[p], 5*i);
        }
    }
   
    // random columns
    cube.randomColumn(25);
   
    // turn off a single column randomly
    cube.enableBuffer();
    for(byte c=0; c<30; c++)
    {
        cube.fillBuffer();
        cube.invertBuffer();
        cube.randomColumn();
        cube.drawBuffer(7);
    }
    cube.enableBuffer(false);
   
    // cols in and out
    for(byte c=1, d=0; c<=10; c++)
    {
        if(c%2 == 0)
        {
            for(d=0; d<20; d++)
            {
                cube.lightColumn(2,1);
                cube.lightColumn(4,1);
                cube.lightColumn(6,1);
                cube.lightColumn(8,1);
            }
        }
        else if(c%4 == 1)
        {
            for(d=0; d<30; d++)
            {
                cube.lightColumn(1,1);
                cube.lightColumn(3,1);
                cube.lightColumn(7,1);
                cube.lightColumn(9,1);
            }
        }
        else
        {
            for(d=0; d<70; d++)
            {
                cube.lightColumn(5,1);
            }
        }
    }
   
    // diamond and box
    byte diamond[] = {0,4,  1,1, 1,3, 1,4, 1,5, 1,7,   2,4};
    byte box[] = {
        2,0, 2,1, 2,2, 2,3, 2,5, 2,6, 2,7, 2,8,
        1,0, 1,2, 1,6, 1,8,
        0,0, 0,1, 0,2, 0,3, 0,5, 0,6, 0,7, 0,8
    };
    cube.lightSequence(box, sizeof(box), 200);
    cube.lightSequence(diamond, sizeof(diamond), 400);
   
    // helicopter effect
    byte topSeq[8] = {0,3,6,7,8,5,2,1};
    byte botSeq[8] = {8,5,2,1,0,3,6,7};
    for(byte loops = 0, delay = 50; loops<=8; loops++)
    {
        for(byte s=0; s<8; s++)
        {
            byte seq[] = {2,topSeq[s], 1,4, 0,botSeq[s]};
            cube.lightSequence(seq, sizeof(seq), delay);
        }
        if(loops < 5) delay-=10;  else delay += 10;
    }
   
    // turn off one light at a time
    cube.enableBuffer();
    cube.fillBuffer();
    cube.drawBuffer(25);
    for(byte w=0, l, c, max = cube.getNumLights(); w<max; )
    {
        // lower bound is inclusive, upper is exclusive
        l = random(0, cube.getLevels());
        c = random(0, cube.getCols());
       
        if(cube.getBufferAt(l,c) == HIGH)
        {
            cube.lightOff(l,c);
            cube.drawBuffer(5);
            w++;
        }
    }
    cube.enableBuffer(false);
}

And this is the Error I get.
Code:
c:/arduino-1.0.1/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr25/crttn84.o: In function `__vector_default':
(.vectors+0x16): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_11' defined in .text.__vector_11 section in core.a(wiring.c.o)
c:/arduino-1.0.1/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr25/crttn84.o:(.init9+0x0): relocation truncated to fit: R_AVR_13_PCREL against symbol `main' defined in .text.main section in core.a(main.cpp.o)
c:/arduino-1.0.1/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr25/crttn84.o:(.init9+0x2): relocation truncated to fit: R_AVR_13_PCREL against symbol `exit' defined in .fini9 section in c:/arduino-1.0.1/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/avr25\libgcc.a(_exit.o)
core.a(WMath.cpp.o): In function `randomSeed(unsigned int)':
C:\Users\techsupport\Documents\Arduino\hardware\tiny\cores\tiny/WMath.cpp:33: relocation truncated to fit: R_AVR_13_PCREL against symbol `srandom' defined in .text section in c:/arduino-1.0.1/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr25\libc.a(random.o)

I downloaded the zip file form this post and  copied it to my hardware folder but still no luck.

Help. It's driving me mad.

Thanks
Logged

Valencia, Spain
Offline Offline
Edison Member
*
Karma: 65
Posts: 2234
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Download WinAVR here, extract the files (it's a zip file)

http://sourceforge.net/projects/winavr/files/latest/download?source=files

a) Find the "bin" folder in the extracted files.

b) Find a similar looking folder in your Arduino installation.

Copy all files from (a) to (b).
Logged

Leeds, UK
Offline Offline
God Member
*****
Karma: 35
Posts: 982
Once the magic blue smoke is released, it won't go back in!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

have you restarted the IDE?

Double check you put the ld file in this folder:
"<arduino directory>\hardware\tools\avr\avr\bin"

Did you extract the ZIP file?

Did you definitely get the Windows version (not the Mac version by accident)?



This fix definitely applies to your problem, and should work.



@fungus, you don't need the whole folder, just the ld file.
« Last Edit: February 05, 2013, 03:53:40 am by Tom Carpenter » Logged

~Tom~

Valencia, Spain
Offline Offline
Edison Member
*
Karma: 65
Posts: 2234
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@fungus, you don't need the whole folder, just the ld file.

True, but why not have the latest compiler, etc., as well?

Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 175
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Download WinAVR here, extract the files (it's a zip file)

http://sourceforge.net/projects/winavr/files/latest/download?source=files

a) Find the "bin" folder in the extracted files.

b) Find a similar looking folder in your Arduino installation.

Copy all files from (a) to (b).


The only BIN folder I find in the Arduino-1.0.3 dir is in the java folder. is that it?
Logged

Valencia, Spain
Offline Offline
Edison Member
*
Karma: 65
Posts: 2234
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

The only BIN folder I find in the Arduino-1.0.3 dir is in the java folder. is that it?

No. You want a folder with the same files in it as winavr's 'bin'.

Mine is: ./arduino-1.0.1/hardware/tools/avr/bin

Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 175
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

The only BIN folder I find in the Arduino-1.0.3 dir is in the java folder. is that it?

No. You want a folder with the same files in it as winavr's 'bin'.

Mine is: ./arduino-1.0.1/hardware/tools/avr/bin



Yep, found it. I was looking in the wrong place. It looks like it works now. Thanks everyone's help.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Worked for me.
Thank you very much.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Cheers Tom. A nice quick fix!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Thank you, thank you, thank you, Tom. The Id patch worked perfectly with Arduino 1.0.4 on Mac os X 10.6.8. Now I can program my attiny85!

Mario
Logged

Pages: 1 [2]   Go Up
Print
 
Jump to: