Themen:

AVR, avr-gcc, CAN, CPLD, Elektronik, Mikrocontroller, MSP430, PIC, Roboter, Schaltungen, Sensoren, Software, Testboards

Codeschnipsel für avr-gcc

Tags: AVR, Software, avr-gcc
Stand: 2. Januar 2007, 14:16
1 Kommentar(e)

Ansteuerung des UART

Da es die Codestücke insgesamt schon ein bißchen länger geworden sind wurden sie jetzt auf eine eigene Seite ausgelagert: Ansteuerung des UART.

Analog/Digital-Wandler

C:
#include <avr/io.h>
#include <stdint.h>

// Analog/Digital Wandler initialisieren
void adc_init(void) {
    // externe Referenzspannung und AD-Wandlerkanal 0 (ADC0) auswählen
    ADMUX = 0;

    // AD-Wandler einschalten und Prescaler = 64 einstellen (enstpricht 115 khz Wandlertakt)
    ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1);
}


int main(void) {
    uint16_t buffer;

    // A/D - Wandler initialisieren
    adc_init();

    while (1) {
        // Wandlung starten
        ADCSRA |= (1<<ADSC);

        // Warten bis die AD-Wandlung abgeschloßen ist
        while ( !(ADCSRA & (1<<ADIF)) )
            ;

        /* AD-Wert auslesen.
        ADCH muss als zweites gelesen werden, da nachdem ADCL gelesen wurde
        das ADC-Register gesperrt ist bis ADCH auch ausgelesen wurde. */

        buffer = ADCL | (ADCH<<8);

        // oder einfacher
        buffer = ADC;
    }
}

PWM mit Timer1

C:
#include <avr/io.h>

// Timer1 initialisieren
void timer1_init(void)
{
    // normale 8-bit PWM aktivieren (nicht invertiert),
    // Das Bit WGM10 wird im Datenblatt auch als PWM10 bezeichnet
    TCCR1A = (1<<COM1A1)|(1<<COM1B1)|(1<<WGM10);

    // Einstellen der PWM-Frequenz auf 14 kHz (Prescaler = 1)
    TCCR1B = (1<<CS10);

    // Interrupts für Timer1 deaktivieren
    // Achtung: Auch die Interrupts für die anderen Timer stehen in diesem Register
    TIMSK &= ~0x3c;
}


int main(void)
{
    // Timer1 initialisieren
    timer1_init();
   
    // Werte für die beiden PWM Kanäle setzen.
    // Zum Beispiel 100% Tastverhältnis für OC1A
    OCR1AL = 0xff;
    // und ca. 50% Tastverhältnis (= 127/255) für OC1B
    OCR1BL = 127;

    while (1)
        ;
}

Zum Anfang

Kommentare

# Thomas meinte am 30. Dezember 2006, 18:52 dazu:

Hallo,

Ich finde deine Seiten Super. Das neue Design ist auch gut. Ich benutze oft deine Seiten. Doch dieser Artikel sollte etwas überarbeitet werden. Denn Codeschnipsel sind nur sinnvoll wenn ich mir damit Zeit ersparen kann. Doch hier muss ich doch wieder alles über den Timer lesen. Also bitte OCR1AL = 0xff; OCR1BL = 0x7f; genauer beschreiben.

Grüße Thomas

Deine Meinung:

  • Textformatierung ist mit Markdown möglich.
  • HTML wird entfernt.
  • Kommentare werden moderiert und sind daher eventuell nicht sofort sichtbar.
  • Irrelevante Kommentare werden gelöscht.