- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 28

Thema: ASURO mit Ultraschallsensor (SRF05) for Dummies

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    05.08.2009
    Beiträge
    32
    Anzeige

    E-Bike
    Mmh...also bei mir funktioniert es immer noch nicht... es gibt immernoch sehr ungenaue Daten, obwohl ich nun beliebige Unterbrechungen von 1 bis 70 uM gemacht habe.

    Kannst du mir bitte genau sagen, was du mit was verbunden hast, damit dein gepostet Programm bei mir laeuft - ich benutze einen normal aufgebauten ASURO ohne LCD display ? Ich weiss, es wir oben schon erklaert, aber irgendwie hab' ich das Gefuehl, dass ich etwas falsch mache. Also ich hab' es so angeschlossen:

    5v supply - out+
    0 Ground - out-
    der 'Mittlere',also trigger input,output - CON1
    No connection - PD6

    mit folgendem programm
    Code:
    #include "asuro.h"
    
    
    #ifndef F_CPU
    /* wenn F_CPU nicht bereits vorher definiert (z.B. durch
       Übergabe als Parameter zum Compiler innerhalb des Makefiles) */
    #define F_CPU 8000000UL     /* Quarz mit 8 Mhz */
    #endif 
    #include <util/delay.h>
    
    
    // Funktion: Abstand per Ultraschall messen über SRF05
    // Parameter:
    //   sensor: PIN an dem der Sensor hängt
    // Rückgabewert: gemessener Abstand in cm
    
    
    uint16_t getAbstand(uint8_t sensor) {
      uint8_t tmp_sreg;
      tmp_sreg = SREG;
      cli();                         // interrupts deaktivieren
      uint16_t abstand = 0;          // abstand in cm
      
       
      DDRD |= (1<<sensor);          // sensor Pin auf Ausgang
      PORTD |= (1<<sensor);         // sensor Pin auf high setzen
      
      _delay_us(20);                // 20 mikrosek. warten
      
      PORTD &= ~(1<<sensor);        // sensor Pin auf low setzen (ist noch als Ausgang konfiguriert)
    
      
      DDRD &= ~(1<<sensor);         // sensor Pin auf Eingang setzen
      while(!(PIND & (1<<sensor))); // auf Sensorantwort warten (Eingang wird high)
      
      while(PIND & (1<<sensor))     // warten bis Signalende bis Eingang low wird
      {                  
        _delay_us(58);              // 58 mikrosec. warten entspricht 1cm entfernung
        abstand++;                  // Anzahl der cm erhöhen
      }
      
      SREG=tmp_sreg;                // Register zurücksetzen
         
      return abstand;               // gemessenen Abstand zurückgeben
    } 
    
    uint16_t avrAbstand(uint8_t sensor) {
      uint8_t k=0;
      uint16_t average=0;
      for (k=0; k<50; k++)
        average=average+getAbstand(sensor);
      return (average/50);
    }
    
    int main(void)
    {
      Init();
      int i=0;
      int j,k;
      BackLED(ON,ON);
      char S[100];
      while(1)    
        {
        uint16_t abstand = avrAbstand(PD6);
        sprintf(S,"\n\rA:%4d\n\r",abstand);
        SerWrite(S,strlen(S));
        
      }
    }
    Also, dieses Programm funktioniert bei mir. Ich weiss, eigentlich sollte bei "No connection" auch nichts verbunden sein, aber bei mir gibt es nur mit dieser Einsteckvariante Messungen aus.

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.08.2007
    Ort
    Delmenhorst
    Alter
    39
    Beiträge
    731
    Bist du sicher das du ihn im Betriebsmodus 2 verwendest?!

    Also, 1. Pin an 5V, 2. Pin frei lassen, den mittleren Pin an PD6, 4. und 5. Pin an Masse! So und nicht anders!

    Deine Funktion "avrAbstand" versteh ich nicht, ist doch total überflüssig?!

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    05.08.2009
    Beiträge
    32
    Was muss man machen, dass er im Betriebsmodus 2 ist?

    Ok, ich werd's mal so wie bei dir versuchen. Laeuft dein gepostetes Programm fuer den PD6 als Ansteuerpin? Und muesste das rote LED am SRF05 leuchten?

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.08.2007
    Ort
    Delmenhorst
    Alter
    39
    Beiträge
    731
    Um ihn in den BEtriebsmodus 2 zu bekommen musst du Pin4 mit GND verbinden.
    Liess dir mal die Anleitung dazu durch!

    Hier mal mein Code, bedenke aber das die Pausenzeiten "passend gemacht" sind.
    Läuft dein Asuro wirklich auf 8MHz?

    Code:
    uint16_t getAbstand(uint8_t sensor)
    {
      uint16_t abstand = 0;          // abstand in cm
        
      DDRC |= (1<<sensor);          // sensor Pin auf Ausgang
      PORTC |= (1<<sensor);         // sensor Pin auf high setzen
      
      _delay_us(4);                // 20 mikrosek. warten
      
      PORTC &= ~(1<<sensor);        // sensor Pin auf low setzen (ist noch als Ausgang konfiguriert)
      DDRC &= ~(1<<sensor);         // sensor Pin auf Eingang setzen
      
      while(!(PINC & (1<<sensor))); // auf Sensorantwort warten (Eingang wird high)
      
      while(PINC & (1<<sensor))     // warten bis Signalende bis Eingang low wird
      {                  
        _delay_us(1);              // 58 mikrosec. warten entspricht 1cm entfernung
        abstand++;                  // Anzahl der cm erhöhen
      }
         
      return abstand;               // gemessenen Abstand zurückgeben
    } 
    
    /////////////////////////////////////////////////////////////////////////////
    // Main-Funktion
    /////////////////////////////////////////////////////////////////////////////
    main()
    {
    	uint16_t x = 0;
    	char ausgabe[10]="\0";
    	
     	lcdInit();
     	lcdString("X ");
     	x = getAbstand(5);
     	itoa((x/22), ausgabe, 10);
     	
     	lcdString(ausgabe);
     	lcdString("cm");
     	
     	while (true)  	// Mainloop-Begin
     	{
     	
    
     	} // Mainloop-Ende

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    05.08.2009
    Beiträge
    32
    Mmh... Also, um sicher zu gehen:

    Ich stecke alles so ein, wie beschrieben, Pin 1,3 und 5. Dann kompiliere ich das Programm, flashe es auf den ASURO ... und nichts laueft... das habe ich nun ein paar Mal wiederholt... immer das gleiche Resultat.... mache ich etwas falsch?

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    05.08.2009
    Beiträge
    32
    Wo gibt's die Anleitung? Ich habe schon ein paar SRF05 datasheets angeschaut... da wird aber nicht so viel dazu erklaert... alles recht kurz.

  7. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.08.2007
    Ort
    Delmenhorst
    Alter
    39
    Beiträge
    731

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    05.08.2009
    Beiträge
    32
    Und wo ist der GND konkret am ASURO? (Sorry dass ich so bloede Fragen stelle, bin noch recht ein Anfaenger)

  9. #19
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    14.08.2007
    Ort
    Delmenhorst
    Alter
    39
    Beiträge
    731
    GND ist Masse, bzw. 0V! Und da muss Pin 4 mit ran.

  10. #20
    Benutzer Stammmitglied
    Registriert seit
    05.08.2009
    Beiträge
    32
    jipppiiii
    es laeuft -> juipiduippiiii
    Zwar nicht so genau... aber es tut sich was! ich glaub's fast nicht ... nach zwei Monaten Hardware check, endlich!

    Ich hab' vergessen (bzw. nirgends gelesen) dass man den 4.Pin mit dem 5.Pin am SRF05 kurzschliessen muss...

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress