Go Down

Topic: Attiny45 speicherplatz probleme? (Read 462 times) previous topic - next topic

AndiIsl

hallo leute :) hab wieder ein problem glaub ich...

hab mir diesen chip http://www.reichelt.de/Atmel-Attiny-AVRs/ATTINY-45-20PU/3/index.html?;ACTION=3;LA=446;ARTICLE=68160;GROUPID=2958;artnr=ATTINY+45-20PU


gekauft und laut technischer daten hat der 4kbyte.

die arduino software zeigt mir an das mein sketch 4.406 bytes hat auf den arduino mega 2560!

heißt das das die paar zeilen schon garkein platz haben auf den attiny45?!

hier der sketch :/

Code: [Select]
  #include <EEPROM.h>
  const int sP = 10; //taster
  byte mode = 1;
  unsigned long cM = 0;
  unsigned long pM = 0;
  int fade;                   
  long ftime=0;
  int periode = 6000;
  int value = 0; 
  int hA[] = {
     90, 130, 30, 900};
  int hbeatIndex = 1; 
  long prevMillis;
   
  int ledpin = 13;
  void setup()
  {
   digitalWrite(sP, HIGH);
  }
   
  void loop()
  {
   mode = EEPROM.read(1);
   
   cM = millis();
    if (digitalRead(sP) == LOW && mode == 1 && cM - pM > 200){
      mode = 2;
      EEPROM.write(1, 2);
      pM = cM;
    }
      if (digitalRead(sP) == LOW && mode == 2 && cM - pM > 200){
      mode = 3;
      EEPROM.write(1, 3);
      pM = cM;
    }
    if (digitalRead(sP) == LOW && mode == 3 && cM - pM > 200){
      mode = 4;
      EEPROM.write(1, 4);
      pM = cM;
    }
      if (digitalRead(sP) == LOW && mode == 4 && cM - pM > 200){
      mode = 1;
      EEPROM.write(1, 1);
      pM = cM;
    }
   
    if (mode == 1){
    if ((millis() - prevMillis) > (long)(hA[hbeatIndex] * 1)){
          hbeatIndex++;
          if (hbeatIndex > 3) hbeatIndex = 0;
 
          if ((hbeatIndex % 2) == 0){
              for(value = 1 ; value <= 255; value+=5)
    {
      analogWrite(ledpin, value);
      delay(1);
    }
          }
          else{
              for(value = 255; value >= 0; value-=5)
    {
      analogWrite(ledpin, value);
      delay(1);
    } 
          }
          prevMillis = millis();
      }
  }
 
   if (mode == 2){
     ftime = millis();
     fade = 128+127*cos(2*PI/periode*ftime);
    analogWrite(ledpin, fade); 
   }
   
    }
   


kann ich den irgendwie noch abspecken?

liebe grüße! :)

Serenifly

Sicher, dass der MEGA die korrekte Referenz ist? Auf UNO oder Nano zeigt er nur 3,7kB an.

AndiIsl

haha du hast recht! hab grad auf attiny45 umgeschalten und siehe da, 3322 byte *__* is ja noch massig platz :-P DANKE!!

erni-berni

die Zeile:
Code: [Select]
     fade = 128+127*cos(2*PI/periode*ftime);
alleine frisst schon 1.434 Byte.
Kann man das nicht anders berechnen, z.B. mit Tabellen ?

Serenifly

Dafür reicht auch eine einfache Näherungs-Funktion:

z.B. das hier:
http://lab.polygonal.de/?p=205

Oder der Klassiker:
http://en.wikipedia.org/wiki/Bhaskara_I%27s_sine_approximation_formula

Mit cos(x) = sin(PI/2 - x)

Go Up