- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 6 von 6 ErsteErste ... 456
Ergebnis 51 bis 55 von 55

Thema: srf04 mit pulse

  1. #51
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Ort
    Untersöchering(Bayern,Alpenvorland)
    Alter
    37
    Beiträge
    215
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Pepisoft weisst du wie ich mich grad freu das der Code endlich Funktioniert \/
    Hier nochmal der Code für beide Funktionen (mit und ohne Input Capture), mit deinen for Warteschleifen und volatile für die Variablen.
    Code:
    #include <avr/io.h> 
    #include <avr/delay.h>        // F_CPU definiert als 8Mhz 
    #include <stdint.h> 
    
    // Das mit PD1 auf PORTD ist nur ein Beispiel, jeder beliebige Pin kann gewält werden 
    #define    MESS_PORT           PORTB 
    #define    MESS_PORT_RICHTUNG  DDRB 
    #define    MESS_PIN            PINB 
    #define    MESS_BIT            PB0               // Echo-Trigger Eingang  oder einfach Messeingang 
    
    #define US_PORT  PORTD 
    #define US_PORT_RICHTUNG   DDRD 
    #define US_PIN  PD7                   // Der Pin kommt zum Trigger-Puls Eingang 
    
    // Mit Input Capture Pin
    uint16_t start_messung_IC(void)          
    { 
       volatile uint16_t wert = 0,i,x,x1;         
        
       //Timer vorbereiten 
       TCCR1B  &=~(1<<ICES1);   // Fallende Flanke für Input Capture 
       TCNT1 = 0;          // Timer1 löschen 
        
       US_PORT|=(1<<US_PIN);      // Trigger-Puls auf high 
    
       for (i=0; i<x; i++)             // Ein Durchgang er Schleife dauert bei 8Mhz 0,75us
        asm volatile("nop"); 
    
       US_PORT &=~(1<<US_PIN);   // Trigger-Puls Eingang wieder auf low 
    
       for (i=0; i<x1; i++)          // Warten bis 40kHz Ultraschallburst zuende
        asm volatile("nop");
    
      TCCR1B  |= (1<<CS11);         // Prescaler 8, damit dauert ein Tackt  1 micro Sekunde, Timer startet 
    
       while ( !(TIFR & (1<<ICF1))); 
      // Warten bis Input Capture Flag gesetzt   ---> Echo-Eingang ist low 
    
       if(ICR1 < 20000)                      // gültiger Bereich  (max 18 ms + Reserve ) 
            wert= (unsigned int) (ICR1 / 58);    //umrechnen in cm    (laut Datenblatt ) 
    
          TCCR1B &= ~(1<<CS11);     // Timer wieder aus 
          TIFR   |= (1<<ICF1);     // ICF1 Bit wieder löschen durch schreiben einer logischen 1 
    
        return wert; 
    } 
    // Zeit/srf04 Messung, beliebige Pins können gewählt werden
    uint16_t start_messung(void) 
    { 
       volatile uint16_t wert,i,x,x1; 
       x=14; 
       x1=267; 
       wert=0; 
        
       US_PORT_RICHTUNG|=(1<<US_BIT);         // US_PIN auf Ausgang 
       US_PORT|=(1<<US_BIT);           // Trigger-Puls auf high  
       for (i=0; i<x; i++)             // Ein Durchgang er Schleife dauert bei 8Mhz 0,75us
        asm volatile("nop"); 
        US_PORT&=~(1<<US_BIT);           // Trigger-Puls Eingang wieder auf low    
       for (i=0; i<x1; i++) 
        asm volatile("nop"); 
       // Wenn keine srf04 Messung dann einfach ab hier 
       TCNT1=0;                   // Timerregister  auf 0 
       TCCR1B|= (1<<CS11);      // Timer starten 
       while (MESS_PIN & (1<<MESS_BIT))     // Warten bis Echo/Mess Eingang auf low 
       wert=TCNT1; 
       TCCR1B&= ~(1<<CS11);     // Timer wieder aus    
       return wert;                 // Muss bei srf04 Messung noch in cm umgerechnet werden
    }
    Wegen den eeproms , ich erkundige mich mal und mach vielleicht nen neuen Thread auf. Aber wenn die eeproms die Standard I2C ansteuerung haben ist das ziemlich einfach. Wäre auch ne gelegenheit meine I2C Funktionen (hauptsächlich aus dem Datenblatt) zu testen. Und vielleicht schaffen wirs ja echt noch im laufe der Zeit den kleine Bibliothek zu erstellen.
    Gruß Muraad

  2. #52
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Ort
    Untersöchering(Bayern,Alpenvorland)
    Alter
    37
    Beiträge
    215
    Also wegen den EEPROM´s. Ich war mal bei www.mc-project.de und ich will ja des Rad nicht neu erfinden. Deswegen hab ich als Anhang eine eeprom libary von der Seite. Die benutzung der Funktionen sieht ziemlich einfach aus. Sie übernehmen die komplette I2C ansteuerung für dich.
    Falls die Funktionen nicht funktionieren können wir ja weiter über sie reden.
    Gruß Muraad
    Angehängte Dateien Angehängte Dateien

  3. #53
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    hallo, noch mal wegen des srf04. die _delay-rotuine von winavr setzt den srf04 auch ausser gefecht. stört irgendwie den timerablauf.
    folgendes habe ich ausprobiert:
    volatile + _delay = keine funktion
    ohne volatile + meine for-schleife = keine funktion
    volatile + meine for-schleife = funktioniert.
    ich bin auch froh das ich das hinter mir habe. hoffentlich nutzen das andere auch.
    jetzt funz mein robby in winavr mit:
    - lcd-display
    - pwm für die motoren
    - rc5-empfang
    - srf04
    - uart-r232
    - adc für die sharpsensoren
    fehlt noch I2C für das compassmodul und die i2c-eeprom.

    mfg pebisoft

  4. #54
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Ort
    Untersöchering(Bayern,Alpenvorland)
    Alter
    37
    Beiträge
    215
    Pepisoft ich hab die beiden Funktionen (mit Input Capture und ohne) unter Download/Codeschnipsel zur verfügung gestellt. Autor sind wir beide.
    Gruß Muraad

  5. #55
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    20.06.2004
    Beiträge
    1.941
    hallo, ich habe eine i2c-eeprom-dateien-sammlung von einem herrn hagen im "rar-format". "http://www.mikrocontroller.net/forum/read-4-81256.html" gefunden.
    bei mir läuft sie auf dem AVR16 8mhz 100% mit einem i2c-eeprom 24c-256. man muss die taktrate umstellen, 2 fehler berichtigen, die herr hagen schildert und die lcd-datei von p.fleury für sich anpassen.
    bei mir läuft der i2c-eeprom 24c256 mit dem lcd-display und der ausgabe über uart. es kann beschrieben und gelesen werden ,24c16,24c32,24c64,24c128,24c256,24c512.
    der vorteil, es läuft ohne timer-interrupt nur im polling. eine sichere sache.
    ich freu mich richtig als anfänger, jetzt fehlt am robby nur noch die funktion des compassmodul mit i2c.
    jetzt läuft mit winavr-c an meinem küchenbrettroboter :
    -pwm (motorsteuerung für motoren rb35 mit l293d)
    -i2c-eeprom 24c256 beschreiben/lesen
    -rc5-code empfangen
    -uart senden/empfangen mit easy-funkmodl
    -adc (für messung mit den sharpsensoren)
    - srf04 ultra-modul
    mfg pebisoft

Seite 6 von 6 ErsteErste ... 456

Berechtigungen

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

12V Akku bauen