Forum: Mikrocontroller und Digitale Elektronik Nachladewert berechnen ?


von Azurox (Gast)


Lesenswert?

Hallo zusammen.
Bin gerade dabei, für meine Abi-Klausur in E-Technik zu lernen. Leider 
Gottes gehört da auch C-Programmierung zu. Habe mir jetzt alte 
Abi-Klausuren rausgesucht und versuche diese zu lösen. Allerdings bin 
ich gerade beim Punkt C-Programmierung des Mikrocontrollers angekommen 
und bin am verzweifeln. Also folgendes:


Für die Interruptserviceroutine (ISR) soll der Timer 0 als 16-Bit Timer 
verwendet werden. Gehen Sie im Folgenden davon aus, dass der Takt des 
verwendeten Mikrocontrollers den Timerstand (TH0, TL0) pro Sekunde um 
eine Million erhöht.

- Berechnen Sie, auf welche Werte TH0 und TL0 gesetzt werden müssen, 
wenn der Schrittmotor in 100ms für eine Umdrehung 200 Schritte benötigt.


(In der Aufgabe geht es um die Regluierung der Luftzufuhrt eines Ofens, 
die mit Hilfe eines Schrittmotors geregelt werden soll!)

von Elektroniker (Gast)


Lesenswert?

Erstmal Textaufgabe zerlegen, d.h.
- Wie lange dauert ein Takt vom T0?
- Wie lange muß ein Schritt des Schrittmotors dauern?
- Wieviele Takte muß T0 dann für einen Schritt des Schrittmotors laufen?

von Azurox (Gast)


Lesenswert?

- Wie lange dauert ein Takt vom T0?
- Wie lange muß ein Schritt des Schrittmotors dauern?
- Wieviele Takte muß T0 dann für einen Schritt des Schrittmotors laufen?


1. Ein Takt von T0 dauert 1 mikroSekunde (Da TH0 und TL0 jeweils um 1 
Million pro Sekunde erhöht werden)
2. Ein Schritt des Motors dauert 0,5 ms (Da 200 Schritte in 100ms. Also 
100ms / 200 Schritte)
3. 500 Takte pro Schritt (0,5 ms / 1 mikrosekunde) ?

von Elektroniker (Gast)


Lesenswert?

Das sieht doch alles gut aus. Und was fehlt dir jetzt noch?

Die 500 ist nicht mehr als 8-Bit Zahl darstellbar, also reicht ein 8-Bit 
Timer alleine dafür auch nicht aus.

Nebenbei: Komische Formulierung der letzten Teilaufgabe
> - Berechnen Sie, auf welche Werte TH0 und TL0 gesetzt werden müssen,
> wenn der Schrittmotor in 100ms für eine Umdrehung 200 Schritte benötigt.

Da könnte man glatt ins Grübeln kommen, wieviel Schritte der 
Schrittmotor für eine Umdrehung in 200 ms braucht ;-)
Lehrer ....

von Azurox (Gast)


Lesenswert?

In der Aufgabe steht ja, ein 16-bit Timer.
Also haben wir 2^16 Zählschritte maximal, ergibt also 65.536.

Dann:
65.536 - 500 = 65.036 -> Also der Nachladewert!
Mit Taschenrechner umgewandelt: 0xFE0C


Ahh :)
Besten Dank ! :) Hab für die Berechnung nur eine Formel bekommen und 
bisher nur damit gerechnet. So scheint mir die Berechnung auch viel 
logischer und einfacher ! Super!

P.s.:
Die Formulierung kommt mehr oder weniger vom Schulministerium. Aber die 
haben ja generell ein bisschen Ahnung von der Realität. Bin auch 2 -3 
mal über die Formulierung gestolpert und musste mir das öfters 
durchlesen.

von Azurox (Gast)


Lesenswert?

So ich bins nochmal.

Im nächsten Schritt soll man das beigelegte Mikrocontroller-Programm 
analysieren. Hierbei habe ich allerdings auch so meine Probleme, da es 
dabei Befehle gibt, die ich noch nie gesehen, geschweige denn angewandt 
habe.


if ((P1&0x01)  !=0)      also mit dem P1&0x01, wird ja abgefragt ob P1 
gerade 0x01 beträgt. Aber was soll das "!=0" ?

P1=P1 | 0x02 ;       mit diesen beiden zeilen weiß ich auch rein 
garnichts P1=P1 & 0xFD;        an zu fangen

von Azurox (Gast)


Lesenswert?

Oh Sorry, die Formatierung war etwas daneben.

P1=P1 | 0x02 ;
P1=P1 & 0xFD;


Gemeint waren diese beiden Zeilen.  In der 2. könnte ich höchstens 
vermuten, dass abgefragt wird, ob P1 den Wert 0xFD hat?

von Elektroniker (Gast)


Lesenswert?

Azurox schrieb:
> Besten Dank ! :) Hab für die Berechnung nur eine Formel bekommen und
> bisher nur damit gerechnet. So scheint mir die Berechnung auch viel
> logischer und einfacher ! Super!

Ja, Formeln sind zwar praktisch, wenn man das ganze kompakt aufschreiben 
will, fördern aber nicht unbedingt das Verständnis. Außerdem können ohne 
das Verständnis leicht Fehler einschleichen.

Zu deinen Portabfragen:

Guck mal unter
http://de.wikibooks.org/wiki/C-Programmierung
bei
Referenzen / Ausdrücke und Operatoren
und dort unter
Bitmanipulation

> if ((P1&0x01)  !=0)      also mit dem P1&0x01, wird ja abgefragt ob P1
> gerade 0x01 beträgt. Aber was soll das "!=0" ?

Nicht ganz. Mit
P1 &  0x01       wird ja erstmal eine bitweise UND Operation 
durchgeführt, d.h. das unterste Bit wird herausmaskiert.

z.B.
P1 binär 01100110
Maske    00000001
& ->     00000000

oder
P1       01101011
Maske    00000001
& ->     00000001


Mit
 ... !=0      wird dann geprüft, ob das Ergebnis ungleich Null ist.
Insgesamt wird also geprüft, ob das unterste Bit von P1 gesetzt ist. Die 
anderen Bits spielen durch die Maskierung keine Rolle.

Bei diesen beiden Zeilen
P1=P1 | 0x02 ;
P1=P1 & 0xFD;

läuft es entsprechen. Im ersten Fall findet eine bitweise ODER statt, im 
zweiten eine Maskierung mit 0xFD. Das Ergebnis aber nicht für einen 
Vergleich verwendet, sondern als neuer Wert in P1 geschrieben.

von Azurox (Gast)


Lesenswert?

Wow, super!
Dank Dir :)

Hast mir wirklich weiter geholfen! Jetzt ergibt das Programm auch einen 
Sinn ;)

von Elektroniker (Gast)


Lesenswert?

Warum können Lehrer das nicht direkt rüberbringen???

Frohes Schaffen

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.