Das Problem konnte ich reproduzieren.
Du musst noch den Systick_handler programmieren, dann funktioniert es,
zumindest bei mir:
void SysTick_Handler(void){}
Mir geht es nicht darum, dass der blaue Taster die LED an oder
ausschaltet(das geht). Miene Frage ist, warum diese Funktion den Taster
daktiviert und wozu sie da ist. Sie wurde nämlich in einem tutorial
verwendet und daraufhin habe ich nach dem Fehler relativ lange
gesucht(und ihn gefunden ;-)). Mich würde es nur interessieren.
Um das von Manax etwas zu erklären:
Entprellung bedeutet, dass man das Prellen von Schaltern eliminiert.
Prellen ist ein "Nachschwingen" des Schalters. Man drückt den Taster
zwar nur einmal, der sendet jedoch öfter ein Signal.
http://www.mikrocontroller.net/articles/Entprellung
Soweit ich das verstanden habe, kann man mit sogenannten Timer-Routinen
Taster entprellen. Also "schwingen die Taster noch nach", jedoch merkt
die Software/der Timer, dass das nur das Prellen ist, da die Signale zu
oft hintereinander bzw. zu schnell kommen.
Wie ich die Frage verstehe:
"Macht der Controller die Entprellung wohl mit Hilfe einer
Timer-Routine?"
(Hier wurde jedoch kein Timer initialisiert, also Antwort: Nein, außer
die STMs machen das vielleicht implizit von sich aus. Das weiß ich
nicht.)
Grüße
Welpe
Dann definiere doch mal 'funzen'.
Was genau 'funzt' denn nicht mehr? Soll heißen: Wie fragst du denn den
Taster ab, so dass er nicht mehr funzt?
Ein möglicher Zusammenhang zwischen Timer und bewusstem Taster sieht
dergestalt aus, dass du eine 'Systemfunktion' hast, von der du den
Taster-Zustand kriegst. Um den Taster zu entprellen, wird der Timer
benutzt. Stellst du den Timer ab, klappt da natürlich nichts mehr.
Fragst du aber den Taster selber in Form von Port-I/Os ab, gibt es aus
meiner Sicht keinen Grund, warum das nicht funzen sollte. Aber: Ich
kenne ja auch das Board nicht bzw. wie man die I/O Sektion des µC
initialisieren muss, damit der I/O läuft.
Es ist wie immer: Ohne Programm (möglichst minimalistisch) ist es
schwer, da irgendwas vernünftiges dazu zu sagen. Kann ja auch sein, dass
es da eine QUerverbindung zwischen dem Takt und den Ports gibt, indem
dieser Takt als Takt für das I/O Subsytstem fungiert.
Du hast wahrscheinlich ein komplett anderes Problem
benutz den Debugger dann siehst du das dein Programm gar nicht mehr
läuft,
also auch nicht mehr den Taster abfragen kann
die Funktion :
1
SysTick_Config(SystemCoreClock/100);
aktiviert den Systemtimer (wie der Name schon sagt) und
dieser springt zu gegebener Zeit in eine Interrupt-Service-Funktion
die hast du aber in deinem Programm wahrscheinlich nicht definiert
also springt die CPU ins Nirvana
füge mal diese Zeilen nach deiner Main hinzu :
1
void SysTick_Handler(void)
2
{
3
4
}
die macht zwar keinen Sinn aber zumindest hat die CPU
dann ein Sprungziel und damit sollte auch der Taster wieder "funzen"
sag bescheid ob es das war
Gruss Uwe
Tobi D. schrieb:> Das Problem konnte ich reproduzieren.> Du musst noch den Systick_handler programmieren, dann funktioniert es,> zumindest bei mir:> void SysTick_Handler(void){}hust
^^
12V DC schrieb:> Ich will einfach nur wissen, was diese funktion macht.
Den Systick konfigurieren (eine Exception, die alle X Zyklen auftritt)
> Nebenbai wäre es> auch noch gut, zuwissen, was diese Funktion mit dem blauen Taster macht.
Nichts.
----
Wie meine Vorredner schon geschrieben haben fehlt dir wahrscheinlich
(Glaskugel) ein Handler für den Systick, so dass dein Code vorher in
eine Endlosschleife durch die Exception läuft.
Tobi D. schrieb:> Tobi D. schrieb:>> Das Problem konnte ich reproduzieren.>> Du musst noch den Systick_handler programmieren, dann funktioniert es,>> zumindest bei mir:>> void SysTick_Handler(void){}>> *hust*> ^^
...hatte ich überlesen (der TO wahrscheinlich auch :-)
12V DC schrieb:> Ich will einfach nur wissen, was diese funktion macht.
welche Funktion ?
und gegenfrage...wie gut kennst du dich im Programmieren aus ?
UB
Ich poste bald mal den kompletten Quellcode vielleicht hilf der weiter.
Der ist übrigens in dem Beitrag "Stm32f4 Taster" auf diesem Forum zu
finden(abgeschoben etwas älter).
12V DC schrieb:> Ich will einfach nur wissen, was diese funktion macht. Nebenbai> wäre es> auch noch gut, zuwissen, was diese Funktion mit dem blauen Taster macht.
Der sytick ist ein Timer, der so wie du ihn konfiguriert hast 100 mal
pro sek einen interrupt auslöst ( systickhandler ) darin kannst du machn
was du willst. benutzt wird er gerne imirgendeine zeitbasis für
synchrone prozesse zu haben.
mal unter uns hausfrauen. den entdeckerdrang in allen ehren. bevor man
sich aber an die hardware begibt, wenigstens mal grob in das datenblatt
schauen oder zumindest ein gutes tutorial durcharbeiten.
Hi 12VDC,
du brauchst deinen Code nicht zu posten
wenn du dich, wie du schreibst, in Programmierung auskennst,
dann weißt du über Interrupts bescheid und wie man sie benutzt
1. Interrupt einschalten
2. Interrupt Funktion schreiben
du hast Punkt 1 gemacht mit :
1
SysTick_Config(SystemCoreClock/100);
aber Punkt 2 fehlt :
1
void SysTick_Handler(void)
2
{
3
// nothing to do
4
}
du hast jetzt zwei Möglichkeiten :
1. entweder den Interrupt nicht aktivieren
durch weglassen vom SysTick_Config Aufruf
(dann brauchst du auch keinen Interrupt-Handler)
oder
2. den Interrupt-Handler in dein Programm hinzufügen
mach eins von den beiden und alle werden glücklich
UB
noch eine Frage: warum fürst du eine Funktion (SystickConf...) aus von
der du garnichts weißt? Muss doch irgendeinen Grund gehabt haben. Also
irgendwas musst du doch damit vorgehabt haben ?
@ggast, Uwe B
Ich weiß, die Geschichte mit dem Systick habe ich aus einem Tutorial
genommen(mystm.de) und nur den Sxstick-Handler weggelassen, Weil ich
dachte, eine Funktion, die niochts macht und auch nicht aufgerufen wird,
macht nichts. Da die Funktion nicht näher beschrieben wurde, und die
LED's auf diese Weise funktionierten, kam ich erst sehr spät darauf, als
ich zwei Codes abglich(das andere war von eliaselectronik.com glaube
ich). Ich frage mich wie eine Interruptfunktion den Taster
ignoriert(deaktiviert?) aber gleichzeitig die LED's leuchten lässt, ohne
irgendwelche (sichtbaren) PWM Ausgaben.
Frage: Wird der Systickhandler während des Interrupts ausgeführt?
@Kindergärtner
Als Anf#änger würde ich VB und HTML & Co. lernen. Was hast du gegen die
Aussage? Würdest du dich mit den Kentnissen Anfänger nennen?
12V DC schrieb:> @ggast, Uwe B>> Ich frage mich wie eine Interruptfunktion den Taster> ignoriert(deaktiviert?) aber gleichzeitig die LED's leuchten lässt, ohne> irgendwelche (sichtbaren) PWM Ausgaben.
gut ich versuchs noch einmal...(mein letzter Post in diesem Thread)
Ausgangslage = dein Programm ist ohne Systick-Handler
1. Du schaltetst die Platine ein (Power-ON)
2. Die CPU arbeitet deine "initApplication"-Funktion ab
und startet den Systick-Timer (mit 10ms Intervall)
3. Die CPU ließt den blauen Button-EIN
4. Der Button ist nicht gedrückt
5. Die CPU schaltet die blaue LED ein (weil Button=Lo)
6. GOTO 3
7 !! ... 10ms nach Power-ON feuert der Systick-Timer
und die CPU will in den Systick-Handler springen
ABER
es gibt keinen Systick-Handler...die CPU landet außerhalb vom
definierten Code und wahrscheinlich in einem Default-Handler
von da kommt die CPU nicht mehr raus
Ergebnis : die blaue LED leuchtet fröhlich vor sich hin
bis zum Sankt-Nimmerleinstag
end of a great story from a little bug !
@lippy
http://www.mystm32.de/doku.php
@uwe b
Vielen Dank, jetzt habe ich es verstanden
Meine letzte Frage in diesem Thread:
12V DC schrieb:> Wird der Systickhandler während des Interrupts ausgeführt?
12V DC schrieb:> Als Anf#änger würde ich VB und HTML & Co. lernen. Was hast du gegen die> Aussage? Würdest du dich mit den Kentnissen Anfänger nennen?
Sowas von. VB und HTML sind ja nichtmal richtige Programmiersprachen.
Wenn ich eine Reihe von unterschiedlichen Sprachen, die fortgeschrittene
Programmiertechniken unterstützen (wie C++, Java, ruby, Scala, vllt
LISP) sowie eine Reihe von Technologien (wie Webgedöns, Embedded, PC,
3D-Zeug, Datenbanken, parellele Programmierung, ...) beherrsche, die
auch alle gut anwenden kann (und verstehe welche man wo anwendet), und
dort auch große komplexe Programme ordentlich umsetzen kann, dann würde
ich mich vielleicht fortgeschritten nennen.
Ich weiß nicht, aber ich würde nach 4 Jahren Programmiererfahrung schon
sagen, das VB einbe Programmiersprache ist, vielleicht keine höhere,
aber es ist trotzdem eine. Außerdem kommt es ja wohl nicht darauf an,
wie viele höhere manb beherrscht, denn wennn man sich mit einer Sprache
länger beschäftigt, dann kennt man die grundlegenden Algorithmen ja auch
und darauf kommt es meines Erachtens viel mehr drauf an. Außerdem nur
zur Info: Ich würde C als höhere Programmiersprache bezeichnen, den
daran, das der gesamte Linux-Kernel aus Asm & C besteht (von
Phyton-Scripts mal abgesehen).
'Webgedöns' und 3D Zeug braucht einen Hardwareprogrammierer ja wohl eher
net zu beschäftigen, oder?? Evt. sollte man sich eine Website basteln
können, aber sonst lerne ich nur das, was ich unmittelbar brauche.
12V DC schrieb:> Ich weiß nicht, aber ich würde nach 4 Jahren Programmiererfahrung schon> sagen, das VB einbe Programmiersprache ist, vielleicht keine höhere,> aber es ist trotzdem eine.
Du programmierst 4 Jahre in VB und verspürst nicht den Wunsch nach etwas
besseren? Oje.
12V DC schrieb:> Außerdem kommt es ja wohl nicht darauf an,> wie viele höhere manb beherrscht, denn wennn man sich mit einer Sprache> länger beschäftigt, dann kennt man die grundlegenden Algorithmen ja auch> und darauf kommt es meines Erachtens viel mehr drauf an.
Nun, das ist ein häufiger Irrtum. Solange es um ein bisschen Algorithmen
rechnen geht, stimmt das vielleicht. Aber zur Modellierung größerer
Programme macht die Wahl der Programmiersprache eine Menge aus; z.B. die
Features zur Metaprogrammierung, Compiletime-Rechnung, RAII, Exceptions,
Value Types, allgemein zur Kapselung etc. in C++ ermöglichen abstrakten,
effizienten und wiederverwendbaren Code auf einem Level, das in anderen
Sprachen überhaupt nicht zu erreichen ist. Wenn man nun um diese
unterschiedlichen Möglichkeiten, deren Anwendung und Vor&Nach-Teile, in
verschiedenen Sprachen weiß, und nicht nur Schmalspur- VB und C, dann
kommt man eher in den Bereich des "Fortgeschritten".
12V DC schrieb:> Ich würde C als höhere Programmiersprache bezeichnen, den> daran, das der gesamte Linux-Kernel aus Asm & C besteht (von> Phyton-Scripts mal abgesehen).
Ja, aber es geht "höher". Dass der Linux Kernel in C ist, hat
historische (und persönliche, seitens Torvalds') Gründe; auch beim
Kernel-Development kann man stark von den Features von C++ profitieren.
12V DC schrieb:> 'Webgedöns' und 3D Zeug braucht einen Hardwareprogrammierer ja wohl eher> net zu beschäftigen, oder??
Nicht unbedingt. Aber um sich als fortgeschrittenen Programmierer
bezeichnen zu dürfen, sollte man eine Reihe an Feldern kennen, und nicht
nur eines (wie Mikrocontroller); es muss nicht unbedingt Web sein.
> Evt. sollte man sich eine Website basteln> können
Wenn man die dann nur in HTML von Hand codet... urks.
1.)ich programmiere seit 3 Jahren nicht mehr VB.
2)Du hast natürlich Recht, das c++ seine Vorteile hat, aber zum Einstieg
war mir C besser, da ich mit Linux von Anfang an mit C konfrontiert
wurde.
3.) is ja logisch das ich meine Websites nicht von Hand bastele.
4.) C++ lerne ich als nächstes. Aber als fortgeschrittener
Programmierer geht es nicht darum alle Sprachen die es gibt zu können.
Da müsstest du mir zustimmen.
4.) Ich hab mal angefangen Java zu lernen, aber es sofort wieder
aufgegeben, weil die sich so mit der OOP verguckt haben.
12V DC schrieb:> 1.)ich programmiere seit 3 Jahren nicht mehr VB.
Gut für dich...
> 2)Du hast natürlich Recht, das c++ seine Vorteile hat, aber zum Einstieg> war mir C besser, da ich mit Linux von Anfang an mit C konfrontiert> wurde.
C++ geht auch unter Linux, und wenn man onehin richtig
("fortgeschritten") programmieren lernen will, kann(sollte) man auch
gleich mit C++ verwenden, da man sonst alle schlechten C-Angewohnheiten
wieder un-lernen muss...
> 3.) is ja logisch das ich meine Websites nicht von Hand bastele.
Aber HTML schreiben :D
> 4.) C++ lerne ich als nächstes. Aber als fortgeschrittener> Programmierer geht es nicht darum alle Sprachen die es gibt zu können.> Da müsstest du mir zustimmen.
Nicht alle, aber einige wichtige und grundverschiedene, wie eben z.B.
Java, C++, Python.
> 4.) Ich hab mal angefangen Java zu lernen, aber es sofort wieder> aufgegeben, weil die sich so mit der OOP verguckt haben.
OOP zu verstehen und anzuwenden ist ja mal absolute Grundvorraussetzung
um sich "fortgeschritten" nennen zu dürfen... Dass Java das so forciert
ist gar nicht so schlecht um die Leute zu ihrem Glück zu zwingen.
Kommt auf den Anwendungsbereich an. Für Mikrocontroller ist Java eher
Blödsinn, wobei für Mathematische Berechnungen in Spiele wohl eher Java
gut is.
Ich bleibe jedenfalls bei meiner Behauptung. Jeder kann ja etwas anderes
finden. Das bestimmte Grundlagen da sein müssen ist ja richtig. Teile
davon habe ich mir jaschon angeeignet.
12V DC schrieb:> Meine letzte Frage in diesem Thread:> 12V DC schrieb:>> Wird der Systickhandler während des Interrupts ausgeführt?
Kann, muss aber nicht.
Ich würde erstmal davon ausgehen, dass er das nicht wird. Man kann Ihn
aber so einstellen. Genaueres dazu findest du in der Doku von ARM zu den
Cortex-M Kernen.
12V DC schrieb:> Kommt auf den Anwendungsbereich an. Für Mikrocontroller ist Java> eher> Blödsinn, wobei für Mathematische Berechnungen in Spiele wohl eher Java> gut is.
Wieso das, da sind die Möglichkeiten doch äquivalent zu C/C++. Und
gerade Spiele profitieren von der Performance von C++. Allerdings wird
Java sehr viel verwendet, weswegen es wichtig ist es inkl. Vor &
Nach-Teilen zu kennen.
> Ich bleibe jedenfalls bei meiner Behauptung. Jeder kann ja etwas anderes> finden. Das bestimmte Grundlagen da sein müssen ist ja richtig. Teile> davon habe ich mir jaschon angeeignet.
Deine Behauptung, dass du mit C und VB fortgeschrittener Programmierer
bist?