Forum: Compiler & IDEs While Uart abfrage


von ingo (Gast)


Lesenswert?

mal eine kurze frage zum Empfang auf der oder die UART,
ich sende vom slave seine adresse zum Master wie volgt:

Slave sendet;
uart_putc(40);

Master empfang:
i=0;

while   ( ( c2 = uart1_getc() ) != 0x28 && i < Len2  - 1 )

in[ i++ ] = c2;
in[i] = '\0';

muss ich in der While != 0x28 das so abfragen oder  While == 40
mfg

von STK500-Besitzer (Gast)


Lesenswert?

ingo schrieb:
> muss ich in der While != 0x28 das so abfragen oder  While == 40
> mfg

Die Zahlendarstellung ist egal.
Was soll die While-Schleife machen?
Soll sie solange durchlaufen werden, bis 40 gesendet wurde und die Daten 
bis dahin ins Array geschrieben werden? Oder soll sie solange warten, 
bis nicht mehr 40 empfangen wird?

Ich vermute das erste. Dann ist die Schreibweise richtig.

von ingo (Gast)


Lesenswert?

> ingo schrieb:
> Die Zahlendarstellung ist egal.
> Was soll die While-Schleife machen?
> Soll sie solange durchlaufen werden, bis 40 gesendet wurde und die Daten
> bis dahin ins Array geschrieben werden?
ja genau


also währe es so auch richtig,
 while   ( ( c2 = uart1_getc() ) == 40 && i < Len2  - 1 )
  in[ i++ ] = c2;
  in[i] = '\0';

ich habe 2 Slave jeweils adresse 40 und 41,
wenn ich die slaves nacheinander anspreche zB.

uart_putc(40);
 while   ( ( c2 = uart1_getc() ) == 40 && i < Len2  - 1 )
  in[ i++ ] = c2;
  in[i] = '\0';
..... Ausgabe auf mein lcd

uart_putc(41);
 while   ( ( c2 = uart1_getc() ) == 41 && i < Len2  - 1 )
  in[ i++ ] = c2;
  in[i] = '\0';
..... Ausgabe auf mein lcd


bekomme ich nur die daten von adresse 41 angezeigt.

spreche ich die svlaves nur einzeln an gehts.

von STK500-Besitzer (Gast)


Lesenswert?

ingo schrieb:
> also währe es so auch richtig,
>  while   ( ( c2 = uart1_getc() ) == 40 && i < Len2  - 1 )
>   in[ i++ ] = c2;
>   in[i] = '\0';

Nein. es muss "!= 40" heissen.

ingo schrieb:
> bekomme ich nur die daten von adresse 41 angezeigt.
>
> spreche ich die svlaves nur einzeln an gehts.

Dann hast du wohl einen Fehler im Programm...

von ingo (Gast)


Lesenswert?

Hallo,
ich bekomme den Fehler nicht weg.
1
//MASTER
2
3
//###################################################################################
4
void get_show_all (uint8_t s)  //Hole Daten von Modul 1 ubd 2
5
//###################################################################################
6
{
7
    char Buff1_V[20];
8
    char Buff1_A[20];
9
    char Buff1_W[20];
10
11
    char Buff2_V[20];
12
    char Buff2_A[20];
13
    char Buff2_W[20];
14
  
15
  int c1;
16
 
17
  
18
 int i = 0;
19
 int Len1 = 32;
20
21
22
 char inLine[32];
23
24
   
25
    uint8_t  v1,v2;  
26
    uint8_t  a1,a2;  
27
    uint8_t  w1,w2;    
28
  
29
    unsigned int  spannung;
30
31
    unsigned int  strom;  
32
  
33
    unsigned int  watt;   
34
35
    unsigned int  adcval;
36
37
38
 if (  s == 1 )
39
   {
40
//Modul 1
41
//###################################################################################
42
     setTransmitMode();
43
44
     rgbsend_data(0xA4);      //
45
     rgbsend_data(40);        //Adresse zum Modul 1 senden
46
47
      setReceiveMode();
48
49
//###################################################################################
50
51
52
     i=0;
53
54
     while   ( ( c1 = uart1_getc() ) != 40 && i < Len  - 1  )
55
     {
56
    inLine[ i++ ] = c1;
57
   }
58
      inLine[i] = '\0';
59
  
60
61
62
63
      v1=inLine1[0];    
64
      v2=inLine1[1];
65
66
      a1=inLine1[0];  
67
      a2=inLine1[1];
68
69
      w1=inLine1[0];  
70
      w2=inLine1[1];
71
72
      adcval1= v1 * 256 + v2;
73
74
    spannung1 = ((long)adcval1 * 5000) / 1023; // A/D-Wert in Spannung umrechnen (AREF=5V, 10 Bit A/D-Wandler: 
75
      
76
    sprintf( Buff1_V, "V: %1d.%02d  ", spannung1/ 1000, spannung1 % 1000 ); 
77
    
78
    
79
    adcval1= a1 * 256 + a2;
80
      
81
    strom1 = ((long)adcval1 * 3000) / 1023; // A/D-Wert in Strom umrechnen (AREF=5V, 10 Bit A/D-Wandler: 
82
      
83
    sprintf( Buff1_A, "A: %1d.%02d  ", strom1/ 1000, strom1 % 1000 ); 
84
     
85
    
86
    adcval1= w1 * 256 + w2;     
87
88
      watt1 = ((long)adcval1 * 36000) / 1023;  // A/D-Wert in Watt umrechnen (AREF=5V, 10 Bit A/D-Wandler: 
89
    sprintf( Buff1_W, "W: %1d.%02d  ", watt1/ 1000, watt1 % 1000  ); 
90
91
      //GLCD_FONT Einstellen
92
    setfont(Font4);    
93
    
94
95
96
    gotoxy(3,252 );
97
    uart_putc (' ');
98
      uart_puts (Buff1_A);
99
    
100
    
101
    gotoxy(3,316 );
102
    uart_putc (' ');
103
      uart_puts (Buff1_V);    
104
   
105
    
106
    gotoxy(3,376 );
107
    uart_putc (' ');
108
      uart_puts (Buff1_W);
109
    
110
   }
111
112
 if (  s == 2 )
113
   {
114
//Modul 2
115
//###################################################################################
116
     setTransmitMode();
117
118
     rgbsend_data(0xA4);      //
119
     rgbsend_data(41);        //Adresse zum Modul 2 senden
120
121
      setReceiveMode();
122
123
//###################################################################################
124
125
126
    i=0;
127
128
     while   ( ( c1 = uart1_getc() ) != 41 && i < Len  - 1  )
129
     {
130
    inLine[ i++ ] = c1;
131
   }
132
      inLine[i] = '\0';
133
  
134
135
136
137
      v1=inLine1[0];    
138
      v2=inLine1[1];
139
140
      a1=inLine1[0];  
141
      a2=inLine1[1];
142
143
      w1=inLine1[0];  
144
      w2=inLine1[1];
145
146
147
      adcval2= v1 * 256 + v2;
148
      //adcval = atoi( &inLine2[0] );
149
      
150
    spannung2 = ((long)adcval2 * 5000) / 1023; // A/D-Wert in Spannung umrechnen (AREF=5V, 10 Bit A/D-Wandler: 
151
      
152
    sprintf( Buff2_V, "V: %1d.%02d  ", spannung2/ 1000, spannung2 % 1000 ); 
153
    
154
    
155
    adcval2= v1 * 256 + v2;//v1 * 256 + v2;//a1 * 256 + a2;
156
      
157
    strom2 = ((long)adcval2 * 3000) / 1023; // A/D-Wert in Strom umrechnen (AREF=5V, 10 Bit A/D-Wandler: 
158
      
159
    sprintf( Buff2_A, "A: %1d.%02d  ", strom2/ 1000, strom2 % 1000 ); 
160
     
161
      
162
    adcval2= v1 * 256 + v2;//w1 * 256 + w2;   
163
      
164
    watt2 = ((long)adcval2 * 36000) / 1023;// A/D-Wert in Watt umrechnen (AREF=5V, 10 Bit A/D-Wandler: 
165
    sprintf( Buff2_W, "W: %1d.%02d  ", watt2/ 1000, watt2 % 1000 ); 
166
167
      //GLCD_FONT Einstellen
168
    setfont(Font4);    
169
    
170
171
172
    gotoxy(171,252 );
173
    uart_putc (' ');
174
      uart_puts (Buff2_A);
175
    
176
    gotoxy(171,316 );
177
    uart_putc (' ');
178
      uart_puts (Buff2_V);    
179
    
180
    gotoxy(171,376 );
181
    uart_putc (' ');
182
      uart_puts (Buff2_W);
183
184
   }
185
}
186
187
188
//SLAVE_1
189
 for (;;)
190
 {   
191
    c =    uart_getc();                      //Hole Daten vom UART ab 
192
193
194
   if (c==0xA4)          //
195
    {
196
      c1=uart_getc();
197
             if (c1==41)          // Stimt die Geräte adresse
198
        {
199
         adcval = ADC_Read_Avg(0, 4);              // Kanal 0, Mittelwert aus 4 Messungen 
200
    setTransmitMode();
201
202
                uart_putc(*((char*)&adcval+1)); //High-Byte?
203
                uart_putc(*((char*)&adcval));   //Low-Byte 
204
 
205
                uart_putc(40);
206
                setReceiveMode(); 
207
         }
208
     }      
209
 }
210
}
211
212
213
//SLAVE_1
214
 for (;;)
215
 {   
216
    c =    uart_getc();                      //Hole Daten vom UART ab 
217
218
219
   if (c==0xA4)          //
220
    {
221
      c1=uart_getc();
222
             if (c1==41)          // Stimt die Geräte adresse
223
        {
224
         adcval = ADC_Read_Avg(0, 4);              // Kanal 0, Mittelwert aus 4 Messungen 
225
    setTransmitMode();
226
227
                uart_putc(*((char*)&adcval+1)); //High-Byte?
228
                uart_putc(*((char*)&adcval));   //Low-Byte 
229
 
230
                uart_putc(41);
231
                setReceiveMode(); 
232
         }
233
     }      
234
 }
235
}

von Karl H. (kbuchegg)


Lesenswert?

>
>
>
>
>//SLAVE_1
> for (;;)
> {
>    c =    uart_getc();                      //Hole Daten vom UART ab
>
>
>   if (c==0xA4)          //
>    {
>      c1=uart_getc();
>             if (c1==41)          // Stimt die Geräte adresse
>

Hier sollte es wohl 40 heissen und nicht 41!


>       {
>         adcval = ADC_Read_Avg(0, 4);              // Kanal 0, Mittelwert aus 4 
Messungen
>     setTransmitMode();
>
>                uart_putc(*((char*)&adcval+1)); //High-Byte?
>                uart_putc(*((char*)&adcval));   //Low-Byte
>
>                uart_putc(40);
>                setReceiveMode();
>         }
>     }
> }
>}

tu dir selbst einen Gefallen und modularisiere deinen Code ein wenig.
So Dinge wie zb die Slave Adressen gehören nicht im Code versteckt, 
sondern werden zentral an EINER Stelle mit einem #define vereinbart

#define SLAVE_1_ADDR  40


...

      c1 = uart_getc();
      if (c1 == SLAVE_1_ADDR )          // Stimt die Geräte adresse
....


         uart_putc( SLAVE_1_ADDR );


Dann hast du die Sicherheit, dass die beiden Zahlen auf jeden Fall 
zusammenstimmen! Derartige 'magische Zahlen' gehören nicht in den Code. 
Das ist viel zu fehleranfällig, dass man bei einer Änderung eine Stelle 
übersieht.
Mit einem #define kann dir aber genau dieses Versehen nicht passieren. 
Du änderst an EINER Stelle die 40 zur 41 (eben beim #define) und der 
Compiler sorgt dafür, dass diese Änderung überall durchgezogen wird. Und 
der macht dabei keine Fehler.


Genauso dein Master-Code:
Das ist im Prinzip immer die gleiche FUnktionalität! Mach dir EINE 
Funktion, die das Prozedere der Datenübertragung abhandelt und der 
übergibst du die gewünschte Slave-Adresse. Es gibt keinen Grund, das 
ganze per Copy&Paste zu lösen. Du läufst wieder nur Gefahr, dass du die 
beiden Slaves unterschiedlich behandelst, weil du in einem Codeteil 
einen Bugfix machst und im anderen vergisst du ihn.

Codeorganisation ist ein wesentlicher und vitaler Bestandteil, um 
möglichst fehlerfreien Code zu produzieren.
Dazu gehören zb auch eigene Ausgabefunktionen, in denen du gleichartige 
Funktionalität zusammenfassen kannst.
Deine get_show_all könnte zb so aussehen
1
#define SLAVE_1_ADDR 40
2
#define SLAVE_2_ADDR 41
3
4
5
void get_show_all (uint8_t s)
6
{
7
  uint16_t Volt = 0, Ampere = 0, Watt = 0;
8
  uint8_t OutputColumn = 3;
9
10
  if( s == 1 )
11
  {
12
    GetValues( SLAVE_1_ADDR, &Volt, &Ampere, &Watt );
13
    OutputColumn = 3;
14
  }
15
  else if( s == 2 )
16
  {
17
    GetValues( SLAVE_2_ADDR, &Volt, &Ampere, &Watt );
18
    OutputColumn = 171;
19
  }
20
21
  ShowValue( OutputColumn, 252, "A: %1d.%02d", Ampere );
22
  ShowValue( OutputColumn, 316, "V: %1d.%02d", Volt );
23
  ShowValue( OutputColumn, 376, "W: %1d.%02d", Watt );
24
}

Siehst du um wieviel einfacher es hier ist, den Programmfluss zu 
verfolgen und nachzuvollziehen, was an welcher Stelle ausgegeben wird? 
Und das alles für den 'Preis' von ein paar (trivialen) 
Spezialfunktionen, die jeweils einen Teilaspekt der kompletten Arbeit 
erledigen.

von Karl H. (kbuchegg)


Lesenswert?

ps

   "W: %1d.%02d  ", watt2/ 1000, watt2 % 1000 );


Tausendstel und %02d passen nicht zusammen. Für Tausendstel brauchst du 
3 "Nachkommastellen".
Mit "%1d.%02d" wird eine Zahl 1005 bei dir als
   1.05
ausgegeben. Die korrekte Anzeige wäre aber
   1.005
und das ist dann schon ein gewisser Unterschied.

von ingo (Gast)


Lesenswert?

>Tausendstel und %02d passen nicht zusammen. Für Tausendstel brauchst du
>3 "Nachkommastellen".

ja stimmt ich hab das vielzu umständlich,
aber mein problem ist ich sende zum slave1 0xA4,40 zeige die empfangenen 
daten an,dann slave2 0xA4,41 ,
bekomm ich an erster Augabestelle immer die daten von slave2.

spreche ich nur slave1 oder slave2 an dann gehts.

die slaves sollen dann den internen ADC  auslesen und zum Master senden 
der adc läuft im 10bit mode.

von Karl H. (kbuchegg)


Lesenswert?

ingo schrieb:
>>Tausendstel und %02d passen nicht zusammen. Für Tausendstel brauchst du
>>3 "Nachkommastellen".
>
> ja stimmt ich hab das vielzu umständlich,

Tja. Dein Problem wird eher genau hier liegen.
Dadurch das das alles viel zu umständlich ist, siehst du den 
eigentlichen Fehler vor lauter umständlich nicht mehr.

> aber mein problem ist ich sende zum slave1 0xA4,40 zeige die empfangenen
> daten an,dann slave2 0xA4,41 ,
> bekomm ich an erster Augabestelle immer die daten von slave2.
>
> spreche ich nur slave1 oder slave2 an dann gehts.

Was heißt nur?
Deine Funktion kann sowieso immer nur entweder den einen oder den 
anderen Slave ansprechen.
Hast du kontrolliert, ob du get_show_all auch tatsächlich abwechselnd 
mit 1 oder 2 aufrufst?

(Trotzdem solltest du die Funktion vereinfachen. Massiv vereinfachen. 
Mann kann sich auch in der selbst geschaffenen Komplexität verirren)

von ingo (Gast)


Lesenswert?

get_show_all wird abwechslnd aufgerufen

 get_show_all (1);
  Delay1ms(100);
 get_show_all (2);


aber meinproblem bleibt halt der empfang der daten auf dem master,

     i=0;

     while   ( ( c1 = uart1_getc() ) != SLAVE_1_ADDR && i < Len  - 1  )
     {
    inLine[ i++ ] = c1;
   }
      inLine[i] = '\0';




      v1=inLine[0];
      v2=inLine[1];

      a1=inLine[0];
      a2=inLine[1];

      w1=inLine[0];
      w2=inLine[1];

      adcval= v1 * 256 + v2;

    spannung = ((long)adcval * 5000) / 1023; // A/D-Wert in Spannung 
umrechnen (AREF=5V, 10 Bit A/D-Wandler:

    sprintf( Buff1_V, "V: %1d.%02d  ", spannung/ 100, spannung % 100 );


    adcval= a1 * 256 + a2;

    strom = ((long)adcval * 3000) / 1023; // A/D-Wert in Strom umrechnen 
(AREF=5V, 10 Bit A/D-Wandler:

    sprintf( Buff1_A, "A: %1d.%02d  ", strom/ 100, strom % 100 );


    adcval= w1 * 256 + w2;

      watt = ((long)adcval * 36000) / 1023;  // A/D-Wert in Watt 
umrechnen (AREF=5V, 10 Bit A/D-Wandler:
    sprintf( Buff1_W, "W: %1d.%02d  ", watt/ 100, watt % 100  );

von Karl H. (kbuchegg)


Lesenswert?

ingo schrieb:
> get_show_all wird abwechslnd aufgerufen
>
>  get_show_all (1);
>   Delay1ms(100);
>  get_show_all (2);
>
>
> aber meinproblem bleibt halt der empfang der daten auf dem master,

Aus dem was du gepostet hast, kann ich nur den Schluss ziehen, das du 
einen riesen Durcheinander auf der UART veranstaltest, weil dein einer 
Slave auf die falsche Adresse reagiert.

Du suchst an der falschen Stelle und dein unübersichtlicher Code tut 
sein übriges.

Sorry. Aber genau so sieht die Sache aus.

von ingo (Gast)


Lesenswert?

ich sende doch die slave adresse zb40 der slave sendet seine daten mit 
seiner adresse, gut ich geb zu bei mir ist dies sehr umständlich vom 
code her.


aber wie krieg ich denn nun die werte in Volt, Ampere, Watt ;
vielleicht könnten sie mir da noch ein wenig weiterhelfen.
1
#define SLAVE_1_ADDR 40
2
#define SLAVE_2_ADDR 41
3
4
5
void get_show_all (uint8_t s)
6
{
7
  uint16_t Volt = 0, Ampere = 0, Watt = 0;
8
  uint8_t OutputColumn = 3;
9
10
  if( s == 1 )
11
  {
12
    GetValues( SLAVE_1_ADDR, &Volt, &Ampere, &Watt );
13
    OutputColumn = 3;
14
  }
15
  else if( s == 2 )
16
  {
17
    GetValues( SLAVE_2_ADDR, &Volt, &Ampere, &Watt );
18
    OutputColumn = 171;
19
  }
20
21
  ShowValue( OutputColumn, 252, "A: %1d.%02d", Ampere );
22
  ShowValue( OutputColumn, 316, "V: %1d.%02d", Volt );
23
  ShowValue( OutputColumn, 376, "W: %1d.%02d", Watt );
24
}
25
26
GetValues( SLAVE_1_ADDR, &Volt, &Ampere, &Watt )
27
{
28
   char Buff1_V[20];
29
   char Buff1_A[20];
30
   char Buff1_W[20];
31
  
32
   char inLine[32];
33
   
34
   int c1;
35
   int i = 0;
36
   int Len = 32;
37
 
38
   uint8_t  v1,v2;  
39
   uint8_t  a1,a2;  
40
   uint8_t  w1,w2;    
41
  
42
   unsigned int  spannung;
43
   unsigned int  strom;  
44
   unsigned int  watt;   
45
   unsigned int  adcval;
46
47
 setTransmitMode();
48
 rgbsend_data(0xA4);        //Adresse zum Modul 2 senden
49
 rgbsend_data(SLAVE_1_ADDR);      //
50
 setReceiveMode();
51
 
52
 i=0;
53
54
  while   ( ( c1 = uart1_getc() ) != SLAVE_1_ADDR && i < Len  - 1  )
55
  {
56
   inLine[ i++ ] = c1;
57
  }
58
   inLine[i] = '\0';
59
60
      v1=inLine[0];    
61
      v2=inLine[1];
62
63
      a1=inLine[0];  
64
      a2=inLine[1];
65
66
      w1=inLine[0];  
67
      w2=inLine[1];
68
69
      adcval= v1 * 256 + v2;
70
71
    spannung = ((long)adcval * 5000) / 1023; // A/D-Wert in Spannung umrechnen (AREF=5V, 10 Bit A/D-Wandler: 
72
      
73
    sprintf( Buff1_V, "V: %1d.%02d  ", spannung/ 100, spannung % 100 ); 
74
    
75
    
76
    adcval= a1 * 256 + a2;
77
      
78
    strom = ((long)adcval * 3000) / 1023; // A/D-Wert in Strom umrechnen (AREF=5V, 10 Bit A/D-Wandler: 
79
      
80
    sprintf( Buff1_A, "A: %1d.%02d  ", strom/ 100, strom % 100 ); 
81
     
82
    
83
    adcval= w1 * 256 + w2;     
84
85
      watt = ((long)adcval * 36000) / 1023;  // A/D-Wert in Watt umrechnen (AREF=5V, 10 Bit A/D-Wandler: 
86
    sprintf( Buff1_W, "W: %1d.%02d  ", watt/ 100, watt % 100  ); 
87
88
      //GLCD_FONT Einstellen
89
    setfont(Font4);    
90
    
91
92
93
    gotoxy(3,252 );
94
    uart_putc (' ');
95
      uart_puts (Buff1_A);
96
    
97
    
98
    gotoxy(3,316 );
99
    uart_putc (' ');
100
      uart_puts (Buff1_V);    
101
   
102
    
103
    gotoxy(3,376 );
104
    uart_putc (' ');
105
      uart_puts (Buff1_W);
106
107
}

von Karl H. (kbuchegg)


Lesenswert?

ingo schrieb:
> ich sende doch die slave adresse zb40 der slave sendet seine daten mit
> seiner adresse,

Dann sieh dir (noch-)mal den von dir geposteten Code für Slave 1 an
1
//SLAVE_1
2
 for (;;)
3
 {   
4
    c =    uart_getc();                      //Hole Daten vom UART ab 
5
6
7
   if (c==0xA4)          //
8
    {
9
      c1=uart_getc();
10
             if (c1==41)          // Stimt die Geräte adresse
11
        {
12
         adcval = ADC_Read_Avg(0, 4);              // Kanal 0, Mittelwert aus 4 Messungen 
13
    setTransmitMode();
14
15
                uart_putc(*((char*)&adcval+1)); //High-Byte?
16
                uart_putc(*((char*)&adcval));   //Low-Byte 
17
 
18
                uart_putc(40);
19
                setReceiveMode(); 
20
         }
21
     }      
22
 }
23
}

Der Slave reagiert auf den Erhalt von 41 und sendet 40 zurück.
(Und wenn der Messwert zufällig auch noch so ist, dass das Lowbyte als 
40 gelesen werden kann, dann kommt sowieso alles durcheinander)

von Karl H. (kbuchegg)


Lesenswert?

> GetValues( SLAVE_1_ADDR, &Volt, &Ampere, &Watt )

so beginnt aber keine Funktion!
Du brauchst dringend ein C-Buch. Da fehlt es an den Grundlagen

1
void GetValues( uint8_t SlaveAddr, uint16_t *Volt, uint16_t *Ampere, uint16_t *Watt )
2
{
3
  uint8_t inLine[32];
4
  uint8_t c, i;
5
   
6
  setTransmitMode();
7
  rgbsend_data(0xA4);        // Startkommando: Messen
8
  rgbsend_data(SlaveAddr);   // Adresse schicken
9
  setReceiveMode();
10
 
11
  i = 0;
12
  while( ( c = uart1_getc() ) != SlaveAddr && i < sizeof(inLine)  )
13
  {
14
   inLine[ i++ ] = c;
15
  }
16
17
  if( i >= 2 )     // genug Bytes bekommen?
18
  {
19
    *Volt   = inLine[0] * 256U + inLine[1];
20
    *Ampere = inLine[0] * 256U + inLine[1];
21
    *Watt   = inLine[0] * 256U + inLine[1];
22
  }
23
  else
24
  {
25
    *Volt   = 9999;
26
    *Ampere = 9999;
27
    *Watt   = 9999;
28
  }
29
}

von ingo (Gast)


Lesenswert?

eine Frage habe ich noch;

der Aufruf   ShowValue( OutputColumn, 252, "A: %1d.%02d", Ampere );
das hier "A: %1d.%02d" da weis ich nicht wie ich mir eine funktion 
schreiben muss.

Leider gibst beim compelieren einen Fehler in der zeile
void  ShowValue( OutputColumn, 252,   s ,uint16_t wert )
before numeric constant
1
//Prototyp
2
//void ShowValue(int  Column, int y,  const char *s, uint16_t wert); 
3
4
void  ShowValue( OutputColumn, 252,   s ,uint16_t wert )
5
{
6
    char Buff1_V[20];
7
    char Buff1_A[20];
8
    char Buff1_W[20];
9
10
    
11
 
12
    wert = ((long)wert * 36000) / 1023;  // A/D-Wert in Watt umrechnen (AREF=5V, 10 Bit A/D-Wandler: 
13
   sprintf( Buff1_W, s, wert/ 100, wert % 100  ); 
14
15
      //GLCD_FONT Einstellen
16
   setfont(Font4);    
17
    
18
19
20
    gotoxy( OutputColumn, 252);
21
    uart_putc (' ');
22
    uart_puts (Buff1_A);
23
}

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

ingo schrieb:
> //Prototyp
> //void ShowValue(int  Column, int y,  const char *s, uint16_t wert);
>
> void  ShowValue( OutputColumn, 252,   s ,uint16_t wert )
> {

Besorg Dir ein C-Buch. Und lies das durch.

Dir hier mit Tips weiterzuhelfen ist bei Deinem eklatanten Mangel an 
Grundlagenwissen vollkommen sinnlos.
Auch das Durchklicken durch irgendwelche C-Tutorials dürfte Dich nicht 
wirklich weiterbringen.

Empfehlung: Brian Kernighan & Dennis Ritchie, "Programmieren in C", 
zweite Ausgabe, Hanser-Verlag.

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.