-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: [GELÖST] - Erweiterung für Bluetooth - Asuro

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847

    [GELÖST] - Erweiterung für Bluetooth - Asuro

    Anzeige

    Hallo zusammen,

    ich habe mir von http://www.e-robotix.de/epages/61660837.sf die ATMEGA32 - Bluetooth - Platine gekauft und sie mit einer eigenen Erweiterung auf Basis der IR-Entfernungsmessung (sh. Anlage) ausgestattet.

    Die PINs meiner Platine habe ich so belegt:

    - Anoden beider IR-LEDs auf PIN21 (PD7) des ATMEGA32
    - Kathode rechte IR-LED auf PIN2 (PB1) des ATMEGA32
    - Kathode linke IR_LED auf PIN8 (PB7) des ATMEGA32
    - OUT vom SFH5110 auf PIN7 (PB6) des ATMEGA32

    Die Software sieht so aus (Codeschnipsel):

    Code:
        uint8_t objekt_sichtbar_rechts(uint8_t distance_r)
        {
           uint16_t j,z;
           
           PORTB |= (1 << PB1);   // PB1 auf HIGH (LED ausschalten)
              DDRB |= (1 << DDB7);   // Port B7 als Ausgang
              PORTB &= ~(1 << PB7);   // PB7 auf LOW
    
           OCR2  = 254-distance_r;   // wenn OCR2=0xFE dann Objekt sehr nahe
           z=0;
           for(j=0;j<30;j++) // loop time: 5ms
           {
              if (PINB & (1 << PB6))z++;
              Sleep(6); // 6*Sleep(6)=1ms
           }
           if (z>=29) return FALSE; // Objekt nicht gefunden
           else return TRUE;
        }
    
        uint8_t objekt_sichtbar_links(uint8_t distance_l)
        {
           uint16_t i,y;
    
           PORTB |= (1 << PB7);    // PB7 auf HIGH (LED ausschalten)
              DDRB |= (1 << DDB1);   // Port B1 als Ausgang
              PORTB &= ~(1 << PB1);   // PB1 auf LOW
    
           OCR2  = 254-distance_l;   // wenn OCR2=0xFE dann Objekt sehr nahe
           y=0;
           for(i=0;i<30;i++) // loop time: 5ms
           {
              if (PINB & (1 << PB6))y++;
              Sleep(6); // 6*Sleep(6)=1ms
           }
           if (y>=29) return FALSE; // Objekt nicht gefunden
           else return TRUE;
        }
    So weit so gut, aber die Entfernungsmessung funktioniert nicht, auf OUT des SFH5110 messe ich z. B. keine Spannung.

    Bitte um Tipps und Hinweise was ich hier falsch gemacht habe.

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    Hallo pinsel120866,

    fleissig, fleissig! Wie ich sehe, hast Du ja jetzt (mindestens) zwei asuro´s. Und Dein zweiäugiger sieht ja wirklich nett aus, wieder mal mein Kompliment! Den code habe ich mir nicht durchgesehen, aber trotzdem frage ich: wie hoch ist die Spannung an den Akkus, am Prozessor, am 5110 usf. wenn Du all Deine Gimmicks: mega32, 2 (oder 3?) IR-LED´s, usf. in Betrieb hast. Aber vermutlich hast Du da schon nachgesehen. Und vermutlich hast Du auch den SFH5110 richtig versorgt, oder? Übrigens: keine Spannung am 5110 heisst ja, dass er ein kräftiges Signal zu erkennen glaubt (aktiv low ! ! !).

    Ach ja, noch ne Frage: da ja das Bluetooth-Modul nicht im Lieferumgang ist - sind dann die xx € gerechtfertigt? Was ist im Lieferumfang?
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    Hallo Nachbar,

    danke für die Blumen.

    Zu deinen Fragen: Akkus sind voll, Am 5110 messe ich bei VCC 4,2V, IR-LEDs leuchten (mit Handykamera überprüft).

    Ist meiner Meinung nach nur ein Softwareproblem, da am OUT vom SFH5110 keine Spannung anliegt.

    Kosten sind gerechtfertigt, ist praktisch das gleiche wie die ATMEGA32-Platine, nur halt ohne IR. Allerdings war für mich die grösste Hürde das BT-Modul anzulöten - brauchte dazu Profi-Hilfe. Die Möglichkeiten werden mit BT deutlich erweitert.

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    Aktiv low ! - also wenn der 5110 richtig versorgt ist UND die richtige Anzahl ir-Pulse mit ausreichendem Empfangspegel erkennt, dann geht er auf low! siehe Auszug Datenblatt:

    Ciao sagt der JoeamBerg

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    Das heisst also, dass das SFH5110 richtig arbeitet, oder?
    Aber wo habe ich dann den Fehler?

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    Hallo Nachbar,

    Zitat Zitat von pinsel120866
    ... Das heisst also, dass das SFH5110 richtig arbeitet, oder? ...
    Du weißt doch selbst: eine Verifizierung ist praktisch nie möglich, eine Falsifizierung dagegen relativ einfach. Es KÖNNTE ja sein, dass GARNIX da ist, einfachste Möglichkeit: Drahtbruch. Vielleicht klemmst Du einen 10k zwischen Vcc und PB6 - der 5V-Pegel müsste dann von irgendetwas runtergezogen werden . . . . DANACH könntest Du sagen, dass der 5110 arbeitet. Ob er recht hat - das bleibt dann offen.

    Es könnte z.B. sein, dass entweder Deine Kunststoffabdeckungen für irLicht durchsichtig sind (steht in meinem langen Thread, siehe unten "eigene Untersuchungen") oder dass die LED´s nach hinten scheinen und so Streulicht auf den 5110 fällt. Ich hatte z.B. in der Testphase die 5110er mit ziemlich dickem, weitgehend ir-dichtem Klebeband abgedeckt, siehe hier (3 Stück links oben). Evtl. Alufolie dranpappen.

    Ich könnte mir folgenden Test vorstellen:
    1) Low am PB6 lässt eine Test-LED leuchten, high löscht sie aus.
    2) irLED´s eine Sekunde einschalten
    3) irLED´s eine Sekunde ausschalten
    4) Erkenntnisse aus dem Ergebnis ziehen *gggg*

    Zitat Zitat von pinsel120866
    ... Aber wo habe ich dann den Fehler?
    Ja, das ist die bekannte Frage zum Feiertag (in DE ist Tag der deutschen (R)Einheit). Ich bin vor etlicher Zeit über Probleme bei der SFH415/SFH5110-Kombination gestolpert und hatte deswegen etliche eigene Untersuchungen angestellt. Die sind mittlerweile abgeschlossen. Hatte aber eine Weile gedauert *schnief*. Das wäre ein Haufen Lesestoff, aber vielleicht hilft es Dir weiter (einfach Schnelllesen : also diagonal).
    Ciao sagt der JoeamBerg

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    Hallo Oberallgeier,

    ich trete derzeit auf der Stelle. Hardwareseitig habe ich die Schaltung vom Asuro auf meine Erweiterungsplatine übernommen (Kondensatoren, Widerstand, SFH...), aber offensichtlich bin ich zu dämlich eine vernünftige Fehleranalyse durchzuführen.

    Bin im Moment ratlos, weil das SFH nicht arbeitet. Ich habe es schon ausgetauscht, weil ich gemeint habe ich hätte es "gegrillt", aber ohne Erfolg.

    Die IR-LEDs senden brav, aber ich weiss nicht ob es 36 MHz sind. Wie kann ich das herausfinden?

    Ich habe auch schon ein kleines Testprogramm mit dem ich das SFH testen will:

    Code:
        while(1)
        {
        if (PINB & (1 << PB6)) StatusLED(OFF);
        else StatusLED(GREEN);
        }
    Wenn ich nun mit meinem Asuro-PC-Adapter sende müsste eigentlich die Status LED blinken, was sie aber nicht tut...


  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    Vermutlich die einfachste Testmöglichkeit (ohne Oszilloskop) ist der asuro in seiner Grundkonfiguration. Wenn es Dir möglich ist, einen Bauteilsatz (LED und Empfänger, also SFH415 und SFH5110) an den originalen asuro zu hängen, dann wäre die Funktion durch die Funktion der Schnittstelle nachweisbar. Dann könntest Du die Initialisierung so ändern, dass Du statt 36kHz nur noch 1Hz auf der LED hast - das siehste dann in der Kamera *gggg*.

    An welchem Pin hängt aktuell die LED? Wie oben beschrieben?
    Stimmt die Initialisierung der LED?
    Ist der mega32 nicht durch verschiedene Bauteile in seiner Belastbarkeit ausgereizt?
    Wieviel Spannung misst Du am Pin der LED im Betrieb?

    Ich habe hier eine RNControl, 16 MHz-Quarze und mega32er. Vielleicht könntest Du den Code posten (PN), dann bastel ich mir einen Aufbau und teste das!?
    Ciao sagt der JoeamBerg

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von pinsel120866
    Registriert seit
    18.12.2007
    Ort
    Hohenems
    Alter
    51
    Beiträge
    847
    Belegung:

    - Anoden beider IR-LEDs auf PIN21 (PD7)
    - Kathode rechte IR-LED auf PIN2 (PB1)
    - Kathode linke IR_LED auf PIN3(PB2)
    - OUT vom SFH5110 auf PIN1 (PB0)

    Spannungen:

    - VCC von SFH5110 - 4,2V
    - OUT von SFH5110 - 0V
    - beide IR-LEDs - 2,2V

    Testcode:
    Code:
    #include "asuro.h"
    #include <stdlib.h>
    
    uint8_t objekt_sichtbar_rechts(uint8_t distance)
    {
       uint16_t j,z;
       
           PORTB |= (1 << PB1);   // PB1 auf HIGH (LED ausschalten)
              DDRB |= (1 << DDB2);   // PB2 als Ausgang
              PORTB &= ~(1 << PB2);   // PB2 auf LOW 
    
       OCR2  = 254-distance;   // wenn OCR2=0xFE dann Objekt sehr nahe
       z=0;
       for(j=0;j<30;j++) // loop time: 5ms
       {
          if (PIND & (1 << PB0))z++;
          Sleep(6); // 6*Sleep(6)=1ms
       }
       if (z>=29) return FALSE; // Objekt nicht gefunden
       else return TRUE;
    }
    
    uint8_t objekt_sichtbar_links(uint8_t distance)
    {
       uint16_t j,z;
       
           PORTB |= (1 << PB2);   // PB2 auf HIGH (LED ausschalten)
              DDRB |= (1 << DDB1);   // PB1 als Ausgang
              PORTB &= ~(1 << PB1);   // PB1 auf LOW 
    
       OCR2  = 254-distance;   // wenn OCR2=0xFE dann Objekt sehr nahe
       z=0;
       for(j=0;j<30;j++) // loop time: 5ms
       {
          if (PIND & (1 << PB0))z++;
          Sleep(6); // 6*Sleep(6)=1ms
       }
       if (z>=29) return FALSE; // Objekt nicht gefunden
       else return TRUE;
    }
    
    uint8_t abstand_rechts()
    {
       uint8_t k,n;
       
       k=255;
       for(n=0;n<8;n++)
       {
         if (!objekt_sichtbar_rechts(n)) k=n; // solange kein Objekt, Distanz erhoehen
       } 
       return k;
    }
    
    uint8_t abstand_links()
    {
       uint8_t l,m;
       
       l=255;
       for(m=0;m<8;m++)
       {
         if (!objekt_sichtbar_links(m)) l=m; // solange kein Objekt, Distanz erhoehen
       } 
       return l;
    }
    /*************************************************************************
    
       Hauptprogramm
    
    *************************************************************************/
    int main(void)
    {
          uint8_t n,m;
       
          Init();
    
       FrontLED(ON);
          while(1)
       {
             n=abstand_rechts();
          m=abstand_links();
          StatusLED(OFF);
             BackLED(OFF,OFF);
                
          if ((n!=255) || (m!=255))
             {
                if (n<2) StatusLED(GREEN);
                if (m<2) StatusLED(RED);
             Msleep(10);
          }
          else StatusLED(YELLOW);
       }
    }
    Wenn du bei diesem Programm eine der beiden IR-LEDs abdeckst, sollte die STATUS-LED grün oder rot leuchten.

  10. #10
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    Hmmm - das ist der Code für den Mega16? Mit #include "asuro.h" ? ? ? Kann ich mir (fast) nicht vorstellen, dass das ohne Fehler zu übersetzen ist. Welche Frequenz hat der Quarz?

    Oder ist das der Code für einen mega8 auf dem asuro? Wäre doooof - den m8 hatte ich noch nie. Hab zwar einige m168 hier, die sind pinkompatibel, werden aber total anders initialisiert = nicht software-kompatibel.
    Ciao sagt der JoeamBerg

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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