Forum: Mikrocontroller und Digitale Elektronik STM32F4 Discovery chibiOS chThdSleepMilliseconds zu langsam


von Selvos (Gast)


Lesenswert?

Hallo,
ich habe gerade angefangen mit dem STM32F4 zu arbeiten. Da ich für mein 
späteres Projekt das chibiOS brauche, bin ich gerade dabei mich ein 
bisschen mit dem selbigen zu beschäftigen.
Nun zu meinem Problem:

Mit diesen Anweisungen
1
palSetPad(GPIOD, GPIOD_LED4);
2
chThdSleepMilliseconds(X);
3
palClearPad(GPIOD, GPIOD_LED4);  
4
chThdSleepMilliseconds(X);
sollte der digitale Ausgang für eine bestimmte Zeit X auf High bzw. auf 
Low sein. Diese Zeit habe ich mit einem Oszi nachgemessen und die Zeiten 
sind immer länger als die "programmierten".

Wenn X=10 dann messe ich 40ms, bei X=50 messe ich 80ms, bei X=100 messe 
ich 120m und bei X=1000 messe ich 1020.

Ist vielleicht die Taktfrequenz vom Prozessor falsch eingestellt? Wo 
kann ich die eingestellte Taktfrequenz kontrollieren?

Vielen Dank für eure Hilfe!

von Lutz H. (luhe)


Lesenswert?

Selvos schrieb:
> palClearPad(GPIOD, GPIOD_LED4);
> chThdSleepMilliseconds(X);

Ich würde einmal messen,wie lange  > palClearPad(GPIOD, GPIOD_LED4);;
palSetPad(GPIOD, GPIOD_LED4);
braucht. Wenn jeweils 10  dann ist es dach i.O.

Selvos schrieb:
> palSetPad(GPIOD, GPIOD_LED4);       t1
> chThdSleepMilliseconds(X);          t2
> palClearPad(GPIOD, GPIOD_LED4);     t3
> chThdSleepMilliseconds(X);          t4


Gesamtzeit=t1+t2+t3+t4


Wie sieht die Impulsfolge bei diesem Code aus?
palSetPad(GPIOD, GPIOD_LED4);
chThdSleepMilliseconds(X);
palClearPad(GPIOD, GPIOD_LED4);
chThdSleepMilliseconds(X);
palClearPad(GPIOD, GPIOD_LED4);
palSetPad(GPIOD, GPIOD_LED4);
palClearPad(GPIOD, GPIOD_LED4);
palSetPad(GPIOD, GPIOD_LED4);
palClearPad(GPIOD, GPIOD_LED4);

Gibt es für den  STM32F4 mit den  chibiOS Betriebssystem schen ein 
Projekt, mit dem ich einsteigen könnte?

: Bearbeitet durch User
von Marcel H. (selvos)


Lesenswert?

Gute Idee mit dem messen, nur die Ergebnisse sind kurios:
1
palSetPad(GPIOD, GPIOD_LED4); -> ca. 20 ms
2
palClearPad(GPIOD, GPIOD_LED4); -> ca. 60 ms
Vielleicht ist die "kürzeste" Thread-Zeit auch 80ms?
Weil wenn ich:
1
palTogglePad(GPIOD, GPIOD_LED4);
 benutze komme ich auf die gleichen Ergebnisse: 20ms High, 60 ms Low

Ich hätte gedacht das es möglich ist die GPIO's wesentlich schneller zu 
setzen, aber wahrscheinlich werden diese nicht direkt mit den 168Mhz 
angesprochen. Ich suche noch die Einstellungen für den Vorteiler im 
chibiOS.

Ich habe vorher noch nie eine 32Bitter programmiert, deswegen habe ich 
mir erstmal folgenden "Fahrplan" für den Anfang erstellt:
1. mit den LEDs ein bisschen Leuchten & Blinken, auf den Userbutton 
reagieren
2. PWM ( -> da bin ich auf dieses Problem gestoßen)
3. ADC
4. UART
5. SD Karte beschreiben und lesen
6. über den Klinke Ausgang eine Bitfolge abspielen
7. Wavedatei von SD-Karte mit Klinke abspielen
8. MP3 von SD Karte

Ich weiß das es diese Projekte schon fertig gibt, aber ich möchte es 
verstehen und dabei etwas lernen. Zudem soll das MP3 abspielen von der 
SD Karte nur der erste Teilschritt in meinem Projekt werden.

von A. B. (funky)


Lesenswert?

wenns genau sein soll, dann verwende einen Timer.

Laufen bei dir momentan mehrere Threads?

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.