- Labornetzteil AliExpress         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 36

Thema: Fehler im Sketch für ATtiny?

  1. #21
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Anzeige

    Praxistest und DIY Projekte
    Die Ferien sind längst vorbei und ich versuche es weiter.
    Danke Sisor, für deine Wissensvermittlung. Das hat mir sehr geholfen!
    Der Sketch lief zwar, aber auch wenn nichts gemacht werden sollte flossen 30-40mA.
    Kann sein, das es an der geringen Spannung und den billigen Servos liegt. Eben, das sie die Position nicht eindeutig finden und weiter versuchen.
    Jetzt habe ich nach etlichen Versuchen einen sketch gefunden, welcher selbst bei 2,6 Volt läuft.
    Hier wird das/der Servo(Wie überhaupt-der-die-das) in Schritten mit Pause geführt.
    Mein Problem ist aber, das hier eine ständige Wiederholfunktion im Vordergrund steht. Eine-for- Schleife.
    Ich habe viel Versucht, aber die Softwareservo Bibliothek nimmt nichts an. Mit anderen Worten. Es passiert nichts.
    Begeister bin ich von der ATtiny Stabilität. Weit über 100 x habe ich ihn schon aus der Fassung gezogen und in das Steckbrett gesetzt.

    Also würde ich gerne wissen, wie ich die for Schleife ersetze, sodass nur nach Aufforderung das Ziel in einzelnen Schritten erreicht wird. Wie immer hilft mir das Arduino Kochbuch nicht weiter. Da werden rotierende Servos beschriebe. Auch mit ner "for" Schleife. Statt nur den Grundcode zu geben sind in allen Beispielen immer 2 Funktionen verknüpft.
    Damit habe ich Probleme

    Achim, der Versuchende.
    Code:
    #include <SoftwareServo.h>
    
    SoftwareServo servo;
    void setup()
    {
      servo.attach(0);} //benennt den Pin des Servos
    
    void loop() 
    {
        int pos; //wechselnde Position, nach numerischen Werten???
        for(pos = 30; pos < 150; pos += 1)//Bestimmung,soll in 1ner Schritten von 150 nach 30° laufen
        {
            servo.write(pos); // //Nun soll das Servo laufen           
            delay(20);                     
            SoftwareServo::refresh();//this row....
            
        }
     {   delay(2000);
    }
    
    
    {
      delay(2000);
    }
    
        for(pos = 150; pos>=30; pos-=1) //das Gleiche rückwärts
        {                               
            servo.write(pos);             
            delay(20);                     
            SoftwareServo::refresh();//This row....
            
        }
        {
          delay(2000);
    }
    }

  2. #22
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Wenn ich in dem unteren Sketch nur
    Code:
    servo.write(pos=150);
    delay(50);
    {
    delay(1000);
    }
    servo.write(pos=30);
    delay(5o);
    {
    delay(1000),
    }
    eingebe, versucht es wenigstens etwas dem Befehl zu folgen.

    Wenn ich
    Code:
    #include <SoftwareServo.h>
    
    SoftwareServo servo;
    
    void setup()
    {
     servo.attach(0);
    
    }
    
    void loop()
    {
       int pos; 
    
    
    {servo.write(pos=30);// //Nun soll das Servo laufen           
            delay(5); 
    servo.write(pos=30);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=32);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=34);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=36);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=38);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=40);// //Nun soll das Servo laufen
             SoftwareServo::refresh();          
            delay(5); 
            servo.write(pos=42);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=44);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=46);// //Nun soll das Servo laufen           
            delay(5);
            servo.write(pos=48);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=50);// //Nun soll das Servo laufen
            SoftwareServo::refresh();           
            delay(5); 
            servo.write(pos=52);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=54);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=56);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=58);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=60);// //Nun soll das Servo laufen           
            delay(5);  
                                
            SoftwareServo::refresh();
            servo.write(pos=62);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=64);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=66);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=68);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=70);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=72);// //Nun soll das Servo laufen
             SoftwareServo::refresh();          
            delay(5); 
            servo.write(pos=74);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=76);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=78);// //Nun soll das Servo laufen           
            delay(5);
            servo.write(pos=80);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=82);// //Nun soll das Servo laufen
            SoftwareServo::refresh();           
            delay(5); 
            servo.write(pos=84);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=86);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=88);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=90);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=92);// //Nun soll das Servo laufen           
            delay(5);  
                                
            SoftwareServo::refresh();
    }
    {delay(1000);
    }
    
    {
      servo.write(pos=90);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=88);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=86);// //Nun soll das Servo laufen           
            delay(5);  
              servo.write(pos=84);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=82);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=80);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=78);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=76);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=74);// //Nun soll das Servo laufen           
            delay(5);                    
            SoftwareServo::refresh();
    
            servo.write(pos=72);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=70);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=68);// //Nun soll das Servo laufen           
            delay(5);  
              servo.write(pos=66);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=64);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=62);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=60);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=58);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=56);// //Nun soll das Servo laufen           
            delay(5);                    
            SoftwareServo::refresh();
            servo.write(pos=54);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=52);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=50);// //Nun soll das Servo laufen           
            delay(5);  
              servo.write(pos=48);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=46);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=44);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=42);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=40);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=38);// //Nun soll das Servo laufen           
            delay(5);                    
            SoftwareServo::refresh();
            servo.write(pos=36);// //Nun soll das Servo laufen           
            delay(5); 
            servo.write(pos=34);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=32);// //Nun soll das Servo laufen           
            delay(5);  
              servo.write(pos=30);// //Nun soll das Servo laufen           
            delay(5);  
            servo.write(pos=28);// //Nun soll das Servo laufen           
             
            SoftwareServo::refresh();
    }
    {
      delay(1000);
    }
    }
    eingebe, geht nichts??

  3. #23
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Hi achso.
    Lies dir mal hier die Beschreibung von refresh() durch und warte bis es 'KLICK' macht.

  4. #24
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Hi Sisor,
    da habe ich die Library auch her und das gelesen.
    Code:
    refresh()
        You must call this at least once every 50ms to keep the Servos updated. You can call it as often as you like, 
    it won't fire more than once every 20ms. When it does fire, it will take from .5 to 2.5 milliseconds to complete,
     but won't disable interrupts.
    Soweit ich das verstehe, verstehe ich nicht viel. Für mich steht da, dass alle 50ms die Servos upgedatet werden sollen. Was aber das Programm nicht unterbricht. Das es nicht mehr als alle 20ms feuert verstehe ich nicht. Wenn es aber feuert, ist es nach 2,5ms fertig?
    Gerne hätte ich den "Klick". Blöderweise aber nur ein Heulen und Pfeifen.
    Heute Abend probiere ich weiter rum. Mit Lernen ist nicht viel drin. Ich habe "mein Ding vor einigen Jahren weggekriegt". Eben Pech gehabt. Nun muss es so gehen. Ich muss immer alles gleichzeitig sehen, dann kann ich kombinieren. Bei der Programmierung muß man sich viel Neues merken, das leistet mein Gehirn nicht mehr.
    Schönen Dank
    Achim

  5. #25
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Ok. Die Routine refresh() muss mindestens einmal alle 50ms aufgerufen werden. Deine Programme haben in der loop delay()-Aufrufe, die mehr Zeit verstreichen lassen.

    Edit: Habe mir den Quelltext der Bibliothek angeschaut: Da steht nichts von maximal 50ms. Komisch... Ich war mir sicher, das wäre die Bibliothek, wo nach 50ms nichts mehr geht. Hab's verwechselt.
    Geändert von Sisor (04.11.2016 um 14:58 Uhr)

  6. #26
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Danke,
    ich hatte die Delays zusammengezählt und dachte das es reicht. Weiter unten vergaß ich allerdings den refresh einzufügen.

    Nun habe ich experimentiert.

    Code:
            servo.write(pos=34);// //Nun soll das Servo laufen           
            delay(15); 
            SoftwareServo::refresh();
    und nach jedem Positionswertwechsel ein refresch eingesetzt.
    Die 5 mS reichten nicht aus. Das Servo fand die Position nicht.
    Deshalb ging ich mit der Pause hoch.
    Bei 20 mS ist nichts mehr los. Das Oszilloskop hat nur noch eine krickelige 100mV Spannung angezeigt??
    Die Position des Servos hängt extrem von der Spannung ab.
    Bei 4 Volt kommt es mit 60° noch hin. Bei 3Volt sind es noch 30°.
    Darunter ist dann Schluß.
    Ärgerlich, denn der Sweep Sketch geht ohne Probleme bis 2,6 Volt.
    Code:
    for(pos = 30; pos < 150; pos += 1)//Bestimmung,soll in 1ner Schritten von 150 nach 30° laufen
    Bei verwendung dieser Zeile geht es.

    Also ich möchte dass das Servo, wenn nichts ist, auf 90° steht.

    Ist der eine Taster gedrückt soll das Servo auf 55° laufen.

    Ist der andere Taster gedrückt soll das Servo auf 125° laufen.

    Nach einer Pause soll es dann wieder auf 90° laufen.

    Der Sketch für den ProMini läuft gut und wird auch verwendet.


    Die Story:

    Meine Tochter ist 15 und geht auf eine Gesamtschule.
    Über den Technik Untericht habe ich mich schon immer geärgert, da kein Material und nur abgearbeitetes Schrott Werkzeug vorhanden ist.
    Vor 2 Jahren hatten Sie das Thema "Elektrizität".
    Da sprach ich schon den Lehrer, welcher auch der Rektor ist an, ob er nicht mal mehr Spaß in seinen Untericht bringen möchte. Vielleicht kleine Spaßroboter bauen. Daraufhin entwickelte ich mehrere kleine Lichtfolger (Ja Logiktechnik kann ich). Keiner kostete nicht mehr als 7€. Meine Tochter baute jeden von ihnen in 1 1/2 Stunden zusammen. Wir hatten vordem aber auch schon viele andere mit aufwendiger Analog Technik zusammengebaut.
    Ich hatte jeden Schritt aufgeführt und fotografiert. Aber der Lehrer hatte dann dafür keine Zeit.
    Jetzt 2 Jahre danach unterichtet er Elektronik im Fach Technik.
    Meine Tochter sagte: "Wir haben heute die 2. Doppelstunde damit zugebracht 4x 2cm lange Kupferdrähte zu Quadraten zusammen zu Löten. Mit 60 Watt Lötkolben welche sonst benutzt werden, um in Holz Buchstaben zu brennen."
    "Tu was."
    Das tat ich dann.
    Simpel mussten sie sein und einfach nachvollziehbar. Den ProMini fertig programmiert mit angelöteten Litzen. Eben als Blackbox. Auch das Relais mit Litze verlötet, da SMD.
    Dafür die anderen Bauteile und das Zusammenspiel erklärt.
    15 Tragplatten mit der Oberfräse ausgefräst und 15 x das Material zusammengestellt.
    In der Zwischenzeit waren Ferien. Meine Tochter hatte danach die Lichtfolger von damals mit zum Untericht genommen und vorgeführt. Der Lehrer war erstaunt und konnte sich nicht daran erinnern, dass wir ihm seinerzeit Muster und eine Taschenlampe + Anleitungsdoku auf CD überliessen.
    Natürlich hatte sie jetzt auch noch einen Kasten mit Lötstation, Multimeter, 3. Hand, Regelbares Netzteil, Werkzeug usw mitbekommen.
    Das geht jetzt seinen Gang und wie ich meine Tochter einschätze, spielt das Monster jetzt den Lehrer an die Wand. Jedenfalls ist sein Untericht jetzt gestört.

    Deshalb also mein unermütliches Nerven. 15 ATtiny sind preiswerter als 15 ProMini . Aber es sind ja auch noch 15 Motoren,15 Relais und 15 Servos im Spiel.
    Nur Analog mit H-Brücke, das wäre zu viel für die Handcomputerträger gewesen. Dann lieber Blackbox.

    Bild hier  

    Das ist ein Antriebsset.
    Die Elektronikset`s sind alle in der Schule.

    Trotzdem möchte ich gerne die gleiche Funktion mit dem ATtiny verwirklichen. Für ein "Privates" Projekt.
    Geändert von achso (04.11.2016 um 20:43 Uhr)

  7. #27
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Hey, du hast eine falsche Vorstellung davon wie ein Servo bzgl. des Winkels arbeitet. Der Winkel ist nicht vom Pegel der Spannung sondern der Dauer des Pulses abhängig. Ich empfehle dazu den Servo-Artikel auf RN-Wissen.de zu lesen.
    Oder habe ich dich falsch verstanden?
    Geändert von Sisor (04.11.2016 um 22:08 Uhr)

  8. #28
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Doch, ich weiss wie ein Servo arbeitet. Wenn ich die Spannung reduziere, läßt das Servo Schritte aus, oder der ATtiny. Ich habe schon ne Menge Servos mit 555 und 4001 Ic`s gesteuert.
    Aber die Sache mit dem ATtiny hat sich gerade erledigt. Ich Hirsch habe gerade eben gelesen, das "if" und "else" nicht funktionieren.

    Schade,
    Aber dankeschön!

    Achim

  9. #29
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Zitat Zitat von achso Beitrag anzeigen
    Ich Hirsch habe gerade eben gelesen, das "if" und "else" nicht funktionieren.
    Wo hast du das her?

  10. #30
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.693
    .. Doppelstunde damit zugebracht 4x 2cm lange Kupferdrähte zu Quadraten zusammen zu Löten. Mit 60 Watt Lötkolben ..
    Oh Mann, ich kenne solche Sorgen. Egal ob meine Tochter die erste war, wirklich auch wurde, die zur Schiwoche NUR mit Snowboard kommt und ich den unabdingbar-zertifizierten Boardtrainer organisieren musste (Alpenregion, viele Schilifte in der Umgebung! - kein Sportlehrer hatte den Snowboardschein oder konnte den machen, mit 14 Monaten Vorwarnung!) oder ob es um Mikrocontrolleranwendung auf nem Naturwissenschaftlich-technischen Gymnasium ging, es ging nur mit Elternhilfe und -initiative. UND ! ! der zuständige Lehrer musste (m)ein Freund sein. Aber dann gings los mit der (meiner) ersten Mikrocontroller-AG, danach mit nem Jugendforschtprojekt auf Controllerbasis und mit sehr guten Erfolg. Ich bin fest überzeugt dass es keinen Sinn macht, den Lehrer umzubiegen.

    Du bist auf dem richtigen Weg wenn Du die Sache so vorbereitest. Vielleicht auch als AG anbieten (ausserschulisches Projekt?) .
    Ciao sagt der JoeamBerg

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Ähnliche Themen

  1. Digispark - Sketch hochladen
    Von Cysign im Forum Arduino -Plattform
    Antworten: 2
    Letzter Beitrag: 23.02.2016, 14:36
  2. Sketch Problem
    Von wendtdir im Forum Arduino -Plattform
    Antworten: 1
    Letzter Beitrag: 16.07.2015, 19:25
  3. Arduino Sketch serielles Terminal: erkennen von CR
    Von Ford Prefect im Forum Arduino -Plattform
    Antworten: 3
    Letzter Beitrag: 18.06.2014, 15:58
  4. frage zu sketch arduino und webserver
    Von der_tom im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 11.03.2012, 19:07
  5. Timer1 Fehler bei Attiny 25
    Von hütti im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 28.05.2007, 17:25

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen