Go Down

Topic: Magnetische Encoder auswerten (Read 4245 times) previous topic - next topic

DrFlopp

Ja das tue ich ja,
doch ich habe Probleme das LCD-Display anzusprechen, das zeigt in dieser Konfiguration nur einen schwarzen Balken statt zweiZeilen a 16 Zeichen. Irgend etwas ist dort im argen. Muss ich in der LCD-Bibliothek etwas umstellen?

Gruß
DrFlopp

volvodani

kann ich mit nicht so ganz erklären. Mit:
Code: [Select]
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

deklarierst du ja die Pins an denen das LCD hängt ich hatte kein Problem mit "versetzten" der Pins ist vielleicht ein Dreher an bestimmten Pins vorhanden?
So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

DrFlopp

Hallo Dani,
manchmal sitzt der Fehler am Lötkolben, ich hatte R/W nicht auf Masse sondern auf einen Pin gelegt. Jetzt funktioniert die Ausgabe des Encoders auf dem LCD. Ich wundere mich aber immer noch über den Unterschied zwischen "Wert++" und "++Wert". Ist irgend wie verblüffend.
Vielen Dank für Deine Hilfe
DrFlopp

volvodani

#33
Jun 25, 2011, 11:50 am Last Edit: Jun 25, 2011, 11:54 am by volvodani Reason: 1
Mal ein kleiner Wink. Schaue mal in de REference und schon versteht man alles ;) ;)
http://arduino.cc/en/Reference/Increment

Mit Wert++ manipulierte ich einen Wert der main Loop also +1 bzw -1 wobei die Variable Wert sich nur jeweils um auf -1 bzw +1 ändert. Wenn du ++Wert schreibst wird jedemal die Variable Wert um 1 LSB incrementiert bei --Wert halt decrementiert (geiles DENGLISCH). Aufpassen bei z.b. bei int 32.767 +1=-32.768
So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

DrFlopp

Hallo Zusammen,
dank Danis Hilfe habe ich jetzt einen recht schlanken Code, der die Encoderposition auf dem LCD ausgibt.
Mich interessiert jetzt aber auch die Geschwindigkeit.
Um das LCD nicht zu überfordern, sollte es nur ca. alle 5-10 sec. aktualisiert werden.  Gibt es dafür eine brauchbare standard Routine?

Gruß DrFlopp

volvodani

Ist doch nur einfache Mathematik.
sagen wir mal 100/Imp pro Umdrehung des Encoder

Du misst sagen wir mal wie viele Impulse pro 1/2Sekunde gezählt werden (z.B. Mittelwert von 2 Sekunden damit ausreißer nihct alles versauen).

U/min= Imp*2:50*60


       
So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

DrFlopp

Hallo zusammen,
ich habe das mit dem Anhängen von Code noch immer nicht durch schaut. Ich hoffe Ihr könnt trotz dem meinem Code lesen. Ich stelle mir das ganze wie Folgt vor:

void loop()
{
  i=++i;
  if (i=10000)
  {
  lcd.setCursor(0, 0);
  lcd.print("Position");
  lcd.setCursor(0, 1);
  lcd.print(Wert);
 
  lcd.setCursor(10, 0);
  lcd.print("Speed");
  lcd.setCursor(10, 1);
  lcd.print(Velosity);
  i=0;
  }
  Velosity = ( v2-Wert)/(T2-T1);
  v2=Wert;
  T1=T2;
}

void CHAInt (){
  T2 = millis();
  int Aread=0;
  int Bread=0;
  Aread=digitalRead(A);
  Bread=digitalRead(B);
  if (Aread==HIGH && Bread==LOW||Aread==LOW && Bread==HIGH){
    ++Wert;
   
  }
  if (Aread==LOW && Bread==LOW ||Aread==HIGH&& Bread==HIGH){
    --Wert;
  }
}

DrFlopp

Hallo Leute,
der Code funktioniert jetzt schon mal ganz ordentlich, doch ich habe jetzt das Problem, dass nach einigen Minuten Programm laufzeit das Display nur noch Balken und Fragezeichen aus gibt. Kann es ein Problem mit den Datentypen für die Zeit sein? Wie könnte man das geschickt umgehen?

DrFlopp

Oh,
es schein ein Wackelkontakt in meiner fliegenden Verdratung zu sein

Go Up