Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Drehzahl ermitteln mit Digitalport Kategorie: Programmierung (von krassos - 3.08.2005 13:42)
Als Antwort auf Drehzahl ermitteln mit Digitalport von Stefan - 3.08.2005 10:04
Ich nutze:
C-Control II Unit, CC2-ReglerBoard, OSOPT V3.0
> Hallo,
>
> ich hätte eine kurze Frage zum Anschluss am Digitalport P1H0.
> Ich möchte die Drehzahl eines Fahrradreifens messen. Ich benutze hierfür den Sensor des Fahrradcomputers.
> Immer wenn ein Magnet (an den Speichen besfestigt) an dem Sensor vorbei geht schaltet dieser durch.
> Ich schlieÃ?e am Sensor die 5 V Festspannung der C-Control II an (mit R = 10k in Reihe)  immer wenn der
> Sensor durchschaltet entseht ein Rechteckimpuls. Diesen Impuls möchte ich mit dem Digiport auswerten
> (Impulszähler). Ich weis aber nicht, wie ich den Digiport anschlie�en muss. einfach parallel dem 5 V Kreis?



 thread geschwindigkeit
 {
   run 32;  //es muss ein main-thread vorhanden sein, in dem steht: run geschwindigkeit
               // diese zeile ist überflüssig.
   long drehzahl, zeit;
   float d_reifen;
   
   drehzahl = 0;
   zeit = 0;
   
   d_reifen = 0.5;
   
   string s,e;
   lcdext.init();
 
   zeit = system.timer();
   loop
   {
 //    // Ã?berlauf abfangen
 //    if zeit < 0
 //        zeit = system.timer() + (2147483647 - zeit);

if zeit<0                                                        //Ã?berlauf abfangen
{ports.getcount(0);zeit=zeit = system.timer();}
else
{


     if(system.timer()- zeit)>=1000
     {
       drehzahl = (ports.getcount(0) * 1000)/(system.timer() - zeit);
 
       s = "";
       str.putlong(s,drehzahl);
       lcdext.clear();
       lcdext.cursorpos(1,0);
       e= "1/s";
       s = s+e;
       lcdext.print(s);
       sleep 100;  
       zeit = system.timer(); //diese zeile sollte unmittelbar nach getcount folgen, durch das sleep
                                        //fügst du sonst eine messungenauigkeit von 1/10 s ein
     }
   }
 }}



Hallo,

der Code kann wohl so funktionieren, bitte beachte die Sache mit dem Main-Thread.
Der Forenbetreiber hat übrigens code-tags bereitgestellt, um code übersichtlich darzustellen
und Formatierungen nicht zu verlieren. Bitte benutze diese auch.

Das von Dir auskommentierte weist auf einen richtigen Gedankengang hin.
Irgendwann nach genau 2147483647 Millisekunden läuft der Zähler über nach
-2147483648. Eine Differenzbildung in diesem Bereich bringt natürlich ungültige Ergebnisse und
mu� abgefangen werden. Ich würde einfach im Fall zeit<0 keine Berechnung durchführen und auf
die nächste gültige Messung warten.

GruÃ? krassos


    Antwort schreiben


Antworten: