- Akku Tests und Balkonkraftwerk Speicher         
Seite 18 von 19 ErsteErste ... 816171819 LetzteLetzte
Ergebnis 171 bis 180 von 188

Thema: Asuro: Umbau der IR-Schnittstelle zur Hinderniserkennung

  1. #171
    Neuer Benutzer Öfters hier
    Registriert seit
    05.04.2010
    Beiträge
    7

    Hindernisserkennung nur im 2-3 cm Bereich ?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo ins Forum,
    ich bin neu hier und habe Eure Beiträge der Umbauten für die Hindernisserkennung verfolgt und hoffentlich auch verstanden. Die Hindernisserkennung auf meinem Asuro funktioniert aber nur mit einer Auflösung im 2-3 cm Bereich und das auch nur bei direkten geraden Reflektion ?

    Die Umschaltung der Pulsweite wird mir zwar im Terminal angezeigt, aber hat keinen Einfluss auf den Abstand für die Hindernisserkennung.

    Ich benutze das Orginalprogramm aus: .....\examples\IRCollisionTest\test.hex und bekomme nur die 2-3 cm Auflösung.

    Bitte kann mir jemand mit diesem Problem helfen ?

    WolliK

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

    Extrem kurze Reichweite hatte ich auch als ich noch die falsche Version der Lib verwendet hatte [Link]. Das Update von Waste in asuro.c erkennt man am Setup des Timer2:
    Code:
    	//-------- seriell interface programmed in boot routine and already running -------
    	//  prepare 36kHz for IR - Communication
    	TCCR2 = (1 << WGM20) | (1 << WGM21) | (1 << COM20) | (1 << COM21) | (1 << CS20);
    	OCR2  = 0x91; // duty cycle for 36kHz
    	TIMSK |= (1 << TOIE2); // 36kHz counter for sleep
    und an der dazugehörigen ISR:
    Code:
    /* uses timer2 (36kHz for IR communication */
    SIGNAL (SIG_OVERFLOW2)
    {
    	TCNT2 += 0x25;
    	count36kHz ++;
    	if (!count36kHz) timebase ++;
    }
    Die Änderung ist seit ca. Version 2.3 Bestandteil der Lib:
    http://sourceforge.net/projects/asuro/files/

    Gruß

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

  3. #173
    Neuer Benutzer Öfters hier
    Registriert seit
    05.04.2010
    Beiträge
    7

    Nur kurzer Abstand für IR Hindernisserkennung

    Hallo radbruch,

    ich habe mir folgende LIB von sourceforge herunter gezogen: V280rc1 von 208-4-1 mit 3,9 MB) und damit selbst compiliert. Aber auch wenn ich wie oben von mir beschrieben die HEX Datei (.....\examples\IRCollisionTest\test.hex) aus dem mit dieser LIB mitglieferten Beispielen verwende ändert sich da nichts, diese HEX wurde doch mit dieser LIB erstellt oder ?


    Die Interrupt Subroutiene hab ich gefunden und ist mit dabei, aber beim TIMER2 wird da Folgendes verwendet:

    Code:
    #if defined(__AVR_ATmega168__)
      // fast PWM, set OC2A on compare match, clear OC2A at bottom, clk/1
      TCCR2A = _BV(WGM20) | _BV(WGM21) | _BV(COM2A0) | _BV(COM2A1);
      TCCR2B = _BV(CS20);
      // interrupt on timer overflow
      TIMSK2 |= _BV(TOIE2); 
    #else
      // fast PWM, set OC2A on compare match, clear OC2A at bottom, clk/1
      TCCR2 = _BV(WGM20) | _BV(WGM21) | _BV(COM20) | _BV(COM21) | _BV(CS20);
      // interrupt on timer overflow
      TIMSK |= _BV(TOIE2); 
    #endif
      // 36kHz carrier/timer
      OCR2  = 0x91;
    Ich habe keine Ahnung ob das bei dieser LIB mit den _BV Routinen so richtig ist !?!

    Wenn die Änderungen seit 23 permanent enthalten sind, müsste das doch auch noch bei der LIB Version 28 funtionieren dachte ich.

    Noch eine Idee ?

    WolliK

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

    Ich vermute _BV steht für das | (1<<xxx), also für das Setzen eines Bits. Die selben Steuerbits und auch das OCR2 = 0x91; sowie die identische ISR deuten darauf hin, dass V2.8 den Timer2 richtig parametriert. Ich habe es mit dieser aktuellen version der Lib noch nicht versucht weil ich die Lib nicht verwende.

    Kurze Abstände könnten auch auf eine Art IR-Kurzschluss hindeuten. Dabei "kriechen" die IR-Strahlen von der LED an oder unter Bauteilen zum Empfänger. Wie ist denn dein Aufbau?

    Gruß

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

  5. #175
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.653

    Re: Hindernisserkennung nur im 2-3 cm Bereich ?

    Hi WolliK,

    willkommen im Forum.
    Zitat Zitat von WolliK
    ... Umbauten für die Hindernisserkennung ... auf meinem Asuro ... nur ...Auflösung im 2-3 cm Bereich ...
    Also meine Abstandsmessung funktioniert mit nach vorn gerichteter IR-Schnittstelle, siehe (klick) hier für (m)eine Lösung, die Hardware sieht bei mir so aus:
    ................Bild hier  

    Nun wirst Du sicher einen eigenen Aufbau haben; WENN die Sensorik bei Deinem asuro nach vorn gerichtet ist (macht ja Sinn *ggg*), dann wird diese hex von Sternthaler funktionieren. Runterscrollen bis zum Download-Fenster wo steht "Da ist das CIR-Zeug mit Test-Programm ...". Dort gibts 1. eine funktionierende Hex-Datei und 2. die dazugehörigen Quellen. In der test.c steht u. a.
    Code:
    * Inhalt
    * ------
    *   Bedienung
    *     - Den Asuro mit den Tastern zur Wand stellen und einschalten.
    *     - Er fährt dann ca 1,5 Meter zurueck. In dieser Zeit werden Messwerte
    *       gesammelt.
    *     - Asuro zur Datenuebertragung in Sichtweite zum PC-Empfaenger stellen.
    *     - Taste druecken und loslassen
    *     - Die Messwerte werden uebertragen.
    *     Mit einem weiteren Tastendruck kann die Messung wiederholt werden.
    Und das funzt bestimmt - wenn die Hardware funzt! Diese Abstandsmessung verwendet eine gewisse Iteration der Messungen (ist im Quellcode beschrieben) und läuft bei mir von etwa 5 cm bis rund 1,5 m.

    Viel Erfolg
    Ciao sagt der JoeamBerg

  6. #176
    Neuer Benutzer Öfters hier
    Registriert seit
    05.04.2010
    Beiträge
    7
    Hallo radbruch,
    meine Anordnung sieht wie bei oberallgeier aus, LED nach vorne erichtet.
    Mit der mormalen test.hex kann ich über die Status LED zwischen 3-4 cm die Farbe von grün über orange auf rot ändern, indem ich mich mit der Hand dem Asuro nähere. Egal ob ich die LED in einnem LED Fassung oder einem Schrumpfschlauch oder ganz frei betreibe.

    Hallo oberallgeier,
    ich müsste zuerst die Reichweite erhöhen, bevor ich zwischen 1,5 m und 5 cm messen kann.

    Noch eine Idee zu meinem "IR-kurzsichtigen" Asuro ?

    Ich versuche jetzt noch mal auch die Rückwand der LED abzuschotten.


    WolliK

  7. #177
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.653
    Zitat Zitat von WolliK
    ... ich müsste zuerst die Reichweite erhöhen, bevor ich zwischen 1,5 m und 5 cm messen kann ...
    Diesen Einwand verstehe ich nicht. Die von mir genannten Messwerte hatte ich an meinem asuro gemessen mit der Standardbeschaltung. WENN Du also Deinen asuro mit den üblichen Vorschaltwiderständen (nach Handbuch bzw. Schaltplan) an LED SFH415 und Empfänger SFH5110 aufgebaut hast, dann sind Abstände zwischen 5 cm und 1,5 m messbar.
    Ciao sagt der JoeamBerg

  8. #178
    Neuer Benutzer Öfters hier
    Registriert seit
    05.04.2010
    Beiträge
    7
    Hallo oberallgeier,
    ich hatte die orginal Bestückung und hatte diese 3-4 cm. Danach wollte ich den Vorwiderstand zum IR Sensor von 470 Ohm auf 100 Ohm ändern, hatte aber nur einen 180 Ohm zur Hand, aber auch keine Verbesserung. Heute habe ich einmal ein Oszi drangehängt und sehe nur Nadelspitzen mit 1,5 Volt, wenn ich die Pulsbreite mittels Schalter verändere, sollte sich die Pulsbreite ändern, aber nur so lage einer der Taster gedrückt ist, ist ein symetrischen Rechteck zu sehen ( vermutlich weil wir dann die Werte per SerWrite senden). Nach dem Loslassen des Tasters sind wieder nur die Nadelimpulse zu sehen. Ich muss mir den Code nochmals ansehen, da scheinen die mit den Schalter eingestellten Pulsweiten nicht übernommen zu werden.

    Mein Asuro ist erst 3 Wochen alt, evtl. sind nun andere Komponenten als die SFH416 und SFH5100 eingebaut, das kann ich ja nicht überprüfen. Eure Asuros sind laut den Beiträgen ja etwas älter.



    WolliK

  9. #179
    Neuer Benutzer Öfters hier
    Registriert seit
    05.04.2010
    Beiträge
    7
    Hallo oberallgeier,
    ich habe jetzt einmal den Code aus dem EXAMPLES Ordner für IRKollision leicht verändert und benutze nun:
    Code:
    /*******************************************************************************
    *
    * Description: Asuro IR-Detektor Testprogramm
    *
    *****************************************************************************/
    /***************************************************************************
     *                                                                         *
     *   This program is free software; you can redistribute it and/or modify  *
     *   it under the terms of the GNU General Public License as published by  *
     *   the Free Software Foundation; either version 2 of the License, or     *
     *   any later version.                                                    *
     ***************************************************************************/
    #include "asuro.h"
    #include <stdlib.h>
    
    static unsigned char newocr2 = 0xFE;
    
    void InitIRDetect(void)
    {  
      UCSRB = 0;
      DDRD |= (1 << DDD1);	// Port D1 als Ausgang
      PORTD &= ~(1 << PD1);	// PD1 auf LOW
      OCR2 = newocr2;
    }
    
    
    int main(void)
    {
    
      unsigned char sw;
    
      Init();
      InitIRDetect();
      
      while (1)
      {
        UCSRB = 0;
        OCR2 = 0xFE;
    
        if (PIND & (1 << PD0))
          StatusLED(GREEN);
        else
          StatusLED(RED);
    
        sw = PollSwitch();
        if (sw & 0x01)
          newocr2  = 0xFE;	//Pulsbreite 1
        if (sw & 0x02)
          newocr2  = 0xFD;	//Pulsbreite 2
        if (sw & 0x04)
          newocr2  = 0xFB;	//Pulsbreite 4
        if (sw & 0x08)
          newocr2  = 0xF7;	//Pulsbreite 8
        if (sw & 0x10)
          newocr2  = 0xEF;	//Pulsbreite 16
        if (sw & 0x20)
          newocr2  = 0x90;	//Pulsbreite 110
    
        if (sw)
        {  
          OCR2 = 0x91;
          PrintInt(sw); 
          SerPrint(" ");
          PrintInt(newocr2); 
          SerPrint("\r\n");
          OCR2 = newocr2;
        }
    //   Msleep(100);
      }
      return 0;
    }
    Aber auch wenn ich nach dem SerPrint wieder die Pulsweite mittels OCR2 auf den neuen Wert, der laut Schalter nun verwendet werden soll, bekomme ich immer nur Nadelimpulst ?!? Ich hab auch schon versucht die Ausgabe an das Terminal auszukommentieren und in den Schalterabfragen direkt OCR2 zu setzen, aber immer nur Nadelimpulse.

    Hast Du evtl. dazu noch eine Idee ?

    Wolli

  10. #180
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    ...aber nur so lange einer der Taster gedrückt ist, ist ein symetrischen Rechteck zu sehen
    Ein symetrisches Rechteck sollte man am Oszi nur sehen, wenn Pause:Puls genau 50:50 ist, das ist eben bei OCR2 = 0x91; der Fall. Vielleicht hilft dir das bei der Analyse des Programms.

    Bei 36kHz dauert eine Periode 1/36000s. Die Anzahl der Countertakte einer Periode beträgt 8000kHz/36kHz=222. Bei OCR2 = 0x91 beträgt die Dauer einer Halbwelle genau 256-145=111 Countertakte. Bei OCR2=254 (0xFE) ist das Tastverhältniss 221:1 für Pause:Impuls, der Impuls dauert dann 1/36000/222! Wenn dein Oszi auf 36kHz triggert, können die "Peeks" des Impulsanteils schon mal mit 1,5V gemessen werden. Erhöhe mal die Zeitauflösung des Oszi.

    Ach, noch eine Anmerkung zum SerPrint(): Die 36kHz mit ihrem Pause-Impulsverhältniss wird im Hintergrund erzeugt und durch das Senden von Zeichen über die serielle Schnittstelle nicht beeinflußt.

    Noch ein schnelle Blick aufs Programm:

    {
    UCSRB = 0;
    OCR2 = 0xFE;

    damit überschreibst du OCR2 = newocr2; !

    Gruß

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

Seite 18 von 19 ErsteErste ... 816171819 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests