-         

Ergebnis 1 bis 6 von 6

Thema: Merkwürdiges verhalten von LineData

  1. #1

    Merkwürdiges verhalten von LineData

    Anzeige

    Hallo,

    ich bin am verzweifeln beim Asuro. Eigentlich schien alles zu funktionieren und der Selbsttest tat das, was er soll, aber jetzt versuche ich, den Asuro einer Linie folgen zu lassen. Ich hab mein Problem nach ewigen hin und herfummeln zumindest schon mal erkannt: Die LineData() Methode spukt nicht aus, was sie soll!
    Dazu hab ich hier mal dieses Codeschnippsel gemacht, jetzt verhält sich das Ding folgendermaßen: Bei ersten durchlauf bekomme ich tatsächlich einen vernünftigen Wert für den linken Fototransistor geliefert, danach aber immer nur 0! Um zu sehen, ob meine Serielle Ausgabe falsch ist, hab ich auch noch das Status LED angesteuert, was so viel heißt, dass meine Werte wohl wirklich 0 ist! Das ist doch sehr komisch, zumal es ja bei allerersten Durchlauf nicht 0 ist, also muss der Foto-Transistor ja schon irgendwie funktionieren, oder?

    Code:
    unsigned int data[2];
    	while (1) 
    	{ data[0] = 0; 
    	  data[1] = 0; 
    	  LineData(data);
    	  SerWrite("Links ", 6); 
    	  warte(100);
    	  writeUint(data[0]); 
    	  warte(100);
    	  SerWrite("Rechts ", 7); 
    	  warte(100);
    	  writeUint(data[1]); 
    	  warte(1000); 
    	  SerWrite("\n\r", 2); 
    	  if (data[1] > 500)
    	  { if (data[1] >1024)
    			StatusLED(GREEN);
    		else
    			StatusLED(YELLOW); 
    		
    		}
    	  else
    		if (data[1] >1 || data[0] > 1)
    		StatusLED(RED);
    		else StatusLED(OFF); 
    	
    	   while(PollSwitch() < 1)
    		warte(1); 
    	}

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.783
    Blog-Einträge
    8
    Hallo

    Die Werte der Liniensensoren sind viel geringer, einstellig, wenn die FrontLED nicht eingeschaltet ist. Grundsätzlich funktioniert es mit den kleinen Werten auch ganz gut, aber man kann das auch steigern:

    http://www.roboternetz.de/community/...e-Fotosensoren

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    okay, aber das hilft mir gerade in meinem Fall nicht weiter. Habs auch mal mit der FrontLED an versucht und es ändert nichts daran, dass LineData weiterhin 0 für beide ausgibt!

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.783
    Blog-Einträge
    8
    Hallo

    Zweiter Versuch:
    Bei ersten Durchlauf bekomme ich tatsächlich einen vernünftigen Wert für den linken Fototransistor geliefert,
    Gibt es so immer noch einen "vernünftigen" Wert bei der ersten Lesung?
    Code:
    	while (1) 
    	{ data[0] = 0; 
    	  data[1] = 0; 
    	  LineData(data);
    	  LineData(data);
    	  SerWrite("Links ", 6); 
    	  warte(100);
    	  writeUint(data[0]);
    Hintergrund: Die erste Lesung nach dem Umschalten des ADC-Kanal (oder der Referenz) kann fehlerhaft sein. Wenn mit dieser Änderung für Links kein vernünftiger erster Wert gelesen werden kann, sind vielleicht die Liniensensoren T9 und T10 falschrum eingelötet. Die würden dann, unabhängig von der Beleuchtungsstärke, immer sperren und die Pegel an ADC2 und ADC2 wären durch die PullDowns R14 und R15 immer auf Null Volt.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Hm, leider nein,

    ich versteh es auch nicht, ich hab jetzt den Schaltplan nochmal durchgecheckt, die Widerstände 14 und 15 sind die richtigen, 20kOhm, und die Fototransistoren sind auch richtig rum drin. Mir ist das ganze ein Rätsel gerade.

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.783
    Blog-Einträge
    8
    Hallo

    Code:
    	  if (data[1] > 500)
    	  { if (data[1] >1024)
    			StatusLED(GREEN);
    		else
    			StatusLED(YELLOW); 
    		
    		}
    	  else
    		if (data[1] >1 || data[0] > 1)
    		StatusLED(RED);
    		else StatusLED(OFF);
    Da die Linienwerte beim orginal bestückten asuro nie 500 erreichen, sollte der erste if-Zweig nie ausgeführt werden. Mehr als 1023 werden es sicher auch nie sein, denn die Funktion liefert nur einen 10-Bit-Wert. Also reduzieren wir mal aufs wesentliche:

    Code:
    unsigned int data[2];
    	while (1) 
    	{ 
    	LineData(data);
    	data[0]=2; // Test der Funktionalität der Anzeige
    	if (data[1] >1 || data[0] > 1)
    	StatusLED(RED);
    	else {StatusLED(OFF); while(1);} // Programmende! 
    	
    	while(PollSwitch() < 1) warte(1); 
    	}
    Funktioniert die Anzeige mit der StatusLED wie erwartet, wenn man data[0] auf 2 setzt?

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. Merkwürdiges Verhalten beim XMega128A1
    Von Kampi im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 05.05.2012, 00:11
  2. Merkwürdiges Verhalten vom RFM12
    Von KissenKarl im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 03.11.2010, 22:26
  3. Merkwürdiges Verhalten Bascom (1=0)
    Von ||kugelfisch im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 16.12.2008, 20:57
  4. "Merkwürdiges" Verhalten?
    Von ikarus_177 im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 30.07.2008, 22:08
  5. Atmega128 Progarmmierung, merkwürdiges Verhalten
    Von atlantex im Forum AVR Hardwarethemen
    Antworten: 57
    Letzter Beitrag: 17.12.2005, 16:12

Berechtigungen

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