www.mikrocontroller.net

Forum: Compiler & IDEs kleines Problem im Code


Autor: Christian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute ich habe einen Fehler in meinem Code. ich will die Variable 
aufloesung mit dem TCNT1 multiplizieren und das ergebnis in die Variable 
winkel schreiben, aber irgendwie funktioniert dies nicht.

Kurz zu meinem Programmaufbau damit ihr euch schneller zurechtfindet:

Switch Case Anfang Menü

--Einstellungen

---Switch Case Auflösung Anfang

----verschiedene Winkel
----verschiedene Winkel
----verschiedene Winkel
----verschiedene Winkel

---Switch Case Auflösung Ende

--Winkelauswertung

---> Problem

Switch Case Ende Menü



Das Menü Funktioniert soweit Prima jedoch bekomme ich bei der ausgabe 
des Winkels nichts raus!

vielen Dank im Vorraus

gruß

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine etwas detailiertere Fehlerbeschreibung wäre nicht schlecht, "funzt 
nicht" ist immer Problem 42.

Aber lass raten: Es kommt immer 0 raus, oder?

Was fällt dir an folgenden Zeilen auf?

>uint16_t aufloesung;
>...
>aufloesung = 0.72;
>...
>winkel = TCNT1 * aufloesung;


Oliver

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich sehs nicht ;(

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah evtl da es eine komma Zahl ist?

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ah evtl da es eine komma Zahl ist?

;-)

Oliver

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und was kann ich dagegen machen?  einen anderen Variablentyp nehmen?

bin neuling im C

Autor: Link zu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian schrieb:
> und was kann ich dagegen machen?  einen anderen Variablentyp nehmen?
>
> bin neuling im C
Festkommaarithmetik

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> und was kann ich dagegen machen?  einen anderen Variablentyp nehmen?
>>
>> bin neuling im C
>Festkommaarithmetik

oder den Datentyp float verwenden.

Oliver

Autor: Link zu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver schrieb:
>>> und was kann ich dagegen machen?  einen anderen Variablentyp nehmen?
>>>
>>> bin neuling im C
>>Festkommaarithmetik
>
> oder den Datentyp float verwenden.
-#include <avr/io.h>
-Drehgeber.c
-TCNT1
klingt alles nach einem µC (ATmega), da sollte man floats umgehen.
Außerdem steht die Problematik ja im Artikel Festkommaarithmetik.

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank euch beiden... habs mit dem Festkomma... gelöst und es 
Funktioniert.


Dankeschön

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo habe noch 2 Probleme,

wenn ich mit dem Drehgeber die werte einlese geht das nur bis ca. 640 
dann springt er wieder auf 0 zurück denke dass die Variable dann voll 
ist aber wenn ich die änder ist es immernoch.


Das 2. Problem ist wenn die winkelmessung aktiv ist und in der 2. Zeile 
Grad stehen sollte steht aber Gradche weil vorher schon Striche 
drinstand wie bekomme ich das weg. gruß

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

Bewertung
0 lesenswert
nicht lesenswert
Dein Problem ist in Codezeile 42.
Sagt zumindest meine Glaskugel

> Das 2. Problem ist wenn die winkelmessung aktiv ist und in
> der 2. Zeile Grad stehen sollte steht aber Gradche weil
> vorher schon Striche drinstand wie bekomme ich das weg.

Einfach "Grad   " ausgeben. Was du nicht mit Leerzeichen überschriebst, 
bleibt stehen.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wenn ich mit dem Drehgeber die werte einlese geht das nur bis ca. 640
>dann springt er wieder auf 0 zurück denke dass die Variable dann voll
>ist

So ist es. Bei 655 ist bei einem uint16_t in Festkommaarithmetik mit 
zwei Stellen hinterm Komma Schluß. Entweder brauchst du einen uint32_t, 
oder doch einen float.

Oliver

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo danke euch 2 es Funktioniert jedoch bin ich auf ein kleines Rätsel 
gestoßen warum ist das Grad und die Zahl fast in der mitte des Displays 
obwohl ich mit dem befehl set_cursor (0,2) sage in der 2.zeile am anfang 
schreiben...

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

Bewertung
0 lesenswert
nicht lesenswert
Auch hier wieder:
Das Problem liegt in Zeile 42.

(Ist das wirklich so schwer: Wenn du ein Problem in deinem Code hast, 
das du nicht verstehst, dann poste den Code! Hier auf dieser Seite des 
Bildschirms kann keiner wissen, was du programmiert hast. Und nein. Der 
Code von weiter oben gilt nicht mehr. Den hast du schon verändert, Der 
ist nicht mehr ident zu deinem Programm, wie es jetzt ist)

Autor: Christian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
bitte sehr was meint ihr eigentlich mit Zeile 42...

Autor: Joachim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Googel mal nach
per anhalter durch die galaxis 42

Gruß
Joachim

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.