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
> a==4000000
Diese Zeile benötigt mehrere Takte und die wird 4 Millionen mal
ausgeführt.
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
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.
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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.