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 .
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.
Gast
#4675083
Du nutzt einen der PWM Timer des Controllers.
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).
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.