Attiny 44 an Ardunio problem.

OP #2711086
Lesenswert?

Hi ihr,
ich will mit dem Arudino Board einen Atiny programieren... kleinere 
Programme funktionieren auch anur mein richtiges mag er nicht...


und zwar sollen die Pins 0-5 als Analoge ins bzw outs funktionieren und 
dann 3 kleine Touchfelder abfragen und analog auslesen...

mit dem arduino board klappt das auch alles einwandfrei...

nur mit dem Attiny mag das nicht oO

Weder Töne noch sonst was gibt er mit im Loop aus... scheint so als 
würde er sich vorrher aufhängen....

hier mal der Quellcode... Hat jemand eine Ide??? =( =(





/*********************************************************************** 
***********
 * Allgemeine Deklaration
 ************************************************************************ 
**********/
#define NOTE1    40
#define NOTE2    30
#define NOTE3    20

// Lautsprecherausgang
const int Ton = 10;



// Analog-Pins 0, 1, 2, 3,
const int TP1A = A0;
const int TP1B = A1;
const int TP2A = A2;
const int TP2B = A3;
const int TP3A = A4;
const int TP3B = A5;

// Sensorwert
// unten für die Abfrage des Sensorwerts nötig
int sensorValue1 = 0;
int sensorValue2 = 0;
int sensorValue3 = 0;
// Counter für die Lautstärkeregelung
int counter1 = 0;
int counter2 = 0;

//Caryflags für Sensorlogik
byte next  = 0;
byte wait  = 0;
byte play  = 0;
byte reset = 0;
byte hupe1 = 0;
byte hupe2 = 0;

// Kalibration
// die ersten 256 Messwerte werden summiert und mit Hilfe der letzten 50 
Werte wird der Mittelwert bestimmt
int Kalibrationarray1[256];
int Kalibration1 = 0;
int Kalibrationarray2[256];
int Kalibration2 = 0;
int Kalibrationarray3[256];
int Kalibration3 = 0;




/*********************************************************************** 
***********
 * Hauptprogramm
 ************************************************************************ 
**********/
// Führt die Deklaration der Pins durch sowie die Kalibrierung der 
Sensorik
void setup(void){

  pinMode(Ton,OUTPUT);

  // Zuweisung der Pins für Sensorik
  pinMode(TP1A,OUTPUT);
  pinMode(TP1B,OUTPUT);
  pinMode(TP2A,OUTPUT);
  pinMode(TP2B,OUTPUT);
  pinMode(TP3A,OUTPUT);
  pinMode(TP3B,OUTPUT);

  // Alles entladen
  digitalWrite(TP1A, LOW);
  digitalWrite(TP1B, LOW);
  digitalWrite(TP2A, LOW);
  digitalWrite(TP2B, LOW);
  digitalWrite(TP3A, LOW);
  digitalWrite(TP3B, LOW);

  delayMicroseconds(5);


  Kalibrierung();

}

void loop(){

  digitalWrite(Ton,HIGH);
  delayMicroseconds(30);
  digitalWrite(Ton,LOW);
  delayMicroseconds(30);

  // Laed und entlaed die Kondensatoren stetig
  // und erzeugt eine konstante Spannung
  // deren Aenderung kann anschliessend gemessen werden
  Kapazitaet();
  Kapazitaet();

  // erkennt Spannungsaenderungen
  // leitet entsprechende Aktionen ein
  Sensorlogik();

}


/*********************************************************************** 
***********
 * Kalibrierung
 ************************************************************************ 
**********/
void Kalibrierung(){
  // 256 Messwerte werden summiert und anschließend die letzten 50 zur 
Bildung eines Mittelwerts benutzt
  for (int i=0; i<255; i++){

    Kapazitaet();
    Kapazitaet();

    Kalibrationarray1[i] = analogRead(TP1A);
    Kalibrationarray2[i] = analogRead(TP2A);
    Kalibrationarray3[i] = analogRead(TP3A);
    delay(4);

  }

  for(int i=215; i<255; i++){
    Kalibration1 = Kalibration1 + Kalibrationarray1[i];
    Kalibration2 = Kalibration2 + Kalibrationarray2[i];
    Kalibration3 = Kalibration3 + Kalibrationarray3[i];
  }

  Kalibration1 = Kalibration1 / 40;
  Kalibration2 = Kalibration2 / 40;
  Kalibration3 = Kalibration3 / 40;

}

/*********************************************************************** 
***********
 * Kapazitive Schaltung
 ************************************************************************ 
**********/
void Kapazitaet(){

  // damit keine Ladung abfliessen kann werden beide Als Input 
geschaltet
  pinMode(TP1A,INPUT);
  pinMode(TP1B,INPUT);
  digitalWrite(TP1A, LOW);
  digitalWrite(TP1B, LOW);
  pinMode(TP2A,INPUT);
  pinMode(TP2B,INPUT);
  digitalWrite(TP2A, LOW);
  digitalWrite(TP2B, LOW);
  pinMode(TP3A,INPUT);
  pinMode(TP3B,INPUT);
  digitalWrite(TP3A, LOW);
  digitalWrite(TP3B, LOW);


  delayMicroseconds(5);


  // C wird aufgeladen
  pinMode(TP1A,OUTPUT);
  digitalWrite(TP1A, HIGH);
  pinMode(TP2A,OUTPUT);
  digitalWrite(TP2A, HIGH);
  pinMode(TP3A,OUTPUT);
  digitalWrite(TP3A, HIGH);


  delayMicroseconds(5);


  pinMode(TP1A,INPUT);
  digitalWrite(TP1A, LOW);
  pinMode(TP2A,INPUT);
  digitalWrite(TP2A, LOW);
  pinMode(TP3A,INPUT);
  digitalWrite(TP3A, LOW);

  // Ladung aus C abfuehren auf GND
  pinMode(TP1B,OUTPUT);
  digitalWrite(TP1B, LOW);
  pinMode(TP2B,OUTPUT);
  digitalWrite(TP2B, LOW);
  pinMode(TP3B,OUTPUT);
  digitalWrite(TP3B, LOW);
}

/*********************************************************************** 
***********
 * Sensor Logik
 ************************************************************************ 
**********/

void Sensorlogik (){
  // Ermitteln und zuweißen des Werts am Analogen-Eingang A1 und A2
  sensorValue1 = analogRead(TP1A);
  sensorValue2 = analogRead(TP2A);
  sensorValue3 = analogRead(TP3A);

  if(sensorValue1 > Kalibration1 + 10  &&  sensorValue2 < Kalibration2 + 
11  &&  sensorValue3 < Kalibration3 + 11){

    Tone(40);

  }

  if(sensorValue2 > Kalibration2 + 10  &&  sensorValue2 < Kalibration1 + 
11  &&  sensorValue3 < Kalibration3 + 11){

    Tone(30);

  }

  if(sensorValue3 > Kalibration3 + 10  &&  sensorValue1 < Kalibration1 + 
11  &&  sensorValue2 < Kalibration2 + 11){

    Tone(20);

  }

  if(sensorValue1 > Kalibration1 + 10  &&  sensorValue2 > Kalibration2 + 
11){

    Tone(40);
    delay(100);
    Tone(30);
    delay(100);
    Tone(20);
    delay(100);

  }

}

void Tone (int Laenge){

  digitalWrite(Ton,HIGH);
  delayMicroseconds(Laenge);
  digitalWrite(Ton,LOW);
  delayMicroseconds(Laenge);

}
Gast #2711188
Lesenswert?

so is besser....

es kommt immrehin schon was aber es knallt nur... normal sollte der ton 
gehalten werden der in "ton" erzeugt wird...



/*********************************************************************** 
***********
 * Allgemeine Deklaration
 ************************************************************************ 
**********/
#define NOTE1    40
#define NOTE2    30
#define NOTE3    20

// Lautsprecherausgang
const byte Ton = 10;



// Analog-Pins 0, 1, 2, 3,
const byte TP1A = 0;
const byte TP1B = 1;
const byte TP2A = 2;
const byte TP2B = 3;


// Sensorwert
// unten für die Abfrage des Sensorwerts nötig
int sensorValue1 = 0;
int sensorValue2 = 0;
int sensorValue3 = 0;

int counter = 0;


// Kalibration
// die ersten 256 Messwerte werden summiert und mit Hilfe der letzten 50 
Werte wird der Mittelwert bestimmt
int Kalibration1 = 0;
int Kalibration2 = 0;





/*********************************************************************** 
***********
 * Hauptprogramm
 ************************************************************************ 
**********/
// Führt die Deklaration der Pins durch sowie die Kalibrierung der 
Sensorik
void setup(void){

  pinMode(Ton,OUTPUT);

  // Zuweisung der Pins für Sensorik
  pinMode(TP1A,OUTPUT);
  pinMode(TP1B,OUTPUT);
  pinMode(TP2A,OUTPUT);
  pinMode(TP2B,OUTPUT);


  // Alles entladen
  digitalWrite(TP1A, LOW);
  digitalWrite(TP1B, LOW);
  digitalWrite(TP2A, LOW);
  digitalWrite(TP2B, LOW);


  delayMicroseconds(5);

  for(int i=0; i <= 250; i++){
    Kapazitaet();
  }

  Kalibration1 = analogRead(TP1A);
  Kalibration2 = analogRead(TP2A);

}

void loop(){


  // Laed und entlaed die Kondensatoren stetig
  // und erzeugt eine konstante Spannung
  // deren Aenderung kann anschliessend gemessen werden
  Kapazitaet();


  // erkennt Spannungsaenderungen
  // leitet entsprechende Aktionen ein
  Sensorlogik();


}


/*********************************************************************** 
***********
 * Kapazitive Schaltung
 ************************************************************************ 
**********/
void Kapazitaet(){

  // damit keine Ladung abfliessen kann werden beide Als Input 
geschaltet
  pinMode(TP1A,INPUT);
  pinMode(TP1B,INPUT);
  digitalWrite(TP1A, LOW);
  digitalWrite(TP1B, LOW);
  pinMode(TP2A,INPUT);
  pinMode(TP2B,INPUT);
  digitalWrite(TP2A, LOW);
  digitalWrite(TP2B, LOW);




  delayMicroseconds(5);


  // C wird aufgeladen
  pinMode(TP1A,OUTPUT);
  digitalWrite(TP1A, HIGH);
  pinMode(TP2A,OUTPUT);
  digitalWrite(TP2A, HIGH);



  delayMicroseconds(5);


  pinMode(TP1A,INPUT);
  digitalWrite(TP1A, LOW);
  pinMode(TP2A,INPUT);
  digitalWrite(TP2A, LOW);


  // Ladung aus C abfuehren auf GND
  pinMode(TP1B,OUTPUT);
  digitalWrite(TP1B, LOW);
  pinMode(TP2B,OUTPUT);
  digitalWrite(TP2B, LOW);

}

/*********************************************************************** 
***********
 * Sensor Logik
 ************************************************************************ 
**********/

void Sensorlogik (){
  // Ermitteln und zuweißen des Werts am Analogen-Eingang A1 und A2
  sensorValue1 = analogRead(TP1A);
  sensorValue2 = analogRead(TP2A);

  if( sensorValue1 > Kalibration1 + 10  &&  sensorValue2 < Kalibration2 
+ 11){

    Tone(40);

  }

  if(sensorValue2 > Kalibration2 + 10  &&  sensorValue1 < Kalibration1 + 
11){

    Tone(30);

  }

  if(sensorValue1 > Kalibration1 + 10  &&  sensorValue2 > Kalibration2 + 
10){

    Tone(40);
    delay(100);
    Tone(30);
    delay(100);
    Tone(20);
    delay(100);

  }

}

void Tone (int Laenge){

  digitalWrite(Ton,HIGH);
  delayMicroseconds(Laenge);
  digitalWrite(Ton,LOW);
  delayMicroseconds(Laenge);

}
Gast #2711218
Lesenswert?

so......

es töner aber noch nicht richtig... aberimmerhin kommt schon was raus...

was kann ich noch vereinfachen finde nichts ehr =(




/*********************************************************************** 
***********
 * Allgemeine Deklaration
 ************************************************************************ 
**********/

// Lautsprecherausgang
const byte Ton = 10;

// Analog-Pins 0, 1, 2, 3,
const byte TP1A = 0;
const byte TP1B = 1;
const byte TP2A = 2;
const byte TP2B = 3;

int sensorValue1 = 0;
int sensorValue2 = 0;
int sensorValue3 = 0;

int Kalibration1 = 0;
int Kalibration2 = 0;





/*********************************************************************** 
***********
 * Hauptprogramm
 ************************************************************************ 
**********/

void setup(void){

  pinMode(Ton,OUTPUT);

  // Zuweisung der Pins für Sensorik
  pinMode(TP1A,OUTPUT);
  pinMode(TP1B,OUTPUT);
  pinMode(TP2A,OUTPUT);
  pinMode(TP2B,OUTPUT);


  // Alles entladen
  digitalWrite(TP1A, LOW);
  digitalWrite(TP1B, LOW);
  digitalWrite(TP2A, LOW);
  digitalWrite(TP2B, LOW);


  delayMicroseconds(5);

  for(byte i=0; i <= 150; i++){
    Kapazitaet();
  }

  Kalibration1 = analogRead(TP1A);
  Kalibration2 = analogRead(TP2A);

}

void loop(){


  Kapazitaet();


  Sensorlogik();


}


/*********************************************************************** 
***********
 * Kapazitive Schaltung
 ************************************************************************ 
**********/
void Kapazitaet(){

  pinMode(TP1A,INPUT);
  pinMode(TP1B,INPUT);
  digitalWrite(TP1A, LOW);
  digitalWrite(TP1B, LOW);
  pinMode(TP2A,INPUT);
  pinMode(TP2B,INPUT);
  digitalWrite(TP2A, LOW);
  digitalWrite(TP2B, LOW);




  delayMicroseconds(5);



  pinMode(TP1A,OUTPUT);
  digitalWrite(TP1A, HIGH);
  pinMode(TP2A,OUTPUT);
  digitalWrite(TP2A, HIGH);



  delayMicroseconds(5);


  pinMode(TP1A,INPUT);
  digitalWrite(TP1A, LOW);
  pinMode(TP2A,INPUT);
  digitalWrite(TP2A, LOW);


  pinMode(TP1B,OUTPUT);
  digitalWrite(TP1B, LOW);
  pinMode(TP2B,OUTPUT);
  digitalWrite(TP2B, LOW);

}

/*********************************************************************** 
***********
 * Sensor Logik
 ************************************************************************ 
**********/

void Sensorlogik (){
  // Ermitteln und zuweißen des Werts am Analogen-Eingang A1 und A2
  sensorValue1 = analogRead(TP1A);
  sensorValue2 = analogRead(TP2A);

  if( sensorValue1 > Kalibration1 + 10  &&  sensorValue2 < Kalibration2 
+ 11){

    Tone(40);

  }

  if(sensorValue2 > Kalibration2 + 10  &&  sensorValue1 < Kalibration1 + 
11){

    Tone(30);

  }

  if(sensorValue1 > Kalibration1 + 10  &&  sensorValue2 > Kalibration2 + 
10){

    Tone(40);
    delay(100);
    Tone(30);
    delay(100);
    Tone(20);
    delay(100);

  }

}

void Tone (int Laenge){

  for(byte i=0; i <= 250; i++){
  digitalWrite(Ton,HIGH);
  delayMicroseconds(Laenge);
  digitalWrite(Ton,LOW);
  delayMicroseconds(Laenge);
  }

}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren