[RISOLTO]Attiny85, funzione TONE() ed errori vari....

Salve a tutti,

Ho appena finito d'ultimare un piccolo circuito d'allarme, ma colpo di scena, non riesco a far compilare la funzione "tone()" e il compilatore va in errore, se poi provo ad inserire come programmatore "Arduino UNO", il tutto si compila.

Quello che vorrei fare sarebbe d'inviare al buzzer delle frequenze variabili.

La funzione inserita in un contesto di test:

int buzzer=4;

void setup()
{
pinMode(buzzer,OUTPUT);
tone(4, 200,200);
}
void loop()
{
}

Ciao e buona serata

Hai tu qualche cosa che non va sul tuo sistema ... ... ho appena compilato il tuo codice :

Binary sketch size: 1,578 bytes (of a 8,192 byte maximum)

Che versione del core ATtiny stai usando ???

Guglielmo

Edit: QUESTA è l'ultima versione del core ATtiny (IDE 1.0.5)

gpb01:
Hai tu qualche cosa che non va sul tuo sistema …
… ho appena compilato il tuo codice :

Binary sketch size: 1,578 bytes (of a 8,192 byte maximum)

Che versione del core ATtiny stai usando ???

Guglielmo

Edit: QUESTA è l’ultima versione del core ATtiny (IDE 1.0.5)

Ciao Guglielmo,

Infatti hai ragione, le righe di test funzionano, mi sono accorto ora che è il contesto a darmi problemi e non capisco il perchè:

#include "LedControl.h" 
LedControl lc=LedControl(2,1,0,1);
 
 int tempPin=3;
 int buzzer=4;
 float campione;
 float tempC;
 void setup()
 {
   pinMode(buzzer,OUTPUT);
   pinMode(tempPin,INPUT);
   lc.shutdown(0,false);
   lc.setIntensity(0,15);
   lc.clearDisplay(0);
 }
 void stampaLaCifra(float num)
 {
   int unit;
   int decine;
   int v=(int)num;
   float diff=num-v;
   diff=diff*100;
   unit=v%10;
   v=v/10;
   decine=v%10;
   v=v/10;
   lc.setDigit(0,1,(byte)unit,true);
   lc.setDigit(0,0,(byte)decine,false);
 }
 void loop()
 {
   campione=0; 
   for(int i=0;i<150;i++)
   campione+=analogRead(tempPin); 
   delay(2);
   campione=campione/150; 
  tempC=(5.0*campione*100.0)/1023.0;  //se bypasso questa riga lo compila
  delay(200);
       stampaLaCifra(tempC);
       delay(200);
       if(tempC>30){
       tone(buzzer, 2800,1800); //oppure questa
       }
     }

Come noterai, il software provvede a far suonare il buzzer ad una condizione predefinita, se lo compilo, mi da un errore, se metto un “rem” sulle righe che ho indicato, lo compila senza problemi.
Ciao

Copiato il tuo codice, mi compila (IDE 1.0.5).

Dimensione del file binario dello sketch: 5.446 bytes (su un massimo di 32.256 bytes)

A te che errore da?

nid69ita: Copiato il tuo codice, mi compila (IDE 1.0.5).

Dimensione del file binario dello sketch: 5.446 bytes (su un massimo di 32.256 bytes)

A te che errore da?

Ciao nid69ita, Mi da questo errore:

c:/arduino-1.0.5-r2/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr25/crttn85.o:(.init9+0x2): relocation truncated to fit: R_AVR_13_PCREL against symbol `exit' defined in .fini9 section in c:/arduino-1.0.5-r2/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/avr25\libgcc.a(_exit.o)

Per quanto riguarda le caratteristiche del tipo di micro, ho usato "Attiny85 con 1 Mhz e oscillatore interno.

Ciao

Programma troppo grosso!!! Aah, okay. Compilavo per Arduino Uno. Da errore anche a me. Ma non è quella riga a darti errore, prova a commentare ad esempio stampaLaCifra(tempC); poi compila. Perché il tuo programma è troppo grosso per stare su un AtTiny85.

nid69ita: Programma troppo grosso!!! Aah, okay. Compilavo per Arduino Uno. Da errore anche a me. Ma non è quella riga a darti errore, prova a commentare ad esempio stampaLaCifra(tempC); poi compila. Perché il tuo programma è troppo grosso per stare su un AtTiny85.

Azzzzzz!! Che peccato hai ragione!!Mi ero abituato bene con il 328

Grazie per avermi risolto l'incognita

Ciao

Non credo affatto che sia troppo grosso ... ... credo invece che dovevi spendere un po' più di tempo a fare ... una ricerca qui sul forum per quel errore. ]:D

Se ne è parlato varie volte, il "linker" che arriva con la 1.0.5 ha un buco e quando cerchi di linkre per ATtiny codice superiore ai 4 KBytes va in errore.

Devi sostituire il link con la versione più aggiornata ... ... su che sistema operativo sei ?

@ Nid : ma come fai a dire che è troppo grosso se, compilato per 328P, occupa solo 5KB (... ed il core ATtiny85 è normalmente più ottimizzato) ???

Guglielmo

E poi l'Attiny85 ha 8K di flash, da 5 ad 8 a casa mia avanza 3 ;)

Cmq tornando seri l'errore è del linker, come ha detto Guglielmo. Devi aggiornare il file ld.exe.

SE sei su Win, ti allego l’ultima versione del “linker”, lo devi sostituire a quello presente in :

"C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\bin"

… e vedrai che l’errore scompare :wink:

Guglielmo

ld.zip (321 KB)

gpb01: @ Nid : ma come fai a dire che è troppo grosso se, compilato per 328P, occupa solo 5KB (... ed il core ATtiny85 è normalmente più ottimizzato) ??? Guglielmo

In base al messaggio. Mi fido troppo del linker :grin:

nid69ita:
In base al messaggio. Mi fido troppo del linker :grin:

… ma il linker NON ti stà dicendo che il file è troppo grande per l’ATTiny85 (… e dubito che glie ne possa fregare qualche cosa), ti stà dicendo che va in lui in errore nel rilocare alcuni parti ! :wink:

Guglielmo

gpb01: Non credo affatto che sia troppo grosso ... ... credo invece che dovevi spendere un po' più di tempo a fare ... una ricerca qui sul forum per quel errore. ]:D

Se ne è parlato varie volte, il "linker" che arriva con la 1.0.5 ha un buco e quando cerchi di linkre per ATtiny codice superiore ai 4 KBytes va in errore.

Devi sostituire il link con la versione più aggiornata ... ... su che sistema operativo sei ?

@ Nid : ma come fai a dire che è troppo grosso se, compilato per 328P, occupa solo 5KB (... ed il core ATtiny85 è normalmente più ottimizzato) ???

Guglielmo

Ciao Guglielmo,

Si hai ragione, potevo fare un controllo più accurato, utilizzando l'errore generato ed invece ho pensato a priori che fosse la funzione a generare problemi.

Utilizzo Windows 7 e adesso seguirò il tuo prezioso consiglio :)

Ciao

matrix77: Si hai ragione, potevo fare un controllo più accurato, utilizzando l'errore generato ed invece ho pensato a priori che fosse la funzione a generare problemi.

Nessun problema ... è che ... avresti risolto prima ed evitato di ... dire parolacce perché non funzionava XD XD XD

Installa il file ld.exe che ti ho postato. Se da console lanci ld.exe -V dovrebbe darti la versione 2.23.2 ;)

Guglielmo

gpb01:

matrix77: Si hai ragione, potevo fare un controllo più accurato, utilizzando l'errore generato ed invece ho pensato a priori che fosse la funzione a generare problemi.

Nessun problema ... è che ... avresti risolto prima ed evitato di ... dire parolacce perché non funzionava XD XD XD

Installa il file ld.exe che ti ho postato. Se da console lanci ld.exe -V dovrebbe darti la versione 2.23.2 ;)

Guglielmo

Funzionaaaa!!! ]:D Grazie Guglielmo, mi hai tolto un peso, altrimenti avrei optato per uno di quei cicalini stupidi a nota fissa e l'avrei alimentato tramite "digitalWrite", ma odio quei cicalini eheh.

Adesso darò anche un occhiata alle precedenti "puntate" su questo argomento che onestamente non conoscevo.

Ringrazio anche "nid69ita" che mi ha fatto comunque riflettere su un aspetto che tendo a trascurare e per l'appunto, quello della memoria disponibile; purtroppo a volte mi faccio prendere dall'entusiasmo di fare che poi tralascio degli aspetti tecnici che vanno sempre considerati ;)

Ciao e grazie di nuovo!!

matrix77: Funzionaaaa!!! ]:D

Non ne avevo dubbio XD XD XD

E ... tranquillo che a ricordarti che in memoria non ci sta ... ci sono dei bei messaggini ... :grin:

Guglielmo