Forum: Mikrocontroller und Digitale Elektronik AVR_Programmierung eines uController


von Marcus Nippi (Gast)


Lesenswert?

Hallo

Ich hab gestern in der Schule eine Aufgabenstellung für ein 
Microcontrollerboard bekommen, programmiert wird im AVR, und weis nicht 
wie ich anfangen soll?

Die Software ist für einen ATmega16

Hier die Aufgabenstellung:

Ein uController Programm ist zu erstellen, dass die Frequenz eines 
ADC-Port des uControllers angelegten Signals misst und über die 
7-Segment-Anzeige ausgibt.
Alternative erfolgt die Anzeige der Signalamplitude, wenn Port C, Pin4 
auf Masse gelegt ist
Das Programme ist so ausführlich mit Kommentaren zu versehen, dass ein 
HTL-Absolvent dieses vollständig verstehen kann.

Teil 1
Programmieren sie eine Funktion ausgabe(unsigned int wert) die den 
inhalt der Variablen werte an der 7-Segment-Anzeige ausgibt.
Programmieren Sie eine Funktion readADC(void), die den Wert des ADC 
einliest und zurückgibt.

Teil2
Programmieren Sie die Funktion get_signal_period(int threshold, die den 
16-Bit-Timer
startet, soblad der ADC-Wert kleiner als -threshold und diesen wieder 
stoppt,
sobald der ADC-Wert kleiner als -threshold ist. Die Funktion gibt den 
Timer-Inhalt zurück.
Konfigurieren sie de Prescaler des Timers dazu so, dass er fmin nicht 
überläuft und bei fmax mindestens einen Wert von 2 erreicht.

Teil3
Programmieren Sie die Funktion get_signal_amplitude(int threshold), die 
innerhalb einer Periodendauer des Eingangssignals den Maximalwert 
ermittelt und zurückgibt.
Ist Port C, Pin 4 auf Masse gelegt, dann geben Sie die Amplitude an der 
7-Segment-Anzeige aus.

Teil4
Verknüpfen Sie die erstellten Funktionen, um die Frequenz bzw. die 
Amplitude des am ADC angelegten Signals an der 7-Segment-Anzeige.

Ich hoffe ihr könnt mir helfen

MFG Marc

von zwieblum (Gast)


Lesenswert?

> Das Programme ist so ausführlich mit Kommentaren zu versehen, dass ein
> HTL-Absolvent dieses vollständig verstehen kann.

oje, die aufgabe ist unlösbar!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Verschoben, da kein Bezug zu "PC-Programmierung" erkennbar.

von Εrnst B. (ernst)


Lesenswert?

Du bist nicht, rein zufällig, an derselben HTL wie Thomas Adam 
(=>Beitrag "Software Akku - Ladeschaltung ATmega")?

So, mit welchem Teil der Aufgabe hast du dein Problem? Wo hängts?

Eine komplett vorgekaute Lösung für Punkt 1…4 wird dir hier niemand 
schreiben, bei konkreten Problemen wird dir aber sicher schnell 
geholfen.

von Marcus Nippi (Gast)


Lesenswert?

Ja bei der Teilaufgabe 2 henge ich?

Wie funktioniert das mit dem ADC wert, mit fmin und fmax?

von Εrnst B. (ernst)


Lesenswert?

Marcus Nippi schrieb:
> Ja bei der Teilaufgabe 2 henge ich?
>
> Wie funktioniert das mit dem ADC wert, mit fmin und fmax?

ADC-Wert einlesen geht schon? (⇒ 
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Analoge_Ein-_und_Ausgabe)
dann, fmin und fmax sind vorgegeben, oder?
Aus der Frequenz die Periodendauer ausrechnen, der Timer muss dann so 
schnell laufen, dass er innerhalb der minimalen Periodendauer (ergibt 
sich aus fmax) mindestens zweimal zählt, in der maximalen Periodendauer 
(aus fmin) aber nicht öfter als 2^16 mal zuschlägt.
Nun aus dem Datenblatt geeignete Timer-Settings suchen.
♨

von Jürgen (Gast)


Lesenswert?

fmin und fmax sollten wohl von der Aufgabenstellung vorgegeben werden.

Ausserdem muss ein "kleiner" durch "groesser" ersetzt werden.

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.