- LiFePO4 Speicher Test         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 12 von 12

Thema: Ultraschallsensor - Anfänger

  1. #11
    Erfahrener Benutzer Begeisterter Techniker Avatar von Chypsylon
    Registriert seit
    02.02.2011
    Ort
    Graz/Österreich
    Beiträge
    256
    Anzeige

    Praxistest und DIY Projekte
    Zitat Zitat von Codingboy Beitrag anzeigen
    Also zeitkritisch ist es vorerst nicht.
    Könnte aber irgendwann mal so eingesetzt werden. Wie soll das also mit TIMER gehen? Wäre nett wenn jemand 3 Zeilen Code schreibt oder link zu nem Beispiel.
    Danke schon mal!!!
    Bitte

    Auf drei Zeilen gehts sich zwar nicht ganz aus aber ich hab noch code für einen hc-sr04 (nachbau des SRF-04) herumfliegen gehabt. Das ganze ist für einen atmega32 mit 16MHz ausgelegt, wenn du einen andere Taktfrequenz hast musst du evt den Prescaler und die Rechnung anpassen...

    Code:
    /******
    01082011
    atmega32@16MHZ
    ******/
    
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <util/delay.h>
    #include <stdlib.h>
    
    #include <lcd.h> 
    #include <lib_main.h> 
    #include <taster.h>
    
    
    volatile uint16_t timestamp_last = 0;
    volatile uint16_t zeit = 0;
    
    void trig(void)
    {
      PORTC |= (1<<PC5);//Trig high
      _delay_us(12);
      PORTC &= ~(1<<PC5);//TRIG auf low
    }
    
    
    
    ISR(TIMER1_CAPT_vect)
    {
      //Wenn steigende Flanke
      if(TCCR1B & (1<<ICES1))
      {
        //Flankenerkennung auf fallend
        TCCR1B ^= (1<<ICES1);
        //aktuelen timer-wert speichern
        timestamp_last = ICR1;
      }
      //fallende Flanke
      else
      {
        //Flankenerkennung auf steigend
        TCCR1B ^= (1<<ICES1);
        //Laufzeit = aktueller timerwert - vorheriger timerwert
        zeit = ICR1 - timestamp_last;
      }
      
    }
    
    
    int main(void)
    {
      DDRC |= (1 << PC5);//Trig als Ausgang
      PORTC &= ~(1<<PC5);//TRIG auf low
      
      DDRD &= ~(1<<PD6);//Echo als Eingang
      PORTD &= ~(1<<PD6);//ECHO pullup AUS
    
      lcd_init(LCD_DISP_ON);
      
      lcd_puts("US Test");
      lcd_gotoxy(0,1);
      
      //Timer konfigurieren
      TCCR1A = 0;                      // normal mode, keine PWM Ausgänge
      //Noise Canceler aktivieren, Flankenerkennung auf steigende, Prescaler auf 64
      TCCR1B |= (1<<ICNC1) |       (1<<ICES1) |                     (1<<CS11) |(1<<CS10);
      
      //ICP Interrupt aktivieren
      TIMSK |= (1<<TICIE1);
      
      //Globale Interrupts aktivieren
      sei();
      while(1)
      {
        //Entfernung aus Laufzeit berechnen
        zeit = (zeit*4)/58;
        
        lcd_puts("                 ");
        lcd_gotoxy(0,1);
        lcd_put_uint16(zeit);
        lcd_gotoxy(0,1);
        //Messung auslösen
        trig();
        _delay_ms(50);
      }
       
       return 0;
    }
    Geändert von Chypsylon (12.04.2015 um 23:13 Uhr)

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    29.09.2011
    Beiträge
    21
    Ups, das sieht wirklich nach etwas mehr aus...
    Danke!

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Ultraschallsensor
    Von RoboNull im Forum Robby RP6
    Antworten: 64
    Letzter Beitrag: 08.07.2011, 12:22
  2. i2c mit ultraschallsensor
    Von tranh85bo im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 08.10.2009, 11:37
  3. Ultraschallsensor
    Von Laren im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 18.01.2008, 18:26
  4. CRP5: meine Erweiterung (vom Anfänger für Anfänger)
    Von loewenzahn im Forum Robby CCRP5
    Antworten: 11
    Letzter Beitrag: 21.03.2007, 19:37
  5. Anfänger: welches modul sollte man als anfänger nehmen???
    Von patti16 im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 04.01.2005, 09:44

Berechtigungen

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

12V Akku bauen