-
        

Ergebnis 1 bis 3 von 3

Thema: Odometrie (Positionserkennungsproblem)

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    29.07.2005
    Alter
    26
    Beiträge
    128

    Odometrie (Positionserkennungsproblem)

    Anzeige

    Code:
    #include "asuro.h" 
    	int main(void)
    {
    		unsigned int data [2];
    		Init();
    
    		StatusLED(1);
    
    		while(1){
    		OdometrieData(data);
    		
    			if (data [0] == 1)
    			{BackLED(ON,ON);}			
    			
    			else
    			{BackLED(OFF,OFF);}
    	
    		}
    	
    	return 0;
    }
    das ist der code
    nun ist ja nicht schwer zu erkennen, was er machen sollte:
    wenn data 0 dem wert 1 entspricht sollten die back leds leuchten
    joa

    hilfe wäre super
    gruß ich

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Soweit ich weiss, liefert "OdometriData" werte in "Data" von 1-1023
    dein Progamm schaltet aber nur, wenn es ausgerechnet == 1 ist.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

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

    BackLEDs und Odometrie sollte man nicht zusammen verwenden, weil sie sich den Pin PD7 teilen. Zwar wird von BackLEDs() und OdometrieData() jeweils der Pegel richtig eingestellt (Odo=high, BackLEDs=low), aber die Odo-LEDs brauchen etwas Zeit bis sie die volle Leuchtstärke erreichen. Das könnte die Abfrage der Odo-Sensoren beinflussen.

    Bei näherer Betrachtung scheint mir hier sogar noch ein kleiner Bug zu sein: BackLEDs(ON,ON) schaltet den PD7 auf low und PC0/1 auf Ausgang und high:

    Code:
    		PORTD &= ~(1 << PD7); // Wheel LED OFF
    		DDRC |= (1 << PC0) | (1 << PC1); // Output => no odometrie
    		PORTC |= (1 << PC0) | (1 << PC1);
    und OdometrieData() schaltet den PD7 auch wieder auf high (ODOMETRIE_LED_ON) und die Pins PC0/1 auch wieder auf Eingang für den ADC, "vergisst" aber die Pullups wieder auszuschalten!
    Code:
    	DDRC &= ~((1 << PC0) | (1 << PC1)); // Input => no break LED
    	ODOMETRIE_LED_ON;
    Das bedeutet, vor OdometrieData() muss man BackLEDs(OFF,OFF) aufrufen um die Pins von Hand auf low zu schalten. Sonst sind die PullUps parallel zu R18/R20 geschaltet und könnten zusätzlich das Ergebniss von OdometrieData() verfälschen. (Das funktioniert im Programm oben automatisch, weil immer der else-Zeig ausgeführt wird;)

    Das die Abfrage data[0]==1 nicht funktioniert sollte inzwischen klar sein. Der Wert in data[] hängt von der gemessenen Helligkeit am Odosensor ab.

    Gruß

    mic

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

Berechtigungen

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