Forum: Compiler & IDEs Funktion funktionieren nicht aber warum?


von Kay U. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

nach dem ich nochmal über alles drüber geschaut haben und es auch im VS 
10 ausprobiert haben. Hab ich leider im AtmelStudio immer noch keinen 
erfolg.

Scheinbar bekommt die Funktion die gesetzten Variablen nicht über 
mittelt, siehe: PCA9635.c und PCA9635.h.

Vielleicht hat jemand von euch noch eine idee..?

Grüße, Kay

von gcc (Gast)


Lesenswert?

Kay Ulbricht schrieb:
> Scheinbar bekommt die Funktion die gesetzten Variablen nicht über
> mittelt, siehe: PCA9635.c und PCA9635.h.

welche sollten denn wohin übergeben werden? (In deinem Quelltext ist 
nichts dazu zu finden!)

von Kay U. (Gast)


Lesenswert?

Von der PCA9635_OFF bzw der FULL_ON sollen die LED0.. LED26 und andere 
gesetzt und dann in der PCA9635 an den Chip gesendet werden..

von Stefan E. (sternst)


Lesenswert?

Kay Ulbricht schrieb:
> Scheinbar bekommt die Funktion die gesetzten Variablen nicht über
> mittelt, siehe: PCA9635.c und PCA9635.h.

Weil es unterschiedliche Variablen sind.
LED[1] ist eine andere Variable als LED1.

von Karl H. (kbuchegg)


Lesenswert?

Was jetzt?

Benutzt du ein Array um die LED Werte zu halten
1
uint8_t LED[NR_LEDS];
2
....
3
4
  // Set all Output of 0x00(0)
5
  for( i = 0; i < NR_LEDS; i++ )
6
  LED[i] = 0x00;
7
....

oder benutzt du einzelne Variablen
1
...
2
  //Reg 0x02-0x11 - PWM0-15 - LED Helligkeit
3
  //RGB_LED5:(der Zeit defekt :( )
4
  TWIM_Write(LED12);          //OUT0 - R
5
  TWIM_Write(LED13);          //OUT1 - G
6
  TWIM_Write(LED14);          //OUT2 - B
7
8
  //RGB_LED6:
9
  TWIM_Write(LED15);          /
10
....

für eines von beiden musst du dich entscheiden. Aber nicht beides 
gleichzeitig und dann erwarten, dass irgendwie magisch die Werte aus dem 
Array in den einzelnen Variablen landen, die du im Header File hast.


Wenn du Arrays benutzen willst, dann schmeiss die Variablen
1
...
2
// LED_OUT_Variablen
3
// RGB_LED1:
4
unsigned char LED0;
5
unsigned char LED1;
6
unsigned char LED2;
7
...

aus dme Header File raus. Der Compiler wird dir dann sagen, was noch 
alles auf Array umgestellt werden muss.

von gcc (Gast)


Lesenswert?

Karl Heinz schrieb:
> Benutzt du ein Array um die LED Werte zu halten
...
> oder benutzt du einzelne Variablen
>
diese Frage wollte ich auch gerade stellen :-)

von Kay U. (Gast)


Lesenswert?

okay okay.. verstehe was du meinst aber mir eröffnet sich die frage wie 
ich dann die einzelnen werte ändern kann ohne alles nochmal zuschreiben. 
Also ich meine ich will einfach nur den wert von LED5 ändern und dazu 
nicht alles nochmal schreiben.. Also verstehst du was ich meine.

von Kay U. (Gast)


Lesenswert?

ich nutze das Array quasi nur um die LEDs auf einen anfangs bzw. alle 
auf 0xFF zu setzen

von gcc (Gast)


Lesenswert?

...mal Offtopic...

In Tcl würde so etwas ähnliches sogar gehen --> Variablennamen in einer 
Zählerschleife "generieren" und später dann ganz normal ansprechen 
("Alles ist ein String")

von gcc (Gast)


Lesenswert?

Kay Ulbricht schrieb:
> einfach nur den wert von LED5 ändern

LED[5] = wert;

von Kay U. (Gast)


Lesenswert?

Ja war quasi die idee.. funktioniert aber eben nicht.. auch wenn ich das 
Array rausnehme.. genau da liegt mein Problem..

von Kay U. (Gast)


Lesenswert?

und weil ich nicht hundert mal LED0 .. LED26 = 0x00 oder so schreiben 
wollte.. kam die idee mit dem Array (auch ein Tipp aus dem Forum)..

von Karl H. (kbuchegg)


Lesenswert?

Kay Ulbricht schrieb:
> Ja war quasi die idee.. funktioniert aber eben nicht.. auch wenn ich das
> Array rausnehme.. genau da liegt mein Problem..

Nein.
dein Problem liegt ganz woanders. Aber ich bin es mitlerweile leid, mir 
jeden Tag 5 mal den Mund fusselig zu reden.

Ganz andere Frage. Hat denn die Ansteuerung der LED schon mal geklappt? 
Wenn ja, mit welchem Code?

von gcc (Gast)


Lesenswert?

Du solltest vielleicht erstmal erklären was du eigentlich machen 
möchtest!

von Udo S. (urschmitt)


Lesenswert?

Kernighan Ritchie.
Programmieren heist nicht rumprobieren sondern erst mal Grundlagen 
lernen!

von Kay U. (Gast)


Lesenswert?

danke erstmal für die Tipps.. es funktioniert jetzt aber ohne das 
Array.. Ja sry war eventuell etwas dumm formuliert.

Was ich vorhabe.. ich würde gerne über eine UART Schnittstelle vom PC 
aus die LED werte ändern können. Dazu hab ich mir gedacht Variablen zu 
verwenden um die eingaben einfacher zu machen.

Ja es hat schon mal Funktioniert nur war der Code Aufwand wesentlich 
höher darum haben ich es nochmal umgeschrieben...

von gcc (Gast)


Lesenswert?

Du musst dich schon entscheiden, ob Array oder einzelne Variablen. Das 
scheinst du nicht verstanden zu haben!

LED5 ist nicht LED[5]

Schreibe alles auf Arrays um und schmeisse die bekloppten Variablen 
LEDxx aus dem Quelltext!

Passe dementsprechend auch den Rest deines Programms an! Vor allem die 
Funktion PCA9635(). Kleiner Tipp:

for (i=0; i<NR_LEDS; i++) TWIM_Write(LED[i]);

geht auch!

Und nebenbei, halte dich bitte an den C-Quasistandard: Variablen, 
Funktionen etc. kleingeschrieben; Makros, Defines großgeschrieben. Dein 
Quelltext ist schwer zu lesen!

Im Kommentar oben steht Diplomarbeit --> was studierst du eigentlich?

von Kay U. (Gast)


Lesenswert?

gcc schrieb:
> Du musst dich schon entscheiden, ob Array oder einzelne Variablen. Das
> scheinst du nicht verstanden zu haben!

hab mir so eben in meinem Info Unterlagen ein Array nochmal angeschaut. 
Jupp.. hatte das eine dezenten Denkfehler :D.

> Und nebenbei, halte dich bitte an den C-Quasistandard:

da ich kein Informatiker bin und mit µC im Studium nur kurz zu tun 
hatte. Ist das mit dem Quasistandard mir Quasi nicht ganz so geläufig..

> Im Kommentar oben steht Diplomarbeit --> was studierst du eigentlich?

Elektrotechnik

von Karl H. (kbuchegg)


Angehängte Dateien:

Lesenswert?

Kay Ulbricht schrieb:
> danke erstmal für die Tipps.. es funktioniert jetzt aber ohne das
> Array.. Ja sry war eventuell etwas dumm formuliert.
>
> Was ich vorhabe.. ich würde gerne über eine UART Schnittstelle vom PC
> aus die LED werte ändern können.

Ja, das ist das langfristige Ziel

Aber wenn du alles gleichzeitig machen willst, dann verzettelst du dich 
nur. So gut bist du noch lange nicht.

Fang erst mal damit an, die Ansteuerung der LED ausber hinzukriegen. Und 
nur das!
Alles was da nicht dazu gehört, das wirfst du raus und bringst erst mal 
nur deine LED ordentlich zum Leuchten. Dazu definierst du dir dann 
sukzessive immer mächtigere Funktionen bzw. du passt sie an deine 
Bedürfnisse an. Aber es bringt nichts, gleich mal einen Haufen Code zu 
schreiben, der hinten und vorne nicht funktioniert. Um die Leds zum 
leuchten zu bringen brauchst du keine UART und auch keine Tasten. Alles 
was du brauchst ist das TWI Interface und die Funktionen um die 
Bausteine anzusteuern. Mehr nicht.


(Mangels Hardware kann ich das nicht testen. Ich hab mich im 
wesentlichen an deinen Code gehalten, hab ihn ein wenig anders 
strukturiert und was nicht zum eigentlichen ersten Zwischenziel gehört, 
ist gnadenlos rausgeflogen)

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Kay Ulbricht schrieb:

>> Und nebenbei, halte dich bitte an den C-Quasistandard:
>
> da ich kein Informatiker bin

Das hat nichts damit zu tun, dass du ganz offensichtlich keine 
vernünftigen Unterlagen bzw. ein ordentliches Lehrbuch hast.

Wieder einer der denkt, ausgerechnet er könne C von 11 Uhr bis Mittags 
durch ein paar Wweb-Seiten im Internet lernen. Was da dabei rauskommt 
sehen wir hier jeden Tag.

von Kay U. (Gast)


Lesenswert?

> Wieder einer der denkt, ausgerechnet er könne C von 11 Uhr bis Mittags
> durch ein paar Wweb-Seiten im Internet lernen. Was da dabei rauskommt
> sehen wir hier jeden Tag.

Naja 3Semester C, C++ sollte doch schon mehr Untergrund bieten also 1h 
web-seiten studium ;). Ja werde mich bemühen eure Wundervolle Form zu 
erfüllen.. die war für mich nur grade Nebensache.

Aber denke jetzt Funktionierts auch mit Array.. bei Interesse kann ich 
den ganzen Code nochmal reinstellen..

von gcc (Gast)


Lesenswert?

Kay Ulbricht schrieb:
> Aber denke jetzt Funktionierts auch mit Array.. bei Interesse kann ich
> den ganzen Code nochmal reinstellen..

ja bitte!

von Karl H. (kbuchegg)


Lesenswert?

Kay Ulbricht schrieb:
>> Wieder einer der denkt, ausgerechnet er könne C von 11 Uhr bis Mittags
>> durch ein paar Wweb-Seiten im Internet lernen. Was da dabei rauskommt
>> sehen wir hier jeden Tag.
>
> Naja 3Semester C, C++ sollte doch schon mehr Untergrund bieten also 1h
> web-seiten studium ;).

Nach 3 Semestern sollte man allerdings auch in der Lage sein, Arrays 
korrekt einzusetzen und diesen banalen Fehler selbst zu finden

von Ast E. (vis)


Lesenswert?

Karl Heinz schrieb:
> Nach 3 Semestern sollte man allerdings auch in der Lage sein, Arrays
> korrekt einzusetzen und diesen banalen Fehler selbst zu finden

klingt hart... aber er hat Recht ;-)

von Kay U. (Gast)


Lesenswert?

Natürlich hat er recht.. viel vergessen oder zu viel chemisch gelöscht.. 
:/

von jo (Gast)


Lesenswert?

chemisch gelöst?

Hör auf mit den Drogen und fang an zu programmieren.

Gruß Jonas

von Udo S. (urschmitt)


Lesenswert?

Kay Ulbricht schrieb:
> Naja 3Semester C, C++ sollte doch schon mehr Untergrund bieten

Wie man Arrays benutzt kann man nach 3 Abenden Kernighan-Ritchie lesen 
sich selbst beibringen. Und nein, dazu muss man man kein Übermensch 
sein.

Kay Ulbricht schrieb:
> viel vergessen oder zu viel chemisch gelöscht.

Sorry aber soviel kann man gar nicht saufen. Da hätte man dich 
mindestens 1 mal pro Woche mit Alkoholvergiftung einliefern müssen.

Karl Heinz schrieb:
> Mangels Hardware kann ich das nicht testen. Ich hab mich im
> wesentlichen an deinen Code gehalten, hab ihn ein wenig anders
> strukturiert und was nicht zum eigentlichen ersten Zwischenziel gehört,
> ist gnadenlos rausgeflogen)

Du bist echt zu gutmütig :-)

von Kay U. (Gast)


Lesenswert?

Ohje hat wieder mal der Geist des Forums zugeschlagen! Also ist schon 
okay, mir zusagen das man das hätte wissen müssen aber wenn Forum 
Typisch. Leute nicht mehr gut gemeinte Tipps geben, sonst nur recht sinn 
frei einem erklären wir bescheuter man doch ist. Dann wird es echt etwas 
albern.. Aber ist okay.. jeder wie er es gerne hat ;o)...

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Kay Ulbricht schrieb:
> Ohje hat wieder mal der Geist des Forums zugeschlagen! Also ist schon
> okay, mir zusagen das man das hätte wissen müssen aber wenn Forum
> Typisch. Leute nicht mehr gut gemeinte Tipps geben, sonst nur recht sinn
> frei einem erklären wir bescheuter man doch ist. Dann wird es echt etwas
> albern.. Aber ist okay.. jeder wie er es gerne hat ;o)...

Häh? Kannst Du das nochmal in verständlichem Deutsch schreiben? Ich habe 
nichts, aber auch gar nichts verstanden.

von jonas biensack (Gast)


Lesenswert?

>Häh? Kannst Du das nochmal in verständlichem Deutsch schreiben? Ich habe
>nichts, aber auch gar nichts verstanden.

siehe:

>viel vergessen oder zu viel chemisch gelöscht..

Gruß jonas

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.