- SF800 Solar Speicher Tutorial         
Ergebnis 1 bis 10 von 12

Thema: Asuro Steuerung für Dieselmotor

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Multitasking können die AVRs natürlich nicht. Für Aufgaben, die quasi im Hintergrund ablaufen sollen, verwendet man deshalb die Timerfunktionen der AVRs. Hier wird die "klassische" Servoansteuerung beschrieben:
    http://www.rn-wissen.de/index.php/Servo

    PHP-Code:
    #define SERVOPIN 7
    #define SERVOPORT PORTD
    #define DDRSERVO DDRD

    volatile unsigned char servopos;

    void servo_init()
    {
        
    TIMSK|=(1<<OCIE2);
        
    TCCR2 |= (1<<WGM21) | (1<<CS20);    //Prescale=1, CTC mode
        
    OCR2 F_CPU/100000;            //alle 10µS ein IRQ
        
    DDRSERVO|=(1<<SERVOPIN);
    };

    ISR(TIMER2_COMP_vect)
    {
        static 
    int count;
        if(
    count>servopos)SERVOPORT&=~(1<<SERVOPIN);
          else 
    SERVOPORT|=(1<<SERVOPIN);
        if(
    count<2000)count++;
          else 
    count=0;
    }; 
    Wie funktioniert das? Der Timer wird so programmiert, dass er alle 10µs die Interruptserviceroutine (ISR) aufruft. Die Aufrufe werden in der ISR mitgezählt (count), der Zählerstand wird zwischen den Aufrufen gespeichert (static). Zusätzlich wird in der ISR der Zählerwert mit dem Wert für die Servoposition (servopos) verglichen und dem Ergebniss entsprechend der Servoausgang gesetzt oder gelöscht. Bei 10µs oder 0,01ms pro Aufruf ist nach 100 Aufrufen eine Millisekunde vergangen, nach 2000 sind es 20ms.

    Alles klar soweit? Wie verwendet man das nun beim asuro? Man könnte Timer0 verwenden, denn der wird von der Library des asuro nicht verwendet. Oder man klinkt sich in den Timer1 ein der ja schon für die PWM-Ansteuerung der Antriebe genutzt wird:

    PHP-Code:
    #include "asuro.h"

    volatile unsigned char servopos=40// 40 ist ca. 1 ms

    SIGNAL (SIG_OVERFLOW1)
    {
        static 
    int count 1;
        if(
    count servoposBackLED(OFF,OFF); else BackLED(ON,OFF);
        if(
    count 780count++; else count=1;
    }

    int main(void)
    {
       
    Init();
        
    TIMSK |= (<< TOIE1); // Timer1 Overflow-ISR einklinken für Servo

        
    unsigned char l;
        
    int data[2];
        
    FrontLED(ON);
        
    l=108;
        
    Sleep(255);
        
    Sleep(255);
        
    MotorDir(FWD,FWD);
        
    MotorSpeed(130,130);

        while(
    1) {
                
    LineData(data);
                if(
    data [0] < data[1])
                    {
    l=l+4;
                    
    MotorSpeed(100,140);}
                else if(
    data[0] == data[1])
                    {
    l=l;}

                else
                    {
    l=l-4;
                    
    MotorSpeed(140,100);}
                    
    //servo(l);
                    
    servopos l// Servoposition setzen

                
    if(120)
                    {
    l=120;}
                else if(
    80)
                    {
    l=80;}
                else
                    {
    l=l;}
        }
       return 
    0;

    ungetestet

    Gruß

    mic
    Geändert von radbruch (21.08.2011 um 11:00 Uhr) Grund: servopos > count war falsch
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. Einstieg in die Robotik - Asuro + NSLU + Direkte Steuerung
    Von bjoern.hoefer im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 3
    Letzter Beitrag: 17.01.2011, 13:25
  2. Asuro Steuerung
    Von greenko im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 12.06.2008, 12:00
  3. ASURO-Steuerung mit SCILAB
    Von stochri im Forum Asuro
    Antworten: 0
    Letzter Beitrag: 05.01.2006, 20:06
  4. Steuerung des Bots über Graupner RC-Steuerung
    Von Toastbrot im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 4
    Letzter Beitrag: 23.12.2004, 13:18
  5. Antworten: 2
    Letzter Beitrag: 26.10.2004, 08:37

Berechtigungen

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

12V Akku bauen