www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMEGA16, ADC, Kommastelle


Autor: Pascal Schmidt (pascal-schmidt)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Netzwanze (Gast)
Datum:

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

Autor: Netzwanze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups, meine Kristallkugel hat gerade den Blick auf Deinen Anhang 
verstellt.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Pascal Schmidt (pascal-schmidt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ich das " , " anzeige ist mir klar. Ich will die Nachkommastelle 
anzeigen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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 :-)

Autor: willi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(void)sendWertToLCD(uint8_t Wert, uint8_t WertLength)
{
  uint8_t i;
  uint8_t KommaPosition = 0xFF;
  if(WertLenght > 3)
    KommaPosition = WertLenght - 4; //4 entspricht 3 Zahlen nach dem Komma
  for(i = 0; i < WertLenght; i++)
  {
    sendCharToLCD(Wert[i]);
    if(KommaPosition == i)
      sendCharToLCD('.');
  }
}


Autor: Pascal Schmidt (pascal-schmidt)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Pascal Schmidt (pascal-schmidt)
Datum:

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

Deswegen frage ich ja auch hier nach :-)

Autor: willi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder vielleiciht

33/10 = 3
33%10 = 3

da wären auch beide zahlen gleich :-)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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
  char Buffer[10];
  itoa(result, Buffer,10 );
//eier
  result /= 10;
  set_cursor(0,1);
  lcd_string(Buffer);
//Komma
  set_cursor(2,1);
  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
void lcd_number( int number )
{
  char buffer[10];

  itoa( number, buffer, 10 );
  lcd_string( buffer );
}
)

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

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.