Pogrammierer für den MCT ATMEGA32 gesucht RAUM FFM

Gast #4658635
Lesenswert?

ich müsste so paar pogramme schreiben wie

Schreiben Sie C-Programme für den ATmega 32 (fcpu = 16 MHz), das einen 
Infraschallton von 5 Hz erzeugt. Der Lautsprecher sei mit Pin PD5 
verbunden.

Verwenden Sie Timer 1 im Überlauf - Mode (Normal - Mode) ohne Interrupt.
Verwenden Sie Timer 1 im Überlauf - Mode (Normal - Mode) mit Interrupt.
Verwenden Sie Timer 1 im CTC -Mode mit ICR1 als CCR - Register.
Verwenden Sie Timer 1 im CTC - Mode mit OCR1A als CCR - Register.
Verwenden Sie Timer 1 im Fast - PWM - Mode.
(Firma: Vescomp) #4658695
Lesenswert?

MCTatmega schrieb:
> Verwenden Sie Timer 1 im Überlauf - Mode (Normal - Mode) ohne Interrupt.
 Prescaler auf 8, in main() TCNT1 auf >= 20000 prüfen, falls ja,
 TCNT1 = 0, Toggle Pin.

> Verwenden Sie Timer 1 im Überlauf - Mode (Normal - Mode) mit Interrupt.
 IntCnt = 0, Prescaler auf 1, beim zweiten OVFLW_INT TCNT1 auf 36607
 stellen, beim nächsten OVFLW_INT Toggle Pin und IntCnt = 0.

> Verwenden Sie Timer 1 im CTC -Mode mit ICR1 als CCR - Register.
 Prescaler auf 8, Timer 1 MODE auf 12 stellen, ICR1 auf 19999 stellen,
 beim INT Toggle Pin.

> Verwenden Sie Timer 1 im CTC - Mode mit OCR1A als CCR - Register.
 Prescaler auf 8, Timer 1 MODE auf 4 stellen, OCR1A auf 19999 stellen,
 beim INT Toggle Pin.

> Verwenden Sie Timer 1 im Fast - PWM - Mode.

 Mindestens eine Aufgabe solltest du alleine machen. ;)
(Firma: Vescomp) #4659031
Lesenswert?

MCTatmega schrieb:
> kanst du mal bitte eine Aufgabe mit Kommentaren an der Seite lösen was
> genau welcher befehl ausführt

 Ich versuch's mal:
 Zuerst muss man auf 100ms kommen, weil 5Hz = 200ms = alle 100ms LED
 toggeln, OK ?

> Verwenden Sie Timer 1 im Überlauf - Mode (Normal - Mode) ohne Interrupt.
 Das einzige, was man hier machen kann, da ohne Interrupt, ist den TCNT1
 standig im Loop zu prufen. Ist nicht auf us genau, aber bei 5Hz...
 Also:
 Prescaler auf 64 = 16MHz / 64 = 250KHz = 4us.
 100000us / 4us = 25000.
 Demzufolge:
 Prescaler auf 64, in main() TCNT1 auf >= 25000 prüfen, falls ja,
 TCNT1 = 0, Toggle Pin.

> Verwenden Sie Timer 1 im Überlauf - Mode (Normal - Mode) mit Interrupt.
 Hier gilt es:
 Prescaler auf 8 = 16MHz / 8 = 2MHz = 0.5us
 Überlauf = 65536 * 0.5 = 32768us
 3 * 32768 = 98304us, 100000 - 98304 = 1696us
 Fehlen 1696us, also wird beim dritten OVRFLW_INT
 TCNT1 auf 65536 - (1696*2) - 1 gestelt, das ergibt 63839.
 Demzufolge:
 In der ISR eine static variable deklarieren:
1
 static uint8_t IntCnt;
 Prescaler auf 8, bei jedem ISR Eintritt IntCnt erhohen, beim dritten
 OVFLW_INT TCNT1 auf 63389 stellen, beim nächsten OVFLW_INT
 Toggle Pin und IntCnt wieder auf Null stellen.

> Verwenden Sie Timer 1 im CTC -Mode mit ICR1 als CCR - Register.
 Das ist einfach:
 Prescaler auf 64 = 16MHz / 64 = 250KHz = 4us.
 100000us / 4us = 25000.
 Demzufolge:
 Timer 1 auf MODE 12 stellen, ICR1 auf 24999 stellen,
 Toggle Pin in der ISR.

> Verwenden Sie Timer 1 im CTC - Mode mit OCR1A als CCR - Register.
 Das ist auch einfach:
 Prescaler auf 64 = 16MHz / 64 = 250KHz = 4us.
 100000us / 4us = 25000.
 Demzufolge:
 Timer 1 auf MODE 4 stellen, OCR1A auf 24999 stellen,
 Toggle Pin in der ISR.

> Verwenden Sie Timer 1 im Fast - PWM - Mode.

 Mindestens eine Aufgabe solltest du alleine machen. ;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren