Forum: Mikrocontroller und Digitale Elektronik Ich brauche hilfe beim c programmierung!!


von med (Gast)


Lesenswert?

Hallo leute,

Ich versuche gerade ein c programm  im CCS Compiler zu schreiben um dem 
Mittelwert eine Schwingungs signal zu brechnen.Ich arbeite mit dem 
Pic18F2026 und benutze ein CCS compiler, dennoch sollte ich den Programm 
so erweitern so dass man die Amplitude des Signals im bezug auf 
Mittelwert auch berechnen kann .
Das Programm schreibe ich neu.Es geht darum einen C Programm zu 
schreiben zur Abtastung ein 100 Hz Signal.Das Programm soll zum beispiel 
100 werte einlesen ,dann den Mittelwert geben und dann die Amplitude im 
Bezug auf dem Mittelwert zu berechnen.

Das programm muss ich danach im CCS Compiler schreiben und dann über den 
Pic 18F2620 einspielen. Der Pic ist mit eienem Sensor verbunden , durch 
schütteln der Sensor soll er zum beispiel 100 werte ausgeben , den der 
Mittelwert berechnen, als auch die Amplitude.

Ich bin gerade ein Anfänger und brauche dringend ein C Code Programm
MFG
Med

von Karl H. (kbuchegg)


Lesenswert?

Welchen Teil des Programms kriegst du selbst hin
und bei welchem Teil, konkret, hast du Probleme?

von gast (Gast)


Lesenswert?

Wenn es sich tatsächlich immer um ein Sinus-Signal handelt, wäre es doch 
besser mittels Spitzenwertgleichrichtung diesen zu erfassen, und daraus 
den Mittelwert zu rechnen. Das würde zwar etwas Hardware bedeuten ist 
aber bzgl. der Erfassung dann wiederum einfacher.

Ich habe das Gefühl, dass Du einen fertigen Code suchst ! Dann bleibst 
Du aber immer Anfänger ! Mach Dir doch zuerst mal Gedanken darüber, mit 
welcher Abtastrate Du mindestens Abtasten must (Shannon) und danach wie 
die Mittelwertbildung in Psuedo-Code bzw. im Ablaufdiagramm aussehen 
müsste. Die Amplitudenberechnung ist auch interessant, da hier z.B. ein 
Faktor z.B. *1.414 ins Spiel kommt.

Dein Problem hört sich nach einer Hausaufgabe (Schule, Studium) an. 
Diese solltest Du besser selbst lösen. Hier kannst Du nur Tipps 
erwarten.

von med (Gast)


Lesenswert?

Ich habe das Gefühl, dass Du einen fertigen Code suchst ! Dann bleibst
Du aber immer Anfänger ! Mach Dir doch zuerst mal Gedanken darüber, mit
welcher Abtastrate Du mindestens Abtasten must (Shannon) und danach wie
die Mittelwertbildung in Psuedo-Code bzw. im Ablaufdiagramm aussehen
müsste. Die Amplitudenberechnung ist auch interessant, da hier z.B. ein
Faktor z.B. *1.414 ins Spiel kommt.

Dein Problem hört sich nach einer Hausaufgabe (Schule, Studium) an.
Diese solltest Du besser selbst lösen. Hier kannst Du nur Tipps
erwarten.

Es handelt es sich um ein Projekt!!Fertige Programme halt ich nichts 
davon !! nur dass ich zum erstmal mit einem Pic programmierung 
zusammensetze  , und das ist nicht einfach!!

Abtastrate habe ich mich 500us ausgesucht damit kriege ich mindestens 20 
Abtastpunkte pro Periode bei einem 100Hz frequenz!!

von med (Gast)


Lesenswert?

Welchen Teil des Programms kriegst du selbst hin
und bei welchem Teil, konkret, hast du Probleme?

Mittelwertbildung habe ich schon geschafft, das Problem ist das Min Max 
bei einem Amplitudenberchnung , der Compiler schmeißt er mir immer 
irgendwelche werte!!

von gast (Gast)


Lesenswert?

Da es sich C-Code handelt, ist es uninteressant ob du zum ersten mal mit 
einem PIC arbeitest. Der gleiche C-Code auf einem PC würde den gleichen 
Müll herauswerfen.

von Karl H. (kbuchegg)


Lesenswert?

med wrote:
> Welchen Teil des Programms kriegst du selbst hin
> und bei welchem Teil, konkret, hast du Probleme?
>
> Mittelwertbildung habe ich schon geschafft, das Problem ist das Min Max
> bei einem Amplitudenberchnung , der Compiler schmeißt er mir immer
> irgendwelche werte!!

Wo liegt das Problem?
Die Funktion ist doch eigentlich ziemlich einfach, wenn du
die Werte mal in einem Array hast
1
   Min = Array[0];
2
   Max = Array[0];
3
4
   for( i = 1; i < 100; ++i ) {
5
     if( Array[i] < Min )
6
       Min = Array[i];
7
8
     if( Array[i] > Max )
9
       Max = Array[i];
10
   }

Also einfach mal annehmen das erste Array Element wäre das
Minimum bzw. Maximum. Danach alle anderen Array Elemente
durchgehen und nachsehen, ob sie nicht vielleicht doch kleiner
sind als das bisherige Minimum. Wenn ja, dann kann das bisherige
Minimum offensichtlich nicht das wahre sein, sondern es gibt ein
neues Minimum. Ist man durch das Array durch, so hat man den
kleinsten Wert gefunden, welcher dann das Minimum der Werte im
Array darstellt.
Selbiges sinngemäß für Maximum und der Größer-Beziehung.

von Severino R. (severino)


Lesenswert?

med wrote:
> der Compiler schmeißt er mir immer irgendwelche werte!!

Der Compiler schmeißt Dir irgendwelche Werte?!
Oder war's der Linker, oder vielleicht doch der Editor?

von med (Gast)


Lesenswert?

an kbuchegg,

Vielen dank  für den Antwort,
Ich probiere es gerade!!

von med (Gast)


Lesenswert?

an severino,

ich glaube der Compiler(debugger)

von Karl H. (kbuchegg)


Lesenswert?

>>> der Compiler schmeißt er mir immer irgendwelche werte!!
>>
>> Der Compiler schmeißt Dir irgendwelche Werte?!
>> Oder war's der Linker, oder vielleicht doch der Editor?

> ich glaube der Compiler(debugger)

Na, dann musst du in Deckung gehen. Nicht dass er dich noch
erwischt!

(Sorry, aber das war ein Aufgelegter. Ich hätte nicht schlafen
können, wenn ich den ausgelassen hätte)

von Gast (Gast)


Lesenswert?

> Ich brauche hilfe beim c programmierung!!

Du brauchst auch ganz dringend Nachhilfe in Grammatik.

von Jochen M. (taschenbuch)


Lesenswert?

> der Compiler schmeißt er mir immer irgendwelche werte!!

Diesen Satz bitte einmal langsam auf der Zunge zergehen lassen.
Was will uns diese willkürliche Kombination von Worten und Buchstaben 
eigentlich sagen?

Zugegeben, das mit den Pronomen ist schwer...
>>ich den Programm  [ ] nein, falsch.
>>einen C Programm  [ ] leider auch noch nicht richtig.
>>Das Programm      [x] Treffer, am Ende hat es geklappt!

Es ist eine ganz schlechte Idee, mit einer Fremdsprache (c) anzufangen, 
bevor man die Muttersprache kennt!

Jochen Müller

von med (Gast)


Lesenswert?

Na ja

gemein seid ihr aufjedemfall zur Anfänger !
Ich habe es ausprobiert Min umd Max stimmen  immer  noch nicht!!

von Johannes M. (johnny-m)


Lesenswert?

Jochen Müller wrote:
> Es ist eine ganz schlechte Idee, mit einer Fremdsprache (c) anzufangen,
> bevor man die Muttersprache kennt!
Woher weißt Du Schlaumeier eigentlich, dass deutsch seine/ihre 
Muttersprache ist? Ich schätze mal, dem ist eher nicht so! Und Leute wie 
Du sollten hier einfach mal den Rand halten, wenn sie nur 
unqualifiziertes Zeug von sich zu geben haben (gleiches gilt 
selbstverständlich auch für den "gast" von 18:36)!

von Fred S. (Gast)


Lesenswert?

Hallo,

> Ich habe es ausprobiert Min umd Max stimmen  immer  noch nicht!!
Zeig uns bitte Deinen Code; sonst wird es nur ein Ratespiel.

Gruß

Fred

von med (Gast)


Lesenswert?

void main()
{
   int16 value[],mittel,min,max;
   unsigned int16 sum;
   int i ;


   setup_adc_ports(AN0_TO_AN1|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_4|ADC_TAD_MUL_16);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

    while(1)
    {
    if(input(pin_b1)==1)
{

   for(i=0;i<1;i++)
   {
     set_adc_channel(1);

   for (i=0;i<100;i++)
    {
        value[i]=read_adc();
        delay_us(500);
    }
   sum=0;

   for(i=0;i<100;i++)
    {
    sum=sum+value[i];
    }

    mittel=sum/100;



   min=value[0];
   max=value[0];

   for(i=0;i<100;i++)
      {

    if (value[i]>max)
     {
      max=value[i];
     }

    if(value[i]<min)
       {
      min=value[i];
       }

     for(i=0;i<100;i++)
     {
     printf("%Li\n", value[i]);
     }

     }
     printf("mittelwert %li\n", mittel);
     printf("min %Li\n", min);
     printf("max %Li\n", max);
     printf("Summe %Lu\n", sum);
    }

    }
   }
}


Ausgabe lautet:

520
521
520
520
521
521
521
522
523
522
523
522
522
524
523
522
523
523
523
524
524
524
522
524
524
525
525
527
526
526
526
523
527
528
527
527
528
528
528
528
528
528
530
529
529
530
529
529
530
529
531
530
530
530
531
531
534
531
531
531
531
531
533
532
533
533
533
532
533
533
533
534
533
534
534
534
534
534
537
534
535
536
535
534
535
532
535
536
535
536
536
533
536
535
535
535
538
536
535
536
mittelwert 529
min 520
max 520
Summe 52927

von Fred S. (Gast)


Lesenswert?

Hallo,

Du druckst momentan die "Ergebnisse" bei jedem Durchlauf der 
min/max-Such-Schleife aus. Stelle die Ausgabe so um, dass die 
Suchschleife zunächst vollständig durchlaufen wird; dann kommt auch das 
raus, was Du möchstest.

Gruß

Fred

von Johannes M. (johnny-m)


Lesenswert?

Bei der Maximalwertberechnung und Ausgabe stimmt etwas mit den Klammern 
nicht! Bitte formatiere den Code mal und mache die Einrückungen richtig, 
so dass zusammengehörende Klammern untereinander stehen. Dann müsstest 
Du sehen, dass die erste der beiden for-Schleifen keine schließende 
Klammer hat (zumindest nicht an der richtigen Stelle)...

von Karl H. (kbuchegg)


Lesenswert?

med wrote:
> void main()
> {
>    int16 value[],

Warum sagst du deinem Compiler nicht, dass du ein
Array mit 100 Einträgen haben willst?

     int16 value[100],mittel,min,max;

Das musst du schon machen, woher soll der Compiler sonst
wissen wieviel Speicher er dafür reservieren soll?

von Jochen M. (taschenbuch)


Lesenswert?

Die Schleife ist falsch verschachtelt.
Du machst mit der Ausgabe unten den Schleifenzähler von oben kaputt!

Jochen Müller



   for(i=0;i<100;i++)
      {

    if (value[i]>max)
     {
      max=value[i];
     }

    if(value[i]<min)
       {
      min=value[i];
       }

     for(i=0;i<100;i++)
     {
     printf("%Li\n", value[i]);
     }
}

von Karl H. (kbuchegg)


Lesenswert?

Und dann solltest du dir nochmal Gedanken darüber machen,
was wohl passieren wird, wenn all deine Schleifenvariablen
immer i heissen.

Vor allen Dingen in Fällen, wie diesem:
1
  for( i = 0; i < 100; ++i ) {
2
3
    ...
4
    for( i = 0; i < 100; ++i ) {
5
6
      ...
7
    }
8
  }

Die ausserste Schleife wird nur einmal durchlaufen, nicht
100 mal. Denn beim ersten Schleifendurchlauf wird das i
von der inneren Schleife bis auf 100 hochgezählt, wodurch
die Abbruchbedingung für die äussere Schleife ebenfalls
erfüllt ist.

von holger (Gast)


Lesenswert?

Ich denke das ist das Problem:

   for(i=0;i<100;i++)
      {

     for(i=0;i<100;i++)
     {
     }

     }

Die zweite i Schleife bricht die erste ab.

von Karl H. (kbuchegg)


Lesenswert?

So könnte das aussehen
1
#define NR_VALUES 100
2
3
void main()
4
{
5
  int16 value[NR_VALUES],mittel,min,max;
6
  unsigned int16 sum;
7
  int i;
8
9
  setup_adc_ports(AN0_TO_AN1|VSS_VDD);
10
  setup_adc(ADC_CLOCK_DIV_4|ADC_TAD_MUL_16);
11
  setup_spi(SPI_SS_DISABLED);
12
  setup_wdt(WDT_OFF);
13
  setup_timer_0(RTCC_INTERNAL);
14
  setup_timer_1(T1_DISABLED);
15
  setup_timer_2(T2_DISABLED,0,1);
16
  setup_comparator(NC_NC_NC_NC);
17
  setup_vref(FALSE);
18
19
  while( 1 )
20
  {
21
    if( input( pin_b1 ) == 1 )
22
    {
23
      // vom Kanal 1 mal die Messewerte einlesen
24
      set_adc_channel( 1 );
25
      for( i = 0; i < NR_VALUES; i++ )
26
      {
27
        value[i] = read_adc();
28
        delay_us( 500 );
29
      }
30
31
      // Mittelwert berechnen:
32
      // Zuerst die Summe aller Messwerte bestimmen
33
      // und durch die Anzahl der Messwerte dividieren
34
      sum = 0;
35
      for( i = 0; i < NR_VALUES; i++ )
36
        sum = sum + value[i];
37
      mittel = sum / NR_VALUES;
38
39
      // Minimum und Maximum bestimmen
40
      //   Annahme: in value[0] steht bereits der kleinste
41
      //   bzw. grösste Wert
42
      min = value[0];
43
      max = value[0];
44
45
      //   jetzt die Annahme überprüfen, ob nicht doch einer
46
      //   der anderen Werte kleiner oder grösser ist
47
      for( i = 0; i < NR_VALUES; i++ )
48
      {
49
        if( value[i] > max )
50
          max = value[i];
51
52
        if( value[i] < min )
53
          min = value[i];
54
      }
55
56
      // das wars: die Ergebnisse ausgeben
57
      for( i = 0; i < NR_VALUES; i++ )
58
        printf("%Li\n", value[i]);
59
60
      printf( "mittelwert %li\n", mittel );
61
      printf( "min %Li\n", min );
62
      printf( "max %Li\n", max );
63
      printf( "Summe %Lu\n", sum );
64
    }
65
  }
66
}

Macht doch gleich einen Unterschied, wenn das ganze vernünftig
formatiert und eingerückt ist. Dann findet man auch solche
Fehler viel leichter.

Mit ein paar Funktionen wirds allerdings noch einfacher
zu durchschauen
1
#define NR_VALUES 100
2
3
int16 value[NR_VALUES];
4
int16 mittel
5
int16 min, max;
6
7
void SetupHardware()
8
{
9
  setup_adc_ports(AN0_TO_AN1|VSS_VDD);
10
  setup_adc(ADC_CLOCK_DIV_4|ADC_TAD_MUL_16);
11
  setup_spi(SPI_SS_DISABLED);
12
  setup_wdt(WDT_OFF);
13
  setup_timer_0(RTCC_INTERNAL);
14
  setup_timer_1(T1_DISABLED);
15
  setup_timer_2(T2_DISABLED,0,1);
16
  setup_comparator(NC_NC_NC_NC);
17
  setup_vref(FALSE);
18
}
19
20
void ReadValues()
21
{
22
  int16 i;
23
24
  // vom Kanal 1 mal die Messewerte einlesen
25
  set_adc_channel( 1 );
26
  for( i = 0; i < NR_VALUES; i++ )
27
  {
28
    value[i] = read_adc();
29
    delay_us( 500 );
30
  }
31
}
32
33
void BerechneMittel()
34
{
35
  unsigned int16 sum;
36
  int16 i;
37
38
  // Mittelwert berechnen:
39
  // Zuerst die Summe aller Messwerte bestimmen
40
  // und durch die Anzahl der Messwerte dividieren
41
  sum = 0;
42
  for( i = 0; i < NR_VALUES; i++ )
43
    sum = sum + value[i];
44
  mittel = sum / NR_VALUES;
45
}
46
47
void BerechneMinMax()
48
{
49
  int16 i;
50
51
  // Minimum und Maximum bestimmen
52
  //   Annahme: in value[0] steht bereits der kleinste
53
  //   bzw. grösste Wert
54
  min = value[0];
55
  max = value[0];
56
57
  //   jetzt die Annahme überprüfen, ob nicht doch einer
58
  //   der anderen Werte kleiner oder grösser ist
59
  for( i = 0; i < NR_VALUES; i++ )
60
  {
61
    if( value[i] > max )
62
      max = value[i];
63
64
    if( value[i] < min )
65
      min = value[i];
66
  }
67
}
68
69
void PrintErgebnisse()
70
{
71
  int16 i;
72
73
  // das wars: die Ergebnisse ausgeben
74
  for( i = 0; i < NR_VALUES; i++ )
75
    printf("%Li\n", value[i]);
76
77
  printf( "mittelwert %li\n", mittel );
78
  printf( "min %Li\n", min );
79
  printf( "max %Li\n", max );
80
  printf( "Summe %Lu\n", sum );
81
}
82
83
void main()
84
{
85
86
  int i;
87
88
  SetupHardware();
89
90
  while( 1 )
91
  {
92
    if( input( pin_b1 ) == 1 )
93
    {
94
      ReadValues();
95
      BerechneMittel();
96
      BerechneMinMax();
97
98
      PrintErgebnisse();
99
    }
100
  }
101
}

Schau wie einfach dadurch das Hauptprogramm wird. Es ist unmittelbar
zu sehen, dass da kein Logikfehler mehr drinnen sein kann.
AUch die einzelnen Funktionen sind einfach genug, dass man auf
Anhieb sieht, dass da kein Logikfehler enthalten sein kann.

von med (Gast)


Lesenswert?

Vielen Dank an alle,
Es hat endlich funktionniert!! Problem lag an der Struktur ,die erste 
ausgabe hat die Min Max suche verhindert

und besondere Dank an kbuchegg  ,das programm was sie geschrieben haben 
ist sehr klar und ausführlich!!

von Jochen M. (taschenbuch)


Lesenswert?

>>und besondere Dank an kbuchegg  ,
das programm was sie geschrieben haben ist sehr klar und ausführlich!!

Ja, sicher.
Aber helfen würde es dem Jungen sicher mehr, wenn er seine Fehler SELBST 
findet und keine fertige Schonkost VORGEKAUT bekommt, so gut das auch 
gemeint sein wird.

Und der Fehler IN DIESEM FALL war so simpel, dass er ihn auch ganz ohne 
Forum gefunden hätte, wenn er das als SELBSTVERSTÄNDLICH zu erwartende 
Minimum an Aufmerksamkeit und Sorgfalt aufgewendet hätte.

Fertige Häppchen zum Abtippen helfen da ganz sicher nicht!

Jochen Müller

von Karl H. (kbuchegg)


Lesenswert?

Jochen Müller wrote:

> Fertige Häppchen zum Abtippen helfen da ganz sicher nicht!

Ab und zu muss man dem Nachwuchs auch mal konkret zeigen, wie
man es besser machen kann.

von Arc N. (arc)


Lesenswert?

> Sorry, aber das war ein Aufgelegter. Ich hätte nicht schlafen
> können, wenn ich den ausgelassen hätte
> Ab und zu muss man dem Nachwuchs auch mal konkret zeigen, wie
> man es besser machen kann.

Einen hätt' ich dann auch noch...
Was passiert wohl in BerechneMittel, wenn NR_VALUES höher gesetzt wird 
oder die ADC-Ergebnisse z.B. um 700 herum liegen?

von <!-- --> (Gast)


Lesenswert?

>Ja, sicher.
>Aber helfen würde es dem Jungen sicher mehr, wenn er seine Fehler SELBST
>findet und keine fertige Schonkost VORGEKAUT bekommt, so gut das auch
>gemeint sein wird.

darum geht es doch gar nicht. kbuchegg freut sich über solche anfänger, 
je unselbstständiger, desto besser, dann fragen sie wenigstens nix, 
wofür kbuchegg länger als eine stunde recherchieren muss. und eine 
stunde, selbstlos für andere verschwendet, ist durchaus angemessen, 
damit er sein unvorstellbares können unter beweis stellen kann!

von Stefan Salewski (Gast)


Lesenswert?

>damit er sein unvorstellbares können unter beweis stellen kann!

Obiger Kommentar ist mal wieder ein Argument für die "Gast-Postings 
verbieten" Fraktion.

Die Beiträge von Karl heinz Buchegger gehören zu den wenigen in diesem 
Forum, aus denen man etwas lernen kann. Man sollte daher für seine 
Hilfsbereitschaft dankbar sein. Ob es wirklich sinnvoll ist, anderen 
Leuten komplette Hausaufgaben oder Teile ihrer Diplomarbeit hier 
vorzukauen ist ein anderes Thema.

von Peter (Gast)


Lesenswert?

Hallo,
gäbe es noch eine netten Weg die globalen Variablen zu vermeiden? Weil 
die sind ja in C etwas verpönt. Ich habe leider noch keinen Weg gefunden 
sowas elegant zu lösen. (Das mehere Funktionen auf die gleichen Daten 
zugreifen)

von Martin L. (melvin_the_moose)


Lesenswert?

Datenkapselung in ANSI-C kann man erreichen, indem man zu kapselnde 
Daten in einer C-Datei static definiert.
Z.B. am Dateianfang:
1
static int16 value[NR_VALUES];
2
static int16 mittel
3
static int16 min, max;
Als Schnittstelle kann man je eine get- und/oder set-Funktion 
implementieren (oder es lassen, wenn der Zugriff nur innerhalb des 
Moduls erfolgen soll).

Gruß

Martin

von Otto (Gast)


Lesenswert?

> Ob es wirklich sinnvoll ist, anderen Leuten komplette
> Hausaufgaben oder Teile ihrer Diplomarbeit hier
> vorzukauen ist ein anderes Thema.

Mein erster Gedanke beim Lesen der Überschrift.....

"Bis hierher konnte ich mich so durchmogeln"

Gruss Otto

von Peter D. (peda)


Lesenswert?

<!-- --> wrote:

> darum geht es doch gar nicht. kbuchegg freut sich über solche anfänger,
> je unselbstständiger, desto besser, dann fragen sie wenigstens nix,
> wofür kbuchegg länger als eine stunde recherchieren muss. und eine
> stunde, selbstlos für andere verschwendet, ist durchaus angemessen,
> damit er sein unvorstellbares können unter beweis stellen kann!

Ja natürlich, es gibt immer wieder einen, der alles mies machen muß.

kbuchegg ist ja nicht erst seit gestern hier.
Ich halte ihn durchaus für fähig, selber abschätzen zu können, wieviel 
Aufwand er in eine Antwort steckt.

Hier sind keine Antwortmaschinen am Werk.
Wenns einem Spaß macht, kann ne Antwort durchaus mal ausführlicher sein.


Peter

von Karl H. (kbuchegg)


Lesenswert?

Peter wrote:
> Hallo,
> gäbe es noch eine netten Weg die globalen Variablen zu vermeiden? Weil
> die sind ja in C etwas verpönt. Ich habe leider noch keinen Weg gefunden
> sowas elegant zu lösen. (Das mehere Funktionen auf die gleichen Daten
> zugreifen)

Wenn du globale Variablen vermeiden willst, dann führt dich der
Weg zu Funktionsargumenten bzw. Returnvalues.
Ein oder mehrere Werte wird an eine Funktion (in Form von
Argumenten) übergeben. Damit hat die Funktion alles was sie braucht
um ihre Berechnungen anstellen zu können. Um das Ergebnis dieser
Berechnung zurück zum Aufrufer zu bringen, gibt es 2 Möglichkeiten.
Handelt es sich um einen Wert, dann kann man dafür den Return Wert
der Funktion benutzen. Hat man mehrere Ergebnisse, dann wird dafür
meist nicht der Return Wert benutzt, sondern der Rückfluß findet
ebenfalls über die Argumentschnittstelle der Funktion statt.

Hier verweise ich dich aber an dein C-Buch. Das jetzt im Detail
mit allen Feinheiten auszuführen würde zu weit führen. Das
Beispiel abgewandelt und auf die Mittlewertsfunktion angewendet,
würde so aussehen:
1
unsigned int16 BerechneMittel( int werte[], int AnzahlWerte )
2
{
3
  unsigned int16 sum;
4
  int16 i;
5
6
  // Mittelwert berechnen:
7
  // Zuerst die Summe aller Messwerte bestimmen
8
  // und durch die Anzahl der Messwerte dividieren
9
  sum = 0;
10
  for( i = 0; i < AnzahlWerte; i++ )
11
    sum = sum + werte[i];
12
13
  return sum / AnzahlWerte;
14
}
15
16
....
17
int main()
18
{
19
  ....
20
21
22
    if( input( pin_b1 ) == 1 )
23
    {
24
      ReadValues();
25
      mittel = BerechneMittel( value, NR_VALUES );
26
      ....


------------------------------------------------------------
@<!-- --> (Gast)
Das ist einfach nur armselig was du da von dir gibst.
Selbst zu faul jemandem weiterzuhelfen, aber rummosern.

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.