- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 8 von 8

Thema: Brauch hilfe bei Erklärung des Codes

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.06.2012
    Beiträge
    12

    Brauch hilfe bei Erklärung des Codes

    hallo,
    ich wollte mal fragen ob mir jemand mal den Code erklären könnte? Habe irgendwie eine Blockade. Je länger ich mir das angucke, desto mehr bin ich verwirrt.

    Code:
    #define F_CPU 11056000UL
    
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <util/delay.h>
    
    //
    // Der Prescaler muss so gewählt werden, dass der Ausdruck
    // für MILLISEC_BASE einen Wert kleiner als 128 ergibt
    // MILLISEC_BASE ist der Timerwert, der 1 Millisekunde Zeitdauer ergeben
    // soll.
    //
    #define PRESCALER      128
    #define PRESCALER_BITS (1<<CS02);
    
    #define MILLISEC_BASE  ( F_CPU / PRESCALER / 1000 )	// =115 ->1ms    (wurde durch 1000 geteilt um 1ms zu erhalten)
    #define CENTER         ( MILLISEC_BASE / 2 )
    
    //
    // Konfiguration der Servoleitungen
    //
    #define NR_SERVOS      3
    #define SERVO_DDR      DDRA
    #define SERVO_PORT     PORTA
    
    uint8_t ServoPuls[NR_SERVOS] = { 1<<PA0, 1<<PA1, 1<<PA2 };
    //
    // Werte für die Servoposition
    // Gültige Werte laufen von 0 bis 2 * CENTER
    // 0           ... ganz links
    // CENTER      ... Mittelstellung
    // 2 * CENTER  ... ganz rechts
    //
    volatile uint8_t ServoValue[NR_SERVOS];
     
    ISR (TIMER0_COMP_vect) 
    {
      static uint8_t ServoId = 0;
     
    /
      SERVO_PORT &= ~ServoPuls[ServoId];
     
    
      if( ++ServoId >= NR_SERVOS )
        ServoId = 0;
     
    
      SERVO_PORT |= ServoPuls[ServoId];
     
    
      OCR0 = MILLISEC_BASE + ServoValue[ServoId];
    }
     
    void InitServo()
    {
      uint8_t i;
     
    
      SERVO_DDR = ServoPuls[0] | ServoPuls[1] | ServoPuls[2] ;
     
    
      for( i = 0; i < NR_SERVOS; ++i )
        ServoValue[i] = CENTER;
     
    
      OCR0 = MILLISEC_BASE + ServoValue[0];
      TIMSK |= (1<<OCIE0);
      TCCR0 = (1<<WGM01) | PRESCALER_BITS;  //  CTC mode
    }
     
    int main(void)
    {
      InitServo();
     
      sei();
     
      _delay_ms( 1000 );
     
    
      while( 1 ) {
     
     
        ServoValue[0] += 1;
        if( ServoValue[0] > 2*CENTER )
          ServoValue[0] -= 2*CENTER;
     
        ServoValue[1] += 1;
        if( ServoValue[1] > 2*CENTER )
          ServoValue[1] -= 2*CENTER;
     
        ServoValue[2] += 2;
        if( ServoValue[2] > 2*CENTER )
          ServoValue[2] -= 2*CENTER;
     
        
     
        _delay_ms( 40 );
      }
    }
    für die Erklärungen der einzelnen Zeilen wäre ich sehr dankbar.
    Geändert von jobo84 (11.08.2012 um 23:20 Uhr)

Ähnliche Themen

  1. Erklärung einige codes
    Von asurox im Forum Asuro
    Antworten: 1
    Letzter Beitrag: 03.05.2009, 12:35
  2. Oh man ich brauch Hilfe....Asurolib was ist avr/****.h
    Von dabKer im Forum Software, Algorithmen und KI
    Antworten: 0
    Letzter Beitrag: 18.12.2008, 20:33
  3. Antworten: 9
    Letzter Beitrag: 02.01.2008, 22:05
  4. brauch Hilfe zum ADC
    Von molleonair im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 13.03.2006, 15:17
  5. brauch hilfe für projekt
    Von chioro im Forum PIC Controller
    Antworten: 4
    Letzter Beitrag: 20.02.2006, 12:17

Berechtigungen

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

LiFePO4 Speicher Test