-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: AutomatisierterSonnesucher

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2014
    Beiträge
    7

    Lächeln AutomatisierterSonnesucher

    Anzeige

    Hallo,

    ich bin gerade an meinem Abschlussprojekt und weiß nicht mehr weiter.
    Das Projekt besteht aus zwei Servomotoren, einem Solarpanel und einem Atmega168 mit LCD

    Ich habe alles angeschlossen und wollte meinen Code testen, aber er macht nix

    Also kurz zu meinem Code,
    Der Servo soll zu Startposition fahren(smin),anschließend soll er während er zum anderen Anschlag fährt(smax) die Werte des AD-Wandlers auslesen und den höchten Speichern(hier wird dann auch die Position des höchsten Wertes gespeichert.
    Ist er mit der Fahrt fertig soll er zur Position mit dem Maximalwert fahren und dort stehen bleiben.

    ICH WEISS DAS DER CODE SEHR EINFACH GEHALTEN IST!

    Ich würde mich wirklich über Hilfe freuen.
    Im Anhang habe ich einen Code angehängt
    Angehängte Dateien Angehängte Dateien
    • Dateityp: c Ab.c (2,2 KB, 5x aufgerufen)

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    Ohne mich jetzt mit dem Zeitverhalten und der Servoansteuerung auseinanderzusetzen, dafür müsstest du alle verwendeten Funktionen zeigen, kann ich zumindest auf den ersten Blick sagen, dass du
    if (aktuell > alterwert) //aktueller Wert kleiner als Alterwert

    {
    maximum = aktuell; // Das Maximum ist dann der Aktuelle Wert
    postion_hell = t_on; // Hellste Postion ist dann t_on
    }

    nie wahr werden lässt, da du vorher alterwert = aktuell; setzt. Du meinst bestimmt aktuell > maximum.

    Was heißt macht nix?
    Soweit ich weiß, ist das Timing bei einer Servoansteuerung recht wichtig. Eventuell solltest du die über einen Timer machen.

    sast

    雅思特史特芬
    开发及研究

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2014
    Beiträge
    7
    Die Servosteuerung ins in der t_on zeit(impulsrate) versteckt
    Ja der AD Wandler zeigt was auf demLCD An aber der Servo beginnt nicht sich zur Startposition zu bewegen und loszufahren

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    Die Servosteuerung ins in der t_on zeit(impulsrate) versteckt
    Dann kann dir aber auch keiner helfen. Verstecken ist ganz schlecht wenn man Hilfe benötigt.

    Hast du denn eine Servoansteuerung schon einmal am Laufen gehabt? Wenn nicht, dann versuch das mal als erstes. Im RN Wissen gibts zu den Servos zB das hier
    http://www.rn-wissen.de/index.php/Servos

    Da hast du dann auch gleich ein C Beispiel dabei.

    sast

    雅思特史特芬
    开发及研究

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2014
    Beiträge
    7
    Also
    #define smin 300 //Impulsdauer min 0,6ms (Endstellung links)
    #define smax 1350 //Impulsdauer max 2,5ms (Endstellung rechts)

    und dann wird t_on = smin
    und solange smax nicht erreicht wird zählt er zu t_on 1 dazu

    Der servo soll also erst zu smin fahren und von dort immer 1 dazu in richtung Endstellung

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    24558
    Alter
    39
    Beiträge
    1.356
    Was man hier besonders gerne sieht sind Doppelpost...und noch besser sind Dreifachposts Bitte nächstes Mal nur einmal posten.
    Bin zwar kein Admin, aber ich sag das jetzt mal so.

    Frage bitte einen Admin ob er Deinen Post hier in den C-Bereich verschiebt. Und Deine anderen beiden ggf löscht - bevor jemand darauf schreibt.

    Poste Doch bitte den Code direkt hier rein. Ich z.B lade ungern einfach solche Daten runter.
    "Es ist schwierig, jemanden dazu zu bringen, etwas zu verstehen, wenn er sein Gehalt dafür bekommt, dass er es nicht versteht" [Upton Sinclair] gez-boykott

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2014
    Beiträge
    7
    Ok, ja ich wusste nicht ob mein post übernommen wurde
    Lösche die anderen gleich also hier kommt der Code:

    #include <avr/io.h> // Headerdatei des Controllers
    #include <zeit.h> // Headerdatei für Zeitverzögerungen
    #include <adc.h> // Headerdatei des Analog-Digital-Wandlers
    #include <myLcd.h> // Headerdatei des LC-Displays

    unsigned int t_on; // Variablen für die Dauer des t_on - Anteils
    unsigned int t_off = 15; // Variable für die Dauer des t_off - Anteils


    unsigned int aktuell;
    unsigned int alterwert ;
    unsigned int postion_hell;
    unsigned int maximum;


    unsigned int adcwert; // Variable für den gewandelten Analogwert

    #define smin 300 //Impulsdauer min 0,6ms (Endstellung links)
    #define smax 1350 //Impulsdauer max 2,5ms (Endstellung rechts)


    int main(void)
    {
    DDRB |= 0b00000010; // Port B Pin 1 als Ausgang festlegen

    adc_initialisieren (); // AD-Wandler vorbereiten
    lcd_initialisieren ();

    t_on = smin; // t_on wird zu smin



    while(1)
    {


    if (t_on < smax) // wenn Maximalwert noch nicht überschritten
    {
    t_on++; // Timer-Vergleichwert vergrößern

    aktuell = adc_lesen(5); // aktuell ist der aktuelle AdcWert

    lcd_zahl(1,0,aktuell,5);

    alterwert = aktuell;

    PORTB |= (1<<PB1);
    zeit(t_on);

    PORTB &= ~(1<<PB1);
    zeit(t_off);

    if (aktuell > alterwert) //aktueller Wert größer als Alterwert

    {
    maximum = aktuell; // Das Maximum ist dann der Aktuelle Wert
    postion_hell = t_on; // Hellste Postion ist dann t_on
    }


    }

    if (t_on >= smax) // Wenn T_on größer/gleich smax ist starte
    {
    while(1)
    {
    PORTB |= (1<<PB1);
    zeit(postion_hell);
    PORTB &= ~(1<<PB1);
    zeit(t_off);
    }
    }





    }
    }

  8. #8
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Wenn es geht solle man das Servosignal per Timer Erzeugen. Für 2 Kanäle kann man bei den meisten µCs einfach Hardware PWM von timer 1 nutzen. So ist da Servosignal vom Rest des Programms unabhängig.

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    12.03.2014
    Beiträge
    7
    Da ich nur Grundlagen beherrsche und ich überhaupt noch nicht mit Timern gearbeitet habe und am Montag Abgabe ist wird das schwierig

  10. #10
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    47
    Beiträge
    497
    Dafür, dass du Montag Abgabe hast, hast du noch nicht einmal meinen Tipp von oben im Code berücksichtigt.
    Und der Link zum RN Wissen liefert dir doch schon ein fertiges Beispiel für die Verwendung des Timers.

    sast

    雅思特史特芬
    开发及研究

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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