- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 20

Thema: Planung: ASURO mit Karosserie - Fragen zur Elektronik

  1. #11
    Erfahrener Benutzer Begeisterter Techniker Avatar von M1.R
    Registriert seit
    02.06.2007
    Ort
    Freiburg
    Beiträge
    213
    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    vielen Dank allerseits!

    Was mich aber immer noch verwirrt, sind die grossen (1kOhm) Widerstände (R19, R20) bei den BackLEDs.
    Kann es sein, dass die noch eine andere Funktion haben?
    Jetzt habe ich noch dazu die Widerstände R18 und R20 entdeckt, die ja auch irgendwie da dran hängen?
    Sieht für mich so aus, als ob da noch ein bischen Spannung oder Strom? dazu kommt? Deshalb auch die beiden großen R19 und R20?
    Dann müsste ich meine neuen Vorwiderstände aber anders berechnen - oder?
    Ausserdem verstehe ich nicht, wo die BackLEDs ihre Masse herbekommen.

    So einen Schaltplan zu verstehen, fällt mir leider noch ziemlich schwer!

    Gruss
    M.

  2. #12
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    die backleds bekommen die masse vermutlich ebenfalls vom prozessor, wenn dieser sie einschalten will...

    die widerstände sind pulups, die sorgen dafür dass die leds etwas glimmen. wie lautet denn die c-funktion für die backleds?
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  3. #13
    Erfahrener Benutzer Begeisterter Techniker Avatar von M1.R
    Registriert seit
    02.06.2007
    Ort
    Freiburg
    Beiträge
    213
    Zitat Zitat von damaltor
    wie lautet denn die c-funktion für die backleds?
    Code:
    void BackLED (
      unsigned char left,
      unsigned char right)
    {
      if (left || right)
      {
        PORTD &= ~(1 << PD7);               // Rad-LED's OFF
        DDRC |= (1 << PC0) | (1 << PC1);    // Port als Output => KEINE Odometrie
        PORTC |= (1 << PC0) | (1 << PC1);
      }
      if (!left)
        PORTC &= ~(1 << PC1);
      if (!right)
        PORTC &= ~(1 << PC0);
    }

  4. #14
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    danke.

    eigentlich siehts gar nicht so kompliziert aus... mit der zeile
    PORTD &= ~(1 << PD7);
    wird pd7 auf masse gesetzt sofern wenigstens eine led eingeschaltet werden soll (left || right). somit haben die leds hier eine masse. jetzt werden beide leds eingeschaltet (!) und dann bei bedarf wieder deaktiviert mit den zeilen darunter.
    Code:
    {
      if (left || right) //wenn eine led eingeschaltet werden soll...
      {
        PORTD &= ~(1 << PD7);               // Rad-LED's OFF & masse an
        DDRC |= (1 << PC0) | (1 << PC1);    // Port als Output => KEINE Odometrie
        PORTC |= (1 << PC0) | (1 << PC1); //beide leds an
      }
      if (!left) //wenn nicht links
        PORTC &= ~(1 << PC1); //dann wieder aus
      if (!right) //wenn nicht rechts
        PORTC &= ~(1 << PC0); // dann wieder aus
    }
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  5. #15
    Erfahrener Benutzer Begeisterter Techniker Avatar von M1.R
    Registriert seit
    02.06.2007
    Ort
    Freiburg
    Beiträge
    213
    danke - wieder ein bischen mehr kapiert!
    Zitat Zitat von damaltor
    eigentlich siehts gar nicht so kompliziert aus...
    na ja das ist relativ!
    Fragen über Fragen:
    Aber warum glimmen (wegen den pullup-Widerständen) die BackLeds nicht, wenn Sie ausgeschaltet werden? Die Masse wird ja nicht wieder abgeschaltet - oder?
    Wozu sind die pullups überhaupt notwendig?
    Warum hängen die BackLEDs nicht wie die anderen an der "normalen" Masse? - Könnte es sein, dass dann die Odo-Transistoren die BackLEDs einschalten würden?
    Gruss
    M.

  6. #16
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    jaaa so ungefähr hast du schon recht. das ist hauptsächlich weil am asuro so extrem prozessorpins gespart wurden dass man die odometrie und die backleds an einem pin hängen. das ist schon für fortgeschrittene =)
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  7. #17
    Erfahrener Benutzer Begeisterter Techniker Avatar von M1.R
    Registriert seit
    02.06.2007
    Ort
    Freiburg
    Beiträge
    213
    Hallo damaltor,
    bitte, bitte auch noch erklären:
    Zitat Zitat von M1.R
    Aber warum glimmen (wegen den pullup-Widerständen) die BackLeds nicht, wenn Sie ausgeschaltet werden? Die Masse wird ja nicht wieder abgeschaltet - oder?
    Wozu sind die pullups überhaupt notwendig?
    Gruss
    M.

  8. #18
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    wenn der pin PD7 high ist, bekommen die leds den strom qquasi von der falschen richtung, und glimmen nicht mehr. gleichzeitig leuchten jedoch die odometrie-leds strahlend hell, aber unsichtbar auf.

    die pullups r18 und r20 haben folgende bedeutung:
    sie sind im grunde so angeschlossen:
    VCC---Pullup---Odo-sensor---GND

    wenn nun kein licht auf den odo-sensor fällt, hat dieser einen hohen widerstand, nehmen wir an er wäre unendlich groß, und wir könntn den maximal möglichen wert für die odometrie messen (weil der pullup widerstand den prozessorpin auf high zieht - deshalb "pull up"). wenn der fototransistor jedoch viel licht abbekommt, schaltet er durch und der ganze strom fliesst zur masse - wir messen den kleinstmöglichen wert. wenn der fototransistor nun mittelmäßig viel licht bekommt, messen wir auch einen mittleren wert usw, da immer strom über den widerstand kommt und teilweise über den fototransistor abgeleitet wird.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  9. #19
    Erfahrener Benutzer Begeisterter Techniker Avatar von M1.R
    Registriert seit
    02.06.2007
    Ort
    Freiburg
    Beiträge
    213
    @damaltor
    vielen Dank, habs jetzt größtenteils verstanden!
    Hab BackLED-Funktionen geschrieben, mit denen man sie auch glimmen lassen kann:
    Code:
    //------------------------------------------------------------------
    //backled-spielchen
    //------------------------------------------------------------------
    
    #include "asuro.h"
    
    //------------------------------------------------------------------
    //backled funktionen um die leds unabhängig voneinander
    //hell leuchten oder glimmen zu lassen
    //------------------------------------------------------------------
    
    #define  aus    0
    #define  hell   1
    #define  glimm  2
    
    //------------------------------------------------------------------
    // rechte led
    void BackLEDrechts(uint8_t status) // aus - hell - glimm
    {
      PORTD &= ~(1 << PD7);                 //odoleds aus
      if (status == aus)
      { //rechte backled aus
    	DDRC |= (1 << PC0);					//rechts auf out
    	PORTC &= ~(1 << PC0);				//rechte aus
      }
      if (status == hell)
      {
        //rechte backled hell
    	DDRC |= (1 << PC0);					//rechts auf out
    	PORTC |= (1 << PC0);				//rechte an
      }
      if (status == glimm)
      { //rechte backled glimmt
    	DDRC &= ~(1 << PC0);				//rechts auf in
      }
    }
    
    //------------------------------------------------------------------
    // linke led
    void BackLEDlinks(uint8_t status) // aus - hell - glimm
    {
      PORTD &= ~(1 << PD7);                 //odoleds aus
      if (status == aus)
      { //rechte backled aus
    	DDRC |= (1 << PC1);					//links auf out
    	PORTC &= ~(1 << PC1);				//linke aus
      }
      if (status == hell)
      {
        //rechte backled hell
    	DDRC |= (1 << PC1);					//links auf out
    	PORTC |= (1 << PC1);				//linke an
      }
      if (status == glimm)
      { //rechte backled glimmt
    	DDRC &= ~(1 << PC1);				//links auf in
      }
    }
    
    //------------------------------------------------------------------
    //------------------------------------------------------------------
    
    uint8_t i;
    
    //------------------------------------------------------------------
    // hauptprogramm
    //------------------------------------------------------------------
    
    int main(void)
    {
    	Init();
    
    	BackLEDrechts(aus);
    	BackLEDlinks(aus);
    	StatusLED(GREEN);
    	Msleep(1000);
    
    	for(i = 1; i <= 5; ++i)
    	{
    	BackLEDrechts(glimm);
    	BackLEDlinks(glimm);
    	Msleep(500);
    	BackLEDrechts(hell);
    	BackLEDlinks(hell);
    	Msleep(500);
    	}
    
    	BackLEDrechts(aus);
    	BackLEDlinks(aus);
    	Msleep(500);
    
    	for(i = 1; i <= 5; ++i)
    	{
    	BackLEDrechts(hell);
    	BackLEDlinks(glimm);
    	Msleep(500);
    	BackLEDrechts(glimm);
    	BackLEDlinks(hell);
    	Msleep(500);
    	}
    
    	BackLEDrechts(aus);
    	BackLEDlinks(aus);
    	Msleep(500);
    
    	for(i = 1; i <= 5; ++i)
    	{
    	BackLEDrechts(aus);
    	BackLEDlinks(glimm);
    	Msleep(500);
    	BackLEDrechts(glimm);
    	BackLEDlinks(aus);
    	Msleep(500);
    	}
    
    	BackLEDrechts(aus);
    	BackLEDlinks(aus);
    	StatusLED(RED);
    	
      	while (1);
      	return 0;
    }
    Gruss
    M.

  10. #20
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.064
    sehr gut offensichtlich hast du es echt gut verstanden. könnte schon fast in die lib, so kann man noch mehr als nur ann oder aus anzeigen. =) nicht schlecht!
    Read... or die.
    ff.mud.de:7600
    Bild hier  

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

LiFePO4 Speicher Test