PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Die Init Funktion aus der asuro.c



MCClane
29.09.2006, 11:49
Hallo

ich muss für die Schule die Funktiom Init erklären also mit Kommentaren kurz und knapp.
Ich poste mal die Funktion hier rein:

void Init (void)
{
//-------- seriell interface programmed in boot routine and already running -------
// prepare 36kHz for IR - Communication
TCCR2 = (1 << WGM20) | (1 << WGM21) | (1 << COM20) | (1 << COM21) | (1 << CS20);
OCR2 = 0x91; // duty cycle for 36kHz
TIMSK |= (1 << TOIE2); // 36kHz counter for sleep

// prepare RS232
UCSRA = 0x00;
UCSRB = 0x00;
UCSRC = 0x86; // No Parity | 1 Stop Bit | 8 Data Bit
UBRRL = 0xCF; // 2400bps @ 8.00MHz

// I/O Ports
DDRB = IRTX | LEFT_DIR | PWM | GREEN_LED;
DDRD = RIGHT_DIR | FRONT_LED | ODOMETRIE_LED | RED_LED;

// for PWM (8-Bit PWM) on OC1A & OC1B
TCCR1A = (1 << WGM10) | (1 << COM1A1) | (1 << COM1B1);
// tmr1 running on MCU clock/8
TCCR1B = (1 << CS11);

// A/D Conversion
ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1); // clk/64
ODOMETRIE_LED_OFF;

FrontLED(OFF);
BackLED(ON,ON);
BackLED(OFF,OFF);
StatusLED(GREEN);

MotorDir(FWD,FWD);
MotorSpeed(0,0);
sei();
}

Also um diese Funktion geht es.
Die Letzten Zeilen mit LED... und Motor... habe ich schon erklärt es ghet mir um die ersten Zeilen ob mir da jemand einen Denkanstoss geben könnte oder kurz die Funktionen erklären könnte. Das soll jetzt nicht heissen das man einen fertigen Kommentieten Quelltext reinposten soll einfach eine Erklärung.

Ich bedanke mich
MCClane :arrow:

michael.bend
29.09.2006, 14:45
Moin MC Clane,

die erste Zeile ist eine Deklaration von Variablen. Hier werden Pins am µC mit Funktionen verknüpft um mittels IR kommunizieren zu können.

Bleib senkrecht und viel Spaß bei deinem Vortrag,

(Michael)

linux_80
29.09.2006, 19:49
Und siehe hier: https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=215322#215322


PS:
geht ihr auf die gleiche Schule ?

MCClane
04.10.2006, 12:43
Hallo
danke für die Antworten aber ich werde daraus noch nicht so richtig schlau hat einer hier noch eine Erklärung bezüglich für den Mittelteil?

Danke
MCClane

asuro_freak2
21.10.2006, 23:34
HI

Im Tutorial von mikrocontroller.net findest du was du suchst. Ansonsten auch das Datenblatt vom ATmega(Im Prinzip werden die Anschlüße des ATmega durch setzen der entspr. Bits in den Registern konfiguriert)

Xaver
25.02.2007, 15:57
also irgendwie verstehe ich nicht, wie ihr die 36kHz eingestellt habt.



/*
Timer2, zum Betrieb mit der seriellen Schnittstelle, fuer die
IR-Kommunikation auf 36 kHz eingestellt.
*/
TCCR2 = (1 << WGM20) | (1 << WGM21) | (1 << COM20) | (1 << COM21) | (1 << CS20);
OCR2 = 0x91; // duty cycle fuer 36kHz
TIMSK |= (1 << TOIE2); // 36kHz counter


Wenn ich das Datenblatt richtig lesen kann wird hier doch der Timer2 auf Fast PWM gestellt und ein und ein prescaler von 1.
Die Periodendauer kann doch bei Fast PWM nicht verändert werden, oder? also würde hier alle 256 Takte der Interrpt aufgerufen.


Auch die Interruptroutine ist mir nicht so ganz klar.


SIGNAL (SIG_OVERFLOW2)
{
TCNT2 += 0x25;
count36kHz ++;
if (!count36kHz)
timebase ++;
}
wird hier einfach zum aktuellen Timer wert 0x25 addiert?
das ergibt dann aber nicht genau 36khz. genauer wäre es 0x22 zu addieren.

Sternthaler
24.06.2007, 02:02
Hallo Xaver,
ist zwar ein bisschen spät für meinen post, aber falls es dich noch interessiert, und du den Beitrag noch nicht gefunden hast, schau mal hier (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=31409) warum da 0x25 und nicht 0x22 steht.