-         

Seite 1 von 6 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 55

Thema: srf04 mit pulse

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941

    srf04 mit pulse

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    hallo, ich möchte meinen srf04 ultra abfragen mit winavr , der geht mit pulse.
    bascom:
    Portc.6 = 0
    Pulseout Portc , 6 , 10
    Pulsein Ultrasonic_m , Pinc , 7 , 1

    am port c6 wird ein puls abgegeben an den ultra und in der variablen ultrasonic_m ein wert zurückgegeben ,der durch einen impuls vom srf04 an port c7 dann vom AVR erzeugt wird.

    wie kann ich das in winavr realisieren. danke.
    mfg pebisoft

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    61
    Beiträge
    531
    Hallo pebisoft,

    am einfachsten.

    port c7 kontinuierlich abfragen ob impuls gestartet ist
    denn ein timer starten mit 0
    port c7 kontinuierlich abfragen ob impuls gestopt ist
    timer auslesen

    die timer wert ist nach einen distanz um zu rechnen
    abhangig welcher timer-range gewahlt ist

    besser wahre es ein externen interrupt eingang als impuls eingang zu nutzen, einen impuls-start und einem impuls-stop generieren dann jeden ein interrupt womit die timer gestartet und gelesen wird
    dass kostet viel weniger belastung fur die procezzor.

    mahl so eine idee

    gruss

    Henk

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    das verstehe ich nicht so ganz. wer hat denn schon mit winavr ein srf04 zum laufen gebracht mit richtigen entfernungsdaten.
    mfg pebisoft

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    61
    Beiträge
    531
    Da hab ich falch gelesen

    ich dachte die abstand-puls vom srf04 wird an c7 angeboten...

    bitte um vezeihung...

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Ort
    Untersöchering(Bayern,Alpenvorland)
    Alter
    30
    Beiträge
    215
    Pepisoft ich hab grad bisschen Code geschrieben, müsste eigentlich funktionieren kanns aber nicht testen, hab kein srf04.
    Code:
    // Für ATMega8, benutzt wir Input Capture von Timer1, auf 8Mhz geändert
    #include <io.h>
    #include <avr/delay.h>
    #define US_PORT            PORTD
    #define US_PORT_RICHTUNG   DDRD
    #define US_PIN             PD7         // Der Pin kommt zum Trigger-Puls Eingang  
    
    unsigned char start_messung(void)
    {
        unsigned char wert,wert_in_cm;
    	US_PORT|=(1<<US_PIN);     // Trigger-Puls auf high  
    	
    	// PD6 ist Input Capture Pin beim ATMega8, hier kommt der Echo-Pulse Ausgang hin
    	TIMSK|= (1<<TICIE1);           // Input Capture Interrupt enable
    	TCCR1B|= (1<<CS11); // Prescaler 8, damit dauert ein Tackt  1 micro sekunden
    	
    	_delay_us(15);          // Laut Datenblatt Trigger-Puls min 10us auf high
    	US_PORT&=~(1<<US_PIN);   // Trigger-Puls Eingang wieder auf low
    	while ( !(TIFR & (1<<ICF1 )) ) ;  // Warten bis Echo-Puls Ausgang auf low --> Messung beendet
    	wert=172*ICR1/10000;   // wert ist nun in cm  
                    TIFR|=(1<<ICF1);  // ICF1 Bit wieder löschen durch schreiben einer logischen 1
    	TCCR1B&= ~(1<<CS12) & ~(1<<CS11) & ~(1<<CS10);     // Timer wieder aus 
    
       return wert;
    }
    
    
    void main (void)
    {
        unsigned char wert;
    	US_PORT_RICHTUNG|=(1<<US_PIN);         // US_PIN auf Ausgang
        wert=start_messung();
    }
    Gruß Muraad

    EDIT: Mir ist grad noch was aufgefallen. Wenn er garkein Echo empfängt also kein Objekt vor dem Sensor ist bleibt er durch die Zeile
    while ( !(TIFR & (1<<ICF1 )) ) ; // Warten bis Echo-Puls
    glaub ich in einer Endlosschleife. Besser währe es mit der Funktion nur die Messung zu starten, um auf das Input Capture Signal zu "warten" sollte man aber den Interrupt SIG_INPUT_CAPTURE1 verwenden.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    hallo, der code ist wunderbar. eine zeitmessung mit höchster präsenz. ja auch universal überall einsetzbar. würde ich mit in deiner wunderbaren sammlung reinnehmen. klasse. mir fehlt immer das wissen für die speziellen bezeichnungen der internen bit-setzung in timer, adc usw.
    ich habe jetzt schon viel gesammelt, gibt aber immer wieder probleme.
    siehe auch pwm. abr man muss sich zeit dafür nehmen.

    mfg pebisoft

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Ort
    Untersöchering(Bayern,Alpenvorland)
    Alter
    30
    Beiträge
    215
    Immer wenn ich Code schreib hab ich neben her die Seite
    www.mc-project.de und das avr-gcc tutorial von www.mikrocontroller.net offen und schau da auch immer erst wie ich die Bits setzten muss.
    Oder nehm deren Code und änder ihn bisschen ab.
    Und Pepisoft hast du den Code testen können und er hat funktioniert?
    Was passiert wenn kein Objekt vor dem Sensor ist, bleibt er in einer Endlosschleife und wartet auf ein Echo?
    Ich bin auch immer am überlegen ob ich mir srf04 oder srf08/10 mit I2C kauf, da der Preistunterschied schon übel ist.
    Gruß Muraad

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    hallo, der srf04 ist besser zu handhaben. wie du geschrieben hast, kann man als programmierer 100% einfluss nehmen mit einfachen timer-befehlen und die fehlersuche ist einfacher. ich habe auch einen srf08 i2c.
    den kann man nicht mehr dreinreden. am robby habe ich 3x srf04, zur zeit laufen die mit Bascom auch da habe ich gute variable möglichkeiten.
    den srf08 habe ich wieder abgebaut.
    habe dein programm noch nicht getestet.
    mfg pebisoft

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    nochmal zur endlos schleife:
    da der schall 58,066 usec pro cm braucht,
    und der srf04 max 300 cm messen kann, kann man ihn
    nach 17630 usec abschalten.
    abschaltung = 10us trigger + 200us interne taktung + (300 x 58,066us).
    man kann noch einen kleinen sicherheitszuschlag geben ohne das das ablaufprogramm
    des robby davon etwas merkt.
    mfg pebisoft

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    hallo wo ist der "Input Capture Pin" am AVR16.
    ist das pin pd2 und pd3 (int0 und int1).
    mfg pebisoft

Seite 1 von 6 123 ... LetzteLetzte

Berechtigungen

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