Forum: Mikrocontroller und Digitale Elektronik Zustandswechsel Pin durch Zähler


von Marco V. (overmind)


Lesenswert?

Hallo,

ich probiere mich gerade etwa in der Programmierung mit C eins MC.

Folgemde Szenario:

Ich lasse eine Variable a mit 8 MHz hochzählrn (a++;).
Wenn a==4000000 dann soll der Pin PB0 getoggelt werden.
Zunächst probierte ich erstmal einen Wechsel, also ohne die Variable a 
zurückzusetzen. Ich dachte jetzt, dass der Pegel an dem PIn nach 0,5s 
seinen Zustand wechselt aber komischerweise wechselt der Zustand erst 
nach ca.6s???

Wenn ich die Variable zurücksetze, dann wechstlt der Zustand alle 
0,6us???

Das verstehe ich nicht so richtig.

Benutze ich die delay-Funktion, dann passt das.

Gruß
Marco

von Helmut S. (helmuts)


Lesenswert?

> a==4000000

Diese Zeile benötigt mehrere Takte und die wird 4 Millionen mal 
ausgeführt.

von Marco H. (damarco)


Lesenswert?

und vom Wertebereich der Variabel. Wo ja dann der Überlauf stattfindet.

z.Bsp Word,Integer,int16_t, uint16_t  unsigned 65535 signed 32767

a==4000000 weißt auf eine 32bit Variable hin .

: Bearbeitet durch User
von Marco V. (overmind)


Lesenswert?

Ah ok verstehe, der Vergleich brauch mehrere Takte.
Wenn ich jetzt beispielsweise ne PWM erzeugen möchte, dann hätte ich das 
Taktverhältnis über einen Zähler eingestellt. Aber da das nciht so 
funktioniert, wie könnte man das am einfachsten lösen ?

Ich bin da wohl etwas von FPGA`s verwöhnt, denn da lässt sich ein Takt 
mit beschriebenen Prozedere einfach runterteilen.

von Draco (Gast)


Lesenswert?

Du nutzt einen der PWM Timer des Controllers.

von Marco V. (overmind)


Lesenswert?

Oh ok, da muss ich mich noch einlesen.

Was ich noch nicht verstehe ist, warum der Wechsel alle 0,6us 
stattfindet, wenn ich die Variable a zurücksetzte? (Also, wenn a == 
4000000)

von Axel S. (a-za-z0-9)


Lesenswert?

Marco V. schrieb:
> Wenn ich jetzt beispielsweise ne PWM erzeugen möchte

Dann verwendet man einen Hardware-Timer. Entweder um dierekt das 
PWM-Signal zu erzeugen (Stichwort: output compare) oder um wenigstens 
einen Interrupt auszulösen, in dessen ISR man dann die Arbeit macht 
(Stichwort: Soft-PWM).

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.