-         

Ergebnis 1 bis 2 von 2

Thema: Verstehe den Quelltext nicht

  1. #1

    Verstehe den Quelltext nicht

    Anzeige

    Hallo alle zusammen. Für eine Projektarbeit (SIA) hab ich mit mich entschieden meinen Asuro mit dem Ultraschallsensor auszustatten. Der Sensor Funktioniert mit dem unten aufgeführten Programm, leider kapier ich es noch nicht wirklich. Könntet ihr mir das Programm oberhalb der gestrichelten Linie und die Pinbelegung etwas näher bringen?

    Vielen Dank
    Loki

    Code:
    #include "asuro.h"
    void LocalInit(void)
    {
     
    // Change Oscillator-frequency of Timer 2
    // to 40kHz, no toggling of IO-pin:
    
    TCCR2 = (1 << WGM21) | (1 << CS20);
    OCR2 = 0x64;    // 40kHz @8MHz crystal
    ADCSRA = 0x00;    // ADC off // Analog comparator:
    ACSR = 0x02;    // Generate interrupt on falling edge
    ADMUX = 0x03;    // Multiplexer for comparator to // ADC pin 3
    SFIOR |= (1 << ACME);    // Enable muliplexing of comparator
    DDRD &= ~(1 << 6);    // Port D Pin 6 is input!
    }
    
    void Ping(unsigned char length)
    {
     count72kHz = 0;
     TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
     // Toggling of IO-Pin on // generate the Chirp
    
      while(count72kHz < length) 
      {
       OCR2 = 0x64 + length / 2 - count72kHz;
      }
     TCCR2 = (1 << WGM21) | (1 << CS20); // Toggling of IO-Pin off
     OCR2 = 0x64; // set frequency to 40kHz
    }
    
    int main(void)
    
    {
    int pos, i;
    int posmarker;
    Init();
    LocalInit();
    --------------------------------------------------------------------------------------
    while(TRUE) 
    {
     posmarker = 0;
     Ping(20);
     
    for(pos = 0; pos < 100; pos++) 
     {
     Sleep(10);
     
      if((ACSR & (1 << ACI)) != 0) 
      {
       if(posmarker == 0) 
       { 
        posmarker = pos; 
       }
     
      }
    
    
    ACSR |= (1 << ACI);
     
    } 
    
    if(posmarker >10) 
     { 
       StatusLED(GREEN);
       MotorDir(FWD, FWD);
       MotorSpeed(200, 200);
     }
    
    else 
      {
       StatusLED(RED);
       MotorDir(FWD, RWD);
       MotorSpeed(0, 200);
    
       for(i = 0; i<100; i++) 
        { 
         Sleep(200); 
        }
    
      }
    
    }
    return 0;
    }

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.07.2007
    Beiträge
    349
    Das was dort geschieht ist einerseits den Timer 2 umzustellen und andererseits ein Analogsignal zu vergleichen und gegebenenfalls einen Interrupt auszulösen.

    Zumindest in Sachen Timer kann ich dir ein pdf File geben indem die Timer erklärt sind.
    Ansonsten auch einfach mal in der Mikrocontroller Beschreibung nachschauen, dort steht auch alles Mögliche zu dem Thema.

    Wie die Register zusammenhängen sieht man sehr schön im AVR Studio(gratis!!!) weil sie dort graphisch dargestellt sind.
    Angehängte Dateien Angehängte Dateien
    Grüße,
    Harri

Berechtigungen

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