Hallo zusammen, ich bin am Anfang meines Studiums und bin gerade dabei ein Board der XMC 4000er Familie mithilfe von Dave3 zu programmieren.Also bin ich noch Jetzt zu meiner Frage: Auf dem Board sind 2 LEDs drauf die ich beide zum blinken bringen möchte. Eine LED ist kein Problem und die zweite nur zum Dauerleuchten zu bringen auch nicht.Doch das beide blinken,bekomme ich nicht hin. Ich habe dazu 3 Apps mit denen es eigentlich möglich sein sollte: IO004,PWMSP001,NVIC002. Jetzt stellt sich die Frage, wie ich diese Apps richtig verknüpfe? Wenn jmd mit Dave Erfahrung hat und diese womöglich lächerliche Frage beantworten kann, wäre ich dankbar. Grüße Neu
:
Verschoben durch Moderator
Wenn du was lernen willst, lässt du besser die Finger von den DaveApps. Ich arbeite gerade beruflich damit und kann jedem nur abraten davon. Infineon´s Marketing Abteilung hat hier ganze Arbeit geleistet...
Problem ist nur,dass im Internet kaum etwas zu DAVE steht und ich mehr oder weniger auf die Apps angewiesen bin, da ich bislang noch ein Anfänger in C bin.
Neu schrieb: > Auf dem Board sind 2 LEDs drauf die ich beide zum blinken bringen > möchte. Um 2 LEDs unabhängig blinken zu lassen, gibt es verschiedene Ansätze: - 2 Statemachines - 2 Timerinterrupts - Scheduler - Multitasking-OS Keine Ahnung, was davon Dave realisieren kann.
Ich habe es so versucht: Eine LED habe ich mithilfe von PWM zum blinken gebracht.Sein Signal habe ich mit einem Interrupt verknüpft, mit dem ich versuche die 2te LED ein- und auszuschalten. Jedoch lässt sich die 2te LED,die mithilfe einer IO App läuft nicht mit dem dem Interrupt verbinden,zumindest mit meinem Wissensstand. Ich habe versucht eine Schleife zu schreiben: for(int i=0;i<10000;i++){ if(i%2000==0){ IO004_TogglePin(IO004_Handle0); } else{ IO004_ResetPin(IO004_Handle0); } } hier habe ich versucht die LED bei verschiedenen Werten von i leuchten zu lassen und ansonsten zu reseten,damit eine Art blinken erzeugt wird. Doch sie wird nur gedimmt,was für mich heißt dass die Frequenz viel zu hoch ist...Jedoch habe ich keine Ahnung wie ich diese drosseln kann.
Du schaltest zwar ab und zu ein (i==0, 2000, 4000, ...), aber auch sofort wieder aus (z.B. bei i==1). Wirf einfach das "IO004_ResetPin" raus, dann wird alle 2000 Durchläufe umgeschalten. Die Blinkfrequenz wird durch die 2000 vorgegeben. Ich habe den Code mal ein bisschen modifiziert:
1 | static int i = 0; |
2 | if(i%2000==0) |
3 | { |
4 | IO004_TogglePin(IO004_Handle0); |
5 | } |
6 | i++; |
[edit] Ich habe jetzt erst Interrupt gelesen und den Code etwas modifiziert... [/edit]
Danke für die Antwort.Doch komischweise leuchtet die LED jetzt einfach durch^^. Liegt das womöglich daran,dass ich die LED mithilfe einer IO App angesteuert habe?Und hier irgendwelche Probleme zwischen Quellcode und App auftreten? Wobei noch gesagt werden sollte, dass die App alleine die LED nicht zum leuchten gebracht hat,sondern erst mit dem Befehl "IO004_TogglePin(IO004_Handle0);" in der main.
Warum immer so kompliziert? Hier das Beispiel mit 2 Statemachines auf dem AVR:
1 | #define F_CPU 1e6 // 1MHz
|
2 | #include <util/delay.h> |
3 | #include "sbit.h" |
4 | |
5 | #define LED0 PORT_B0
|
6 | #define LED0_oe DDR_B0
|
7 | #define LED1 PORT_B1
|
8 | #define LED1_oe DDR_B1
|
9 | |
10 | void statemachine0() |
11 | {
|
12 | static int state = 0; |
13 | |
14 | switch( ++state ){ |
15 | case 150: LED0 = 1; |
16 | break; |
17 | case 300: LED0 = 0; |
18 | state = 0; |
19 | break; |
20 | }
|
21 | }
|
22 | |
23 | void statemachine1() |
24 | {
|
25 | static int state = 0; |
26 | |
27 | switch( ++state ){ |
28 | case 400: LED1 = 1; |
29 | break; |
30 | case 800: LED1 = 0; |
31 | state = 0; |
32 | break; |
33 | }
|
34 | }
|
35 | |
36 | int main() |
37 | {
|
38 | LED0_oe = 1; // output |
39 | LED1_oe = 1; // output |
40 | for(;;){ |
41 | _delay_us( 1000 ); // 1ms time base |
42 | |
43 | statemachine0(); |
44 | statemachine1(); |
45 | }
|
46 | }
|
Peter Dannegger schrieb: > Warum immer so kompliziert? Weil alle immer glauben, dass es am sinnvollsten als Anfänger ist, wenn man sich gleich mal mit einem entsprechendem Framework umgibt, welches das Lernen der Programmierung bzw. einer Programmiersprache unnötig macht. Die Wahrheit ist genau anders rum. Kennt man erst mal eine Programmiersprache bzw. kann konventionell programmieren, dann sind Frameworks eine Erleichterung und man versteht auch, wie und warum manche Dinge im Framework genau so gelöst sind und nicht anders. Ohne die 'klassischen Vorkenntnisse' hingegen steht man da wie der Ochs vorm Tor, weil nichts Sinn zu ergeben scheint und man die Querverbindungen innerhalb des Frameworks nicht versteht. Die Industrie tut dann natürlich noch das Übrige dazu, indem sie diese Systeme anpreist wie geschnitten Brot. Die wollen ihr Zeug ja schliesslich auch verkaufen.
#include <util/delay.h> #include "sbit.h" können in dave3 nicht eingebunden werden,somit kann ich diesen Quelltext(auch wenn er richtig ist) nicht verwenden^^
Neu schrieb: > können in dave3 nicht eingebunden werden Natürlich nicht. Portzugriffe und Delay sind keine C Standardfunktionen, da kocht jeder Compilerhersteller sein eigenes Süppchen. Die mußt Du also durch entsprechende Funktionen Deines Compilers ersetzen. Ich denke aber, man erkennt leicht, was die Funktionen wie "LED0 = 1" usw. tun sollen. Ich wollte auch nur das Prinzip einer Statemachine verdeutlichen, d.h. gerade kein gedankenloses Abkupfern.
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.