-         
Ergebnis 1 bis 4 von 4

Thema: RP6 Base header, port Initialisierung.

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    22.03.2010
    Ort
    Berlin
    Beiträge
    38

    RP6 Base header, port Initialisierung.

    Anzeige

    Hallo,

    ich wollte mir die Grundeinstellung für die Ports ansehen, komme aber mir den Beschreibungen nicht klar und das dort so viele Fehler drin sind kann ich eigentlich nicht glauben, deshalb muss es da eine andere Antwort geben.
    Also dort steht z.B.:
    Code:
    // ---------------------------------------------------
    // PORTB
    
    #define SL4 		(1 << PINB7)	// Output
    #define ACS_L 		(1 << PINB6)	// Output
    #define START 		(1 << PINB5)	// Input
    #define PWRON		(1 << PINB4)	// Output
    #define ACS_PWRH	(1 << PINB3)	// Output
    #define ACS 		(1 << PINB2)	// INT2 (Input)
    #define SL5 		(1 << PINB1)	// Output
    #define SL6 		(1 << PINB0)	// Output
    
    // Initial value of port and direction registers.
    #define INIT_DDRB 0b01011000
    #define INIT_PRTB 0b00000000
    
    // ---------------------------------------------------
    Hinter den Pins steht also Input oder auch Output, vergleiche ich das mit der DDRB Anweisung steht dort aber was ganz anderes, für mich würde die Zeile so aussehen:
    #define INIT_DDRB 0b11011011

    Kann mir das mal jemand erklären?

    Schöne Grüße
    Thomas

  2. #2
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672

    Re: RP6 Base header, port Initialisierung.

    Zitat Zitat von ThomasD
    Kann mir das mal jemand erklären?
    Es sieht so aus, als ob alle SLx in der Beschreibung als Output bezeichnet sind, beim Init aber als Input konfiguriert werden. Darüber, was es damit auf sich hat, sollte die Hardware oder der restliche Code Aufschluss geben. Es könnte z.B. sein, dass hier Open-Collector-Outputs gebildet werden.
    MfG
    Stefan

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    22.03.2010
    Ort
    Berlin
    Beiträge
    38
    Hallo,

    laut Schaltplan sind die SLx LED's mit der Schaltung port -> wiederstand -> LED -> GND.

    Schöne Grüße
    Thomas

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

    Für Programme die keine Leds verwenden ist es grundsätzlich nicht falsch die entsprechenden Pins als Eingang zu definieren. Wenn die Leds dann doch verwendet werden sorgt die entsprechende Funktion für die richtige Datenrichtung:
    Code:
    void updateStatusLEDs(void)
    {
    	DDRB &= ~0x83;
    	PORTB &= ~0x83;
    	if(statusLEDs.LED4){ DDRB |= SL4; PORTB |= SL4; }
    	if(statusLEDs.LED5){ DDRB |= SL5; PORTB |= SL5; }
    	if(statusLEDs.LED6){ DDRB |= SL6; PORTB |= SL6; }
    	DDRC &= ~0x70;
    	PORTC &= ~0x70;
    	DDRC |= ((statusLEDs.byte << 4) & 0x70);
    	PORTC |= ((statusLEDs.byte << 4) & 0x70);
    	#ifdef POWER_ON_WARNING
    		leds_on = (leds_on ? leds_on : (statusLEDs.byte && 1));
    	#endif
    }
    (Aus der Datei RP6RobotBaseLib.c der RP6-Library)

    Sogar hier werden die Pins PB0, Pb1 und PB7 zuerst als Eingang definiert, 0x83 ist 0b10000011

    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
  •