Forum: Mikrocontroller und Digitale Elektronik ATMEGA16, ADC, Kommastelle


von Pascal S. (pascal-schmidt)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe folgendes Problem mit der Ausgabe auf dem LCD.
Ich lese eine Spannung an ADC0 ein die eine Frequenz 0- 24000 Hz 
darstellt.
Nun möchte ich die Anzeige aber nicht in 24000 Hz sonder in 24,0 KHz.
Wie kann man das realisieren. Ich arbeite mit einem ATMEGA16 das Display 
ist ein LCD 204 DIP.

von Netzwanze (Gast)


Lesenswert?

Komma in die Anzeig einfügen und ein "k" vor "Hz" schreiben.
Oder Kristallkugel befragen.

von Netzwanze (Gast)


Lesenswert?

Ups, meine Kristallkugel hat gerade den Blick auf Deinen Anhang 
verstellt.

von Gast (Gast)


Lesenswert?

Zerleg die 24000 einfach in 24 und in die 000.
Danach gibst du zuerst die 24 aus, gefolgt von einem 'Komma' danach dann 
die Nachkommastellen und an den Schluss hängst du ein KHz.

von Pascal S. (pascal-schmidt)


Lesenswert?

Wie ich das " , " anzeige ist mir klar. Ich will die Nachkommastelle 
anzeigen.

von Karl H. (kbuchegg)


Lesenswert?

/   ist in C die Division
%   ist in C der Rest bei der Division

So wie in: Du hast 37 Äpfel und 10 Kinder. Wieviele Äpfel kriegt jedes 
Kind und wieviele Äpfel bleiben dir übrig?

   37 / 10   =  3
   37 % 10   =  7

Jedes Kind kriegt 3 Äpfel und dir bleiben 7 übrig.
Man könnte aber auch sagen: Jedes Kind kriegt 3.7 Äpfel :-)

von willi (Gast)


Lesenswert?

1
(void)sendWertToLCD(uint8_t Wert, uint8_t WertLength)
2
{
3
  uint8_t i;
4
  uint8_t KommaPosition = 0xFF;
5
  if(WertLenght > 3)
6
    KommaPosition = WertLenght - 4; //4 entspricht 3 Zahlen nach dem Komma
7
  for(i = 0; i < WertLenght; i++)
8
  {
9
    sendCharToLCD(Wert[i]);
10
    if(KommaPosition == i)
11
      sendCharToLCD('.');
12
  }
13
}

von Pascal S. (pascal-schmidt)


Lesenswert?

Karl heinz Buchegger schrieb:
>
>    37 / 10   =  3
>    37 % 10   =  7
>


Sowas habe ich schon versucht. Die Nachkommastelle ist aber gleich der 
Stelle vor dem Komma.

von Karl H. (kbuchegg)


Lesenswert?

Pascal Schmidt schrieb:
> Karl heinz Buchegger schrieb:
>>
>>    37 / 10   =  3
>>    37 % 10   =  7
>>
>
>
> Sowas habe ich schon versucht. Die Nachkommastelle ist aber gleich der
> Stelle vor dem Komma.

Dann hast du einen Fehler in deinem Programm :-)
Falsche Variable ausgegeben?

von Pascal S. (pascal-schmidt)


Lesenswert?

Karl heinz Buchegger schrieb:
>
> Dann hast du einen Fehler in deinem Programm :-)
> Falsche Variable ausgegeben?

Deswegen frage ich ja auch hier nach :-)

von willi (Gast)


Lesenswert?

oder vielleiciht

33/10 = 3
33%10 = 3

da wären auch beide zahlen gleich :-)

von Karl H. (kbuchegg)


Lesenswert?

Pascal Schmidt schrieb:
> Karl heinz Buchegger schrieb:
>>
>> Dann hast du einen Fehler in deinem Programm :-)
>> Falsche Variable ausgegeben?
>
> Deswegen frage ich ja auch hier nach :-)

Schon klar.
Aber ohne das fehlerhafte Programm zu sehen, kann man da wenig sagen :-)

/ und %  funktionieren jedenfalls so wie vorgesehen.

Der Code hier
1
  char Buffer[10];
2
  itoa(result, Buffer,10 );
3
//eier
4
  result /= 10;
5
  set_cursor(0,1);
6
  lcd_string(Buffer);
7
//Komma
8
  set_cursor(2,1);
9
  lcd_string(".");

macht auf jeden Fall nicht das gewünschte.

Der gibt aus:   Zunächst mal die 37 Äpfel und dann errechnet er noch ein 
Zehntel davon, also 3, macht aber nichts weiter damit.

Die direkte Umsetzung der Äpfelstory wäre
(Mach dir doch als erstes mal eine Funktion zur Ausgabe einer Zahl. Das 
ist doch Müll, sowas immer und immer wieder in Code reinzukopieren
1
void lcd_number( int number )
2
{
3
  char buffer[10];
4
5
  itoa( number, buffer, 10 );
6
  lcd_string( buffer );
7
}
)

und unter Verwendung dieser Funktion schreibst du
1
  set_cursor( 0, 1 );
2
  lcd_number( result / 10 );
3
  lcd_string( "." );
4
  lcd_number( result % 10 );
5
  lcd_string( "kHz" );

von Ahem (Gast)


Lesenswert?

>Deswegen frage ich ja auch hier nach :-)
Deswegen antworten die netten Menschen hier auch.

Mal im Ernst. Die Lösung hat Dir Karl Heinz schon geschrieben.

>    37 / 10   =  3
>    37 % 10   =  7

Du hast anscheinend Schwierigkeiten damit. Ist auch OK. Aber Deine 
Anwort:
>Sowas habe ich schon versucht. Die Nachkommastelle ist aber gleich der
>Stelle vor dem Komma.
ist nicht wirklich hilfreich. Wir wissen ja nicht, was Du auf welche 
Weise versucht hast. Es kann tausend Gründe geben, warum das nicht geht, 
was Du versucht hast. Sollen wir wirklich raten?

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.