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
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.
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.