- LiTime Speicher und Akkus         
Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 36

Thema: Fehler im Sketch für ATtiny?

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

    Fehler im Sketch für ATtiny?

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    ich möchte einen simplen Roboter bauen. Ähnlich einem Knicklenker. Ein Motor treibt eine durchgehende Achse an. Ein Servo reagiert auf 2 Taster(Fühler) indem es einfach bis zu einem Punkt nach links oder rechts dreht. Nach 1,5 Sekunden wieder auf Mitte. Wenn ein Fühler tastet, soll er noch rückwärts fahren. Statt H-Brücke ein Relais.
    Schaltplan:
    Bild hier  

    Für den Arduino habe ich diesen Sketch, welcher auch super funktioniert:

    Code:
    #include <Servo.h>
    
    Servo myservo;  // create servo object to control a servo
    
    int potpin = 0;  // Widerstand an A0 messen
    int val;    // Die variable vom analog pin
    const int relaisPin = 13; // Arbeitender DigitalPin
    void setup()
    {
      myservo.attach(9);  // Servo auf DigitalPin 9
      pinMode(13, OUTPUT);// ist der schaltende Ausgang
    }
    
    void loop()
    {
      int val = analogRead(potpin);            // Variable von den Widerständen messen
      val = map(val, 0, 1023, 30, 150);    //Eingrenzung des Servowinkels
    
      
    
      if (val <= 50)
      {
        myservo.write(30);             // sets position to the scaled value
        digitalWrite(relaisPin, HIGH);
        delay(1500);
      }
      else
    
      {
        myservo.write(90);
        digitalWrite(relaisPin, LOW);
      }
    
        if (val >= 130)
        {
          myservo.write(150);           // sets position to the scaled value
    
          digitalWrite(relaisPin, HIGH);
          delay(1500);
        }
        else
    
        {
          myservo.write(90);
          digitalWrite(relaisPin, LOW);
        }
      }


    Wenn ich nun diesen Sketch auf den ATtiny spielen will, läuft nichts. Statt "servo h" habe ich servo8bit h.
    Zusätzlich habe ich noch AVR insight installiert.

    Code:
    #include <Servo8Bit.h>
    Servo8Bit myServo; //Servo program mit ATtiny45.
    //Für ATtiny 85 VCC an8 -GND an 4
    //Widerstandsbrücke an Pin 7
    //Motorrelais an Pin 6
    // Servo an Pin 5
    int potPin = A1;  // Widerstand an Pin 7 messen 
    int val;    // Die variable vom analog pin
    const int relaisPin = 1; // Arbeitender DigitalPin6
    void setup()
    {
      myServo.attach(0);  // Servo auf DigitalPin Pin 5
      pinMode(relaisPin, OUTPUT);// ist der schaltende Ausgang
    }
    
    void loop()
    {
      int val = analogRead(potPin);            // Variable von den Widerständen messen
      val = map(val, 0, 1023, 30, 150);    //Eingrenzung des Servowinkels
    
      
    
      if (val <= 50)
      {
        myServo.write(30);             // sets position to the scaled value
        digitalWrite(relaisPin, HIGH);
        delay(1500);
      }
      else
    
      {
        myServo.write(90);
        digitalWrite(relaisPin, LOW);
      }
    
        if (val >= 130)
        {
          myServo.write(150);           // sets position to the scaled value
    
          digitalWrite(relaisPin, HIGH);
          delay(1500);
        }
        else
    
        {
          myServo.write(90);
          digitalWrite(relaisPin, LOW);
        }
      }
    Ich weiß wirklich nicht wo der Fehler liegt.

    Danke für eure Hilfe

  2. #2
    shedepe
    Gast
    Hast du schon einfache Sachen wie LED blinken lassen, nur PWM testen usw. auf dem ATtiny mittels eines Arduino Sketchs ausprobiert. Dann kannst du unterscheiden ob es ein Problem deines Programms oder deiner Konfiguration (Also ob dein Arduino Sketch überhaupt darauf anläuft) ist.
    Du könntest ansonsten hingehen und einfach direkt auf Basis der AVR - libc den Code schreiben. Ist auch nicht arg viel komplizierter und man lernt noch dabei etwas über den Mikrocontroller.

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    32
    Beiträge
    1.192
    Hallo,
    im Schaltplan vermisse ich noch die üblichen Abblockkondensatoren. Der ATtiny sollte 100nF an seinen Anschlüssen bekommen.
    Für Motor und Servo wäre es noch gut wenn man einen Elko an die Versorgung schaltet ( Kapazität: z.B. 100µF oder mehr ).
    Sonst bricht die Versorgungsspannung bei Last ein und der ATtiny schaltet ab oder startet neu...
    Den ATtiny kann man auch über Diode+Elko aus dem Akku versorgen, damit er auch bei kurzen Spannungseinbrüchen nicht ausschaltet.
    Grüße, Bernhard
    "Im Leben geht es nicht darum, gute Karten zu haben, sondern auch mit einem schlechten Blatt gut zu spielen." R.L. Stevenson

  4. #4
    shedepe
    Gast
    Zum Thema Schaltplan. Ein unbeschalteter Reset Pin ist auch nicht gut. Der muss mit 10 kOhm auf VCC gelegt werden.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Hallo shepede,
    Led Blinken ging. Fader nicht. Also kein PWM. Danke für den Tipp.
    Ich habe schon Verständnisprobleme mit dem Arduino Kochbuch(leider).
    Aber ich lese mir das durch.
    Danke für den Hinweis mit den 10K auf VCC. Habe ich natürlich nicht.
    Hallo Bernhard,
    danke, das ist ein guter Tipp. Eigentlich logisch.

    Dankeschön

    Achim

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.04.2008
    Beiträge
    282
    Der Code ist auch etwas optimierungsbedürftig. Nehmen wir mal an, VAL hat einen Wert von 200. Dann spring er im ersten IF in den Else-Zweig und gibt eine Soll-Position von 90 vor .... nur um dann im zweiten IF in den True Zweig zu springen und dann wird 150 als Sollposition ausgegeben. Das kann man zwar so machen, hat aber nichts mit sauberer und aufgeräumter Programmierung zu tun. Besser wäre her eine Switch Funktion.

    Auch auf Delay sollte man eigentlich verzichten, wo immer möglich.
    Geändert von redround (16.10.2016 um 20:30 Uhr)

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Hallo redround,
    du hast recht. Aber wenn nicht mehr im Sketch gemacht werden soll?
    Ich bin froh, dass ich das überhaupt hinbekam.
    Am liebsten bau ich blödsinnige "Roboter".(Mechanik) Viel Spaß hatte ich immer mit Logikgattern. Aber da ich dummerweise bei einem mit dem Platz nicht hinkam, hoffte ich auf den ATtiny 85.
    Aber dieses IC kriege ich nicht zum laufen.
    Bin mir noch nicht mal sicher, ob der ATtiny jetzt wirklich mit 8MHz läuft, oder nur 1 MHz schnell ist und somit kein PWM kann.
    Aber der Winter fängt ja erst noch an.
    Programmieren ist eine meiner ultra dunklen Unmöglichkeitsseiten, leider.

    Achim

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    19.04.2008
    Beiträge
    282
    Im "Auslieferungszustand" läuft er zwar mit 8 MHz allerdings ist auch die CKDIV8 Fuse gesetzt, so dass der interne Pre-Scaler zuschlägt und ihn auf 1 MHz "bremst". Auszug aus dem Datenblatt:

    The device is shipped with CKSEL = “0010”, SUT = “10”, and CKDIV8 programmed. The default clock source setting is therefore the Internal RC Oscillator running at 8 MHz with longest start-up time and an initial system clock prescaling of 8, resulting in 1.0 MHz system clock. This default setting ensures that all users can make their desired clock source setting using an In-System or High-voltage Programmer.
    Vielleicht solltest Du Dich mit jemandem zusammen tun, der lieber programmiert - und das meine ich wirklich nicht böse. Zusammen macht es a) mehr Spaß und b) kann man sich spezialisieren.

    Für PWM spielt das aber nur bedingt eine Rolle. Das geht mit 1 MHz genauso gut wie mit 8 MHz ... nur das Timing ist halt etwas anders.

  9. #9
    shedepe
    Gast
    Ansonsten man lernt ja stetig dazu. Braucht zwar etwas Zeit bis etwas dann geht, aber geht Ich hab auch Ewigkeiten mit ziemlich einfachen Dingen verbracht (Wie z.B. Fuses setzen).

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    27.02.2012
    Ort
    50KM über Hamburg
    Beiträge
    128
    Danke für das Aufmuntern.
    Der ATtiny steckt in einer Fassung, welche als Shield auf einem UNO steckt.
    Jetzt habe ich ihn nochmals an den Rechner gehängt. Alle Einstellungen nochmal geprüft.(internal 8MHz) Plötzlich und unerwartet geht der Fader sketch jetzt richtig.

    Hoffnung keimt auf!

    Bei der Arduino Library "Servo.H" definiert man das Servo als : "Servo myservo"
    dann wird das doch in der Blackbox umgesetzt, welche dann weiß: Es geht jetzt um ein Servo.

    Wie ist es denn dann bei der "Servo8bit. H"
    Welches ist das Bezugswort?
    Servo8bit myservo ?
    Das wäre doch logisch?
    Man braucht das Schlüsselwort?
    Ab dann müßte die Library doch die Befehle genauso annehmen wie die vom Arduino?

    Das mit dem Zusammensetzen geht nicht. Auch ich habe mein "Ding" weg. Ich brauche viel Ruhe, welche ich beim rumpfriemeln im abgeschirmten Keller finde.

    Der ATtiny fasziniert mich sehr. Leider fand ich keine Anleitung(Buch) darüber. Über die Logikgatter findet man jede Menge. Außerdem sind sie mit Logik zu begreifen. Der Zugang zum Arduino fehlt mir noch.
    Heute hatte ich das Buch von Herrn Bartmann in der Hand. Der ATtiny wird in diesem Wälzer nur einmal mit Passbild erwähnt.
    Im Arduino Kochbuch nicht einmal das.
    Die einfachen Programme laufen mit den Arduino Befehlen.
    Nur eben die Servosache noch nicht.
    Also Suche ich zwar nicht das Zauberwort:"BITTE" aber schon ein Passendes.

    Achim

    - - - Aktualisiert - - -

    Ich habe was gefunden:

    Code:
    #include <SoftwareServo.h>
    
    SoftwareServo servo;
    void setup()
    {
      servo.attach(0);}
    
    void loop() {
        int pos;
        for(pos = 30; pos < 150; pos += 1) {
            servo.write(pos);             
            delay(50);                     
            SoftwareServo::refresh();//this row....
        }
        for(pos = 150; pos>=1; pos-=1) {                               
            servo.write(pos);             
            delay(50);                     
            SoftwareServo::refresh();//This row....
        }
    }
    Das Rechtecksignal ist schön steil. 1.07 bis 1,89 mSec.
    Aber eine Periode dauert 52 mSec.
    Das Servo läuft ein bisschen wie ein Trecker
    Unter 2,6 Volt ist nicht mehr viel los.
    Aber immerhin.
    Nun versuche ich meinen Sketch umzusetzen. Natülich mit Pufferelko und 100nF.

    Achim

Seite 1 von 4 123 ... 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
  •  

LiFePO4 Speicher Test