- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 37

Thema: HC-SR04 & m32

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.05.2009
    Ort
    Berlin
    Beiträge
    450
    ich glaube mit zwei timern wird es nicht gehen...
    ja Du hast recht da meckert er

    Ich habe das jetzt mal so gemacht
    Code:
    #include "RP6ControlLib.h"                 
    
    
    /*****************************************************************************/
    
    uint16_t distanz_PC5 = 0;
    volatile uint16_t zeit_PC5 = 0;
    volatile uint16_t timestamp_last_PC5 = 0;
    
    uint16_t distanz_PC6 = 0;
    volatile uint16_t zeit_PC6 = 0;
    volatile uint16_t timestamp_last_PC6 = 0;
    
    /*****************************************************************************/
    
    
    ISR(TIMER1_CAPT_vect)
    {
    //Wenn steigende Flanke
        if(TCCR1B & (1<<ICES1))
        {
    //Flankenerkennung auf fallend
            TCCR1B ^= (1<<ICES1);
    //aktuelen timer-wert speichern
            timestamp_last_PC5 = ICR1;
            timestamp_last_PC6 = ICR1;
        }
    //fallende Flanke
        else
        {
    //Flankenerkennung auf steigend
            TCCR1B ^= (1<<ICES1);
    //Laufzeit = aktueller timerwert - vorheriger timerwert
            zeit_PC5 = ICR1 - timestamp_last_PC5;
            zeit_PC6 = ICR1 - timestamp_last_PC6;
        }
    
    }
    
    /*****************************************************************************/
    
    void HCSR04_vorn (void)
    {
      // Messung
      DDRC |= (1 << PC5);//Trig als Ausgang
      PORTC &= ~(1<<PC5);//TRIG auf low
      DDRD &= ~(1<<PD6);//Echo als Eingang
      PORTD &= ~(1<<PD6);//ECHO pullup AUS
    
    
    //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();
        distanz_PC5 = (zeit_PC5*4)/58;
        mSleep(100);
    // Trig    
      PORTC |= (1<<PC5);//Trig high
      _delay_us(12);
      PORTC &= ~(1<<PC5);//TRIG auf low
      _delay_ms(50);
      
    //Werte ausgeben
    
      writeString("zeit_PC5:      ");
      writeIntegerLength(zeit_PC5, DEC, 4);
      writeChar('\n');
      writeString("distanz_PC5:    ");
      writeIntegerLength(distanz_PC5, DEC, 4);
      writeChar('\n');
      mSleep(2000);    
        
    }
    /*****************************************************************************/
    void HCSR04_hinten (void)
    {
     
      // Messung
      DDRC |= (1 << PC6);//Trig als Ausgang
      PORTC &= ~(1<<PC6);//TRIG auf low
      DDRD &= ~(1<<PD6);//Echo als Eingang
      PORTD &= ~(1<<PD6);//ECHO pullup AUS
    
    
    //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();
        distanz_PC6 = (zeit_PC6*4)/58;
        mSleep(100);
    // Trig    
      PORTC |= (1<<PC6);//Trig high
      _delay_us(12);
      PORTC &= ~(1<<PC6);//TRIG auf low    
      _delay_ms(50);
      
     //Werte ausgeben
    
      writeString("zeit_PC6:      ");
      writeIntegerLength(zeit_PC6, DEC, 4);
      writeChar('\n');
      writeString("distanz_PC6:    ");
      writeIntegerLength(distanz_PC5, DEC, 4);
      writeChar('\n');
      mSleep(2000);     
    
    }
    
    
    /*****************************************************************************/
    void taster_M32(void)
    {
      uint8_t key = getPressedKeyNumber(); 
          
      if(key) 
        {
        
         while(getPressedKeyNumber());
         switch(key)
            {
             case 1: 
                   setLEDs(0b0001);
                HCSR04_vorn();
                break;
             case 2: 
                 setLEDs(0b0010);
                HCSR04_hinten();
                break;
                        
            }
        }
    }
    
    /*****************************************************************************/
    
    int main(void)
    {
        initRP6Control();    
        
        while(true) 
        {
        taster_M32();
        }
    
        return 0;
    }
    Versuchs mal so, testen kann ich ja leider noch nicht. Es ist fast der gleiche Code nur eben alles eingepackt in der Funktion.
    Bei den globalen Interrupts könnte man am ende noch ein cli() setzen um den Interrupt wieder zu stoppen und den Timer Interrupt könnte man auch stoppen. Aber mir fehlt da jede Menge Wissen um da hinter zu steigen wie das alles genau funktioniert. Was mich aber jetzt schon Nervt ist das ich 3 meiner Kostbaren Ports weg geben soll. Ab gesehen vom unschlagbaren Preis wäre die SRF?? Sensoren da besser. Ran an den Bus und fertig.
    Geändert von TrainMen (30.12.2014 um 02:30 Uhr) Grund: Schlaflos
    Gruß TrainMen

Ähnliche Themen

  1. SRF02 und HC-SR04
    Von inka im Forum Robby RP6
    Antworten: 9
    Letzter Beitrag: 09.10.2014, 20:20
  2. Ansteuerung Ultraschallsensor HC-SR04
    Von icebreaker im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 07.08.2013, 16:12
  3. Verkaufe Verkaufe RN-Control 1.4 Mega32 & 2x Servomotor & Entfernungssensor & PC Anschlusskabe
    Von Reiner47 im Forum Kaufen, Verkaufen, Tauschen, Suchen
    Antworten: 1
    Letzter Beitrag: 10.06.2013, 23:07
  4. Verkaufe [V] IC's & Diverse Platinen & SPS & Thin Clients & Display 6.4" Touch
    Von Noy im Forum Kaufen, Verkaufen, Tauschen, Suchen
    Antworten: 0
    Letzter Beitrag: 14.01.2012, 01:43
  5. Antworten: 5
    Letzter Beitrag: 22.11.2007, 10:17

Berechtigungen

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

12V Akku bauen