Forum: Mikrocontroller und Digitale Elektronik Klausurstoff dringend


von Greenman (Gast)


Lesenswert?

Ich brauch dringend die Antwort hier:

http://img.photobucket.com/albums/v61/devilhope/muster.jpg


erste aufgabenteil

Die Lichterkette soll zeitlich, hochgenaue Lichtwechsel ausführen.. (so 
Dioden/Taster an den Ports/pins halt.. eben...) Man benötigt Zeitbasis 
von 500ms. Initialisieren Sie, den Timer0 so, dass genau einmal alle 
500ms ein interrupt service routine nebenläufig aufgerufen wird. Die 
Quarzfrequenz beträgt 0.032768Mhz (gewöhnlicher uhrenquarz)..


so beginnt der code...(man muss den code aufschreiben)


void initTimer0()
{





Der zweite aufgabenteil...

 Warum kann man die vorherige Aufgabe mit Timer 4.096000Mhz oder 
0.030000Mhz lösen ??


noch ein aufgabenteil

Um die Verlustleistung!! abzusenken soll die CPU zwischen zwei wechseln
am LED muster angehalten werden. geben sie die Änderung für folgende 
main funktion:

int main()
{


initKey(); //funktion zu tasterabfrage
initTimer0();


while(1)
    {



    }


}


Danke im vorraus !!

von Greenman (Gast)


Lesenswert?

Ach ja, es geht um Atmega8 (8mhz) wenn es man überhaupt braucht.

von tobi (Gast)


Lesenswert?

1. Der Scan ist nicht gut, d.h. es ist quasi garnichts darauf zu 
erkennen.
2. Wo sind deine Ansätze bzw. eine konkrete Frage zu deinem Problem?

von Klausuraufsicht (Gast)


Lesenswert?

Was ist denn das? Unter dem Tisch fotografiert und mit dem Handy in 
Forum gepostet? Wer schreibt denn um diese Uhrzeit noch eine Klausur? 
:-)

von Greenman (Gast)


Lesenswert?

Das Bild braucht kaum für die Aufgabenteile die ich gelistet habe. Es 
interessiert mich hauptsächlich wie man die Sache mit den Quarzclock 
(Taktgeber) macht. Also eigentlich die Formel und den Code macht ohne 
OCR nur mit timer0 ueberlauf. Oder mit ocr wenn es mit uebarlauf zu 
kompliziert ist.

von Der Herr Lehrer (Gast)


Lesenswert?

Dreh Dich mal um ich steh hinter Dir mit dem Zeigestock!!!

von Matthias (Gast)


Lesenswert?

Wo ist eigentlich das Problem? Sieht aus, wie ne Aufgabe, die jeder 
Hobbybastler in einer Stunde runter hat. Nur mit Tutorial und Datenblatt
Recherche....


Soooo schwer ist das ja auch nicht, dass man nicht drauf kommen könnte.

Die Grundlegenden Fragen sind nur:

- Wie funktioniert ein Timer
- Wie funktioniert die Poartausgabe
- Und vielleicht noch, ob der Uhrenquarz am XTAL oder am 
Timer-Oscillator hängt.....

von Besserwisser (Gast)


Lesenswert?

Hmm, was für eine Schule oder Uni ist das denn?

von Sven P. (Gast)


Lesenswert?

Mit Überlauf: Register nachladen.

Sonst: Die Datenblätter von Atmel zu den AVRs sind eigentlich 
mustergültig, alles mit C- und ASM-Beispielprogramm. Dann gibts hier 
noch ein Tutorial und für ASM-Grundlagen suche man bei Google nach 'avr 
asm tutorial', gleich das erste. C-Grundlagen lernt man anhand des 
'Programmieren in C' von K&R, das ist leicht zu lesen und beinahe schon 
humorvoll.

von Greenman (Gast)


Lesenswert?

Ich dachte ich bekomme eine klare antwort. Ich habe schon 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Timer aber zur 
Zeit habe ich liege ich im Haufen Kot ^_^ und bräuchte so wie eine 
Erklärung zur Aufgabe da ^_^ MfG

von Atmega8 A. (atmega8) Benutzerseite


Lesenswert?

Dein Quarz hat 0.032768Mhz, also 32768HZ.
Jetzt stellst du den Prescsaler auf 1024
( TCCR0 = (1 << CS00) | (1 << CS02); ) und dein Interrupt wird nur noch 
alle 1/32 Sekunden ausgelöst.

In der ISR noch eine Schleife die 16 mal die Interrupts mitzählt und 
dann dort meinetwegen die Taster noch abfragen.

aber ... gearbeitet wird im Hauptprogramm.

Schau doch mal ins Tutorial und in das Datenblatt vom Atmega8.

Zum zweiten Aufgabenteil: Kannst mal überlegen was der Prescaler macht.

von was-willst-du (Gast)


Lesenswert?

Denke, die Klausur ist vorüber. Wahnsinn.

von Greenman (Gast)


Lesenswert?

Klausur erst morgen ^_^
Wenn jemand kann bitte, noch ergänzen. Danke sehr !

von Gast (Gast)


Lesenswert?

> Dein Quarz hat 0.032768Mhz, also 32768HZ.
> Jetzt stellst du den Prescsaler auf 1024
> ( TCCR0 = (1 << CS00) | (1 << CS02); ) und dein Interrupt wird nur noch
> alle 1/32 Sekunden ausgelöst.

Nöö, zu kompliziert.
32768 Hz / 256 (Überlauf des Timers) = 128, mit Prescaler 64 macht das 
eine Frequenz von 2Hz. Also genau alle 500ms. So kann ich mir blödes 
händisches Zählen sparen.

>  Warum kann man die vorherige Aufgabe mit Timer 4.096000Mhz oder
> 0.030000Mhz lösen ??

Weil Prescaler und ggf. Output-Compare-Register verwendet werden können, 
um die Interruptfrequenz recht granular zu regeln.

> Um die Verlustleistung!! abzusenken soll die CPU zwischen zwei wechseln
> am LED muster angehalten werden. geben sie die Änderung für folgende
> main funktion:


http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf

Kapitel "Power Management and Sleep Modes"

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.