- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Runden eine Stelle nach dem Komma

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.11.2006
    Beiträge
    27

    Runden eine Stelle nach dem Komma

    Anzeige

    Praxistest und DIY Projekte
    Hallo Leute!

    Also vielleicht kenni hir ja noch mein Projekt zum Einlesen von Sensorwerten mit dem MLX 90316.

    Beim Einlesen der Werte hat nun alles geklappt! Nun habe ich versucht, die umgerechneten Gradwerte sinnvoll zu runden, da blieb leider aber bis jetzt ohne Erfolg.

    Ich stelle hier mal minen Code rein, vielleicht könnt ihr ja einen Fehler erkennen.

    Code:
          Sensor = 0                                            'Initialisiert die Variablen Sensor, Grad
          Grad = 0
    
          Sensor = Getadc(2)                                    'Der AD Wert wird am Pin C2 abgelesen und
                                                                 'in die Variable "Sensor" geschrieben
    
          Grad = Sensor - 50                                    ' ((-50+Sensor)*360)/922
          Grad = Grad * 360
          Grad = Grad / 922
    
    
          Grad = Grad * 100
          Grad = Fix(grad)
          Grad = Grad / 10
          Grad = Round(grad)
          Grad = Grad / 10
    
          Print "Sensor (ADC) : " ; Sensor
          Print "Grad: " ; Grad
    Zum Code ist noch zu sagen, dass der Sensor die vollen 360 Grad über 4,5 V verteilt, d.h. 0° = 0,25V und 360° = 4,75V.




    Falls ihr auch noch fragen zu dem Triaxis Hallsensor habt, kann ich euch gerne weiterhelfen, habe mich jetzt ausgiebig damit befasst.
    Nochmal zur Information:
    Dieser Sensor ist zum Kontaktlosen und sehr präzisen Einlesen von Winkelwerten geeignet und erfasst volle 360° über einen Magneten(vornehmlich leistungsfähiger Neodymmagnet) und gibt sie analog oder über ein SPI Protokoll aus.
    Ich stehe ebenso gut in kontakt mit der Firma DACOM West in Verbindung und kann auch bei Bedarf kleinere Stückzahlen ordern.



    Also, nun aber mal auf den falschen Code konzentriert und käftig Beiträge geschrieben.

    Viele Grüße Felix

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.02.2007
    Beiträge
    210
    wenn du genügend speicher hast versuchs mal mit
    fushing(wert,#.##)

    siehe Bascom helpfile

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    29.11.2006
    Beiträge
    27
    Hmm, schonmal vielen dank, funktioniert soweit aber jetzt sind an anderen stellen wieder Probleme mit der neuen Funktion aufgetreten

    gruß

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    15.09.2004
    Beiträge
    30
    Dann erhöhe mal die Werte für:

    $hwstack =
    $swstack =
    $framesize =

    Ich hatte da auch schon Problemme beim benutzen von
    fushing

    Gruß HH

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.02.2005
    Ort
    NRW-Bergisches Land
    Beiträge
    311
    Zitat Zitat von HansHans
    ....Problemme beim benutzen von
    fushing
    Jo, oder heisst es "pfushing"?
    Gruß RePi!


    *** Holzhacken ist deshalb so beliebt, weil man bei dieser Tätigkeit den Erfolg sofort sieht. ***
    *** (Albert Einstein) ***

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    10.10.2005
    Ort
    Nähe Biberach a.d. Riss
    Alter
    54
    Beiträge
    44
    Wenn es jetzt geht heisst es "funzing"

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    29.11.2006
    Beiträge
    27
    Also das könnte schon möglich sein, dass ich dann die Stacks erhöhen muss, aber davon hab ich noch nicht so viel Ahnung! also ich hab von Anfang an
    $hwstack = 32
    $swstack = 32
    $framesize = 32
    gesetzt. Aber wenn das jetzt nicht mehr läuft, könnte es auch daran liegen. Aber ich bräuchte noch ne kleine Beschreibung zu den Stacks dann kann ich sie auch richtig berechnen und verwalten.

    Schonmal vielen Dank für eure Antworten

    Gruß Felix


    P.S.: Ich glaub eher dass das "Fusing" heißt :-P

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    15.09.2004
    Beiträge
    30
    Zitat Zitat von repi64
    Jo, oder heisst es "pfushing"?
    Ok, war ohne nachzudenken oben abgeschrieben ,
    da steht es auch falsch ,
    aber das hat ja nichts mit dem Problem zu tun
    es dürfte wohl klar sein was gemeint war / ist .
    Zitat Zitat von Stargate
    Aber ich bräuchte noch ne kleine Beschreibung zu den Stacks dann kann ich sie auch richtig berechnen und verwalten
    Zu den Stacks:
    wenn ich Probleme habe und die nicht zuordnen kann
    dann erhöhe ich die Werte halt mal zum Test .
    Aber es gibt extra Befehle ( $DBG) um den Stack zu Testen und die
    Werte festzulegen , aber einfach mal erhöhen geht schneller ...

    Gruß HH

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    29.11.2006
    Beiträge
    27


    Also Leuts, ich komm nicht weiter :-/

    will er hier nen string , erwartet er woanders ein single, und umgedreht... der weiß nicht was er noch an fehlermeldungen auf mein board schreiben soll, ich blaub ich hab sie schonmal alle draufstehen gehabt :-/

    also nun ganz exklusiv und mit sicherheit vielen fehlern behaftet MEIN wunderbarer Quellcode \/
    Code:
    
    
             'Winkelmessung mit dem Sensor MLX 90316 und Ausgabe der Gradanzeige
             'über den Controler RN-MiniControl von Robotikhardware auf das Display
             'Wintek 27 * 4 von Pollin
             '>>>Besondere Lernleistung von Felix König<<<
    
    
    $regfile = "m168def.dat"                                    'Controller definieren
    $crystal = 16000000                                         'Quarzfrequenz
    $baud = 9600                                                'Übertragungsrate in Baud
    $hwstack = 64
    $framesize = 64
    $swstack = 64
    
    'Die üblichen Definitionen bei Standardprogrammen auf Miniboard
    
    
     'Hier kommt die Ausgabe auf das Display
    
     Config Lcd = 40 * 4                                        'Bascom kennt keine Displays mit 27 * 4 Zeichen,
                                                                 'daher 40 * 4 verwenden
    
     Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.0 , Db6 = Portd.7 , Db7 = Portd.6 , E = Portb.3 , E2 = Portc.3 , Rs = Portd.3
    
                                                                 'man achte auf die Ergänzung E2 für den 2. Steuerkontroller des Displays
    
     Dim ___lcdno As Byte                                       'Systemvariable der LCD-Bibliothek
    
    
    
     ___lcdno = 0                                               'wählt den ersten Chip aus
     Initlcd                                                    'die beiden oberen Zeilen initialisieren
     Cls                                                        'die beiden oberen Zeilen löschen
    
     ___lcdno = 1                                               'auf Chip 2 schalten
     Initlcd                                                    'die beiden unteren Zeilen initialisieren
     Cls                                                        'die beiden unteren Zeilen löschen
    
    
    
       ___lcdno = 0                                             'wählt die obere Zeile aus
    
       Locate 1 , 1                                             'schreibt in die erste Zeile an Position 1
       Lcd "  Besondere Lernleistung  ";                        'den Text in Anführungszeichen
    
       Locate 2 , 1                                             'schreibt in die zweite Zeile an Position 1
       Lcd "  von Felix Koenig 13 BGD"                          'den Text in Anführungszeichen
    
    
       Cursor Off                                               'unterdrückt den Cursor
    
    
    
       ___lcdno = 1                                             'wählt die beiden unteren Zeilen aus
    
       Locate 1 , 1                                             'Wiederholt die Displayausgabe auf den unteren
       Lcd "Windrichtung : ";                                   '2 Zeilen
    
       Locate 2 , 1
       Lcd "Grad : "
    
       Cursor Off                                               'unterdrückt den Cursor
    
     'Hier kommt die Sensorwerterfassung
    
     Config Adc = Single , Prescaler = Auto , Reference = Avcc  'Konfiguriert den AD Wandler
    
     Start Adc                                                  'Startet den AD Wandler
    
     Config Pinc.2 = Input                                      'ADC 2 an Ctrl
    
     Dim Sensor As Long                                         'Deklariert "Sensor" als Long mit 4 Byte Zeichenvorrat
     Dim Grad As Single                                         'Deklariert die Gradvariable "Grad" als Single
     Dim Grad2 As String * 5
    
       Do                                                       ' Beginnt die Abfrageschleife zur Werteerfassung
    
          Sensor = 0                                            'Initialisiert die Variablen Sensor, Grad, Grad2
          Grad = 0
          Grad2 = 0.0
    
          Sensor = Getadc(2)                                    'Der AD Wert wird am Pin C2 abgelesen und in die Variable "Sensor" geschrieben
    
          Grad = Sensor - 50                                    ' ((-50+Sensor)*360)/922
          Grad = Grad * 360
          Grad = Grad / 922
    
    
          'Grad = Grad * 100
          'Grad = Fix(grad)
          'Grad = Grad / 10
          'Grad = Round(grad)
          'Grad = Grad / 10
    
    'Ausgelassen, weil es nicht funktioniert hat
    
          Grad2 = Fusing(grad , "#.#")
    
    
          Print "Sensor (ADC) : " ; Sensor
          Print "Grad:  " ; Grad
          Print "Grad2: " ; Grad2
    
          'Hierhin kommt die Anzeige der Ausgesprochenen Windrichtung (NOSW)
    
          Select Case Grad2
    
             ___lcdno = 1
    
             Case Is > 337.5 : Print "Nord" ;
                Locate 1 , 16
                Lcd "Nord"
             Case 292.5 To 337.4 : Print "Nord/West" ;
                Locate 1 , 16
                Lcd "Nord/West"
             Case 247.5 To 292.4 : Print "West" ;
                Locate 1 , 16
                Lcd "West"
             Case 202.5 To 247.4 : Print "Sued/West" ;
                Locate 1 , 16
                Lcd "Sued/West"
             Case 157.5 To 202.4 : Print "Sued" ;
                Locate 1 , 16
                Lcd "Sued"
             Case 112.5 To 157.4 : Print "Sued/Ost" ;
                Locate 1 , 16
                Lcd "Sued/Ost"
             Case 67.5 To 112.4 : Print "Ost" ;
                Locate 1 , 16
                Lcd "Ost"
             Case 22.5 To 67.4 : Print "Nord/Ost" ;
                Locate 1 , 16
                Lcd "Nord/Ost"
             Case Is < 22.4 : Print "Nord" ;
                Locate 1 , 16
                Lcd "Nord"
    
             Case Else : Print "Error" ;
                Locate 1 , 16
                Lcd "Error"
    
          End Select
    
          Print " "
    
          ___lcdno = 1                                          'wählt die unteren 2 Zeilen aus
    
          Locate 2 , 8
          Lcd Grad2 ; "^"
    
    
    
          Waitms 500                                            '500 ms Wartezeit zwischen der Abfragewiederholung
    
          ___lcdno = 1                                          'Löschen der vorherig angezeigten Werte auf dem Display
    
          Locate 1 , 16
          Lcd "           "
          Locate 2 , 8
          Lcd "               "
    
       Loop                                                     'Ende der Ausführungsschleife
                                                                 'und Sprung zum Anfang der Schleife
    
    
    End                                                         'Programmende
    Also das Erhöhen der stacks hat wahrlich NIX gebracht!
    Die meisten Fehler hab ich bei der Fallunterscheidung, da er mir in fast jeder zeile sagt, "Single expected" *blablablabla*

    Bin irgendwie gefrustet

    Bin dankbar über jeden konstruktiven Vorschlag

    Gruß Felix

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    29.11.2006
    Beiträge
    27
    WAS SOLL DAS???????

    Code:
          Sensor = 0                                            'Initialisiert die Variablen Sensor, Grad, Grad2
          Grad = 0
    
    
          Sensor = Getadc(2)                                    'Der AD Wert wird am Pin C2 abgelesen und in die Variable "Sensor" geschrieben
    
          Grad = Sensor - 50                                    ' ((-50+Sensor)*360)/922
          Grad = Grad * 360
          Grad = Grad / 922                                     'Ergebnis als Gradwert mit Kommastellen
    
    
          Grad = Grad * 100
          A = Int(grad)
    
          'Grad = Grad / 10
          'Grad = Round(grad)
    
          B = A / 100
    
    
          'G = Fusing(grad , "#.#")
    
    
          Print "Grad:  " ; B
          'Print "Grad2: " ; G

    Was ein SCHROTT! Also, WErt einlesen, durch 100 teilen, dann mit int oder Fix die Kommazahl abscheiden, bis dahin alles verständlich und klar. macht er auch, und JETZT

    B = A / 100

    und ich hab wieder alle schönen BESCHEUERTEN Kommazahlen da.
    Ich raff's nicht ?!! :-/

    sagt mir mal wenigsten einer was ich falsch mach?

    Fänd ich voll nett

    Gruß an alle

    P.s. Also ich hab den code so reingestellt wie ich ihn programmiert hab(teilausschnitt) oben ist ja wie gesagt der ganze code. da ich am rumprobieren bin, ist oft auch code mit hochkomma ausgeschaltet (text)

    also ist nicht alles aktiv

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress