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); }
wie geasgt mit Ardunio klappt ales einwadnfrei... nur mit dem Tiny noch... was muss ich wie anderst deklarieren?? :'( danke schonmal!!!
also 4kbit speicher hat er sram kp oO meinste das reicht nich? oO shit..
Im Datenblatt steht wieviel sram er hat. Die Größe der Datentypen hier: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Ganzzahlige_Datentypen_.28Integer.29
hättest du eine idee was ich kürzen könnte? muss doch iwi gehn oder?^^
Notfalls Assembler nehmen, das spart sehr viel Platz. Oder einfach auf den ATtiny84A umsteigen, der hat doppelt so viel Speicherplatz.
hm... kk mal schaun--- kann ich mit Aruino Assempler programieren? wenn ja wie?^^
Attiny84 reicht auch nicht, solange der so speicherfressend programmiert wird. Nicht der µC ist falsch, sondern das Konzept. Welche Variablen belegen am meisten sram? Bei über 1,5KB hast du Glück gehabt das dein Arduino Board noch gereicht hat.
wo kann ich das sehen? bin da leider noch recht neu in dem Gebiet... -.- sry^^
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); }
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); } }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.