Atmega 16 und HC-SR04

Gast #4534403
Lesenswert?
• ▲
▼
Hallo ich bin gerade dabei mein HC-SR04 an mein Atmega16 zu hängen und 
wollte um zu sehen ob er vernünftig läuft 2 LED's ansteuern, die auf das 
Echo Signal des HC-SR04 Reagieren, sprich bei LOW Pegel die eine LED an, 
bei High die andere, jedoch ist es bei mir so das nur die 1. LED dauer 
lechtet. kann mir vllt jemand Helfen.

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define F_CPU 1000000UL //1MHz CPU Takt
//Impuls Start: PD2 auf High
ISR  (TIMER1_COMPA_vect)
{
  PORTD|=(1<<PD2);
}

//Impuls Ende: PD2 auf Low
ISR(TIMER1_COMPB_vect)
{
  PORTD &= ~(1<<PD2);
}
int main(void)
{
    // Ein- und Ausgänge
    //Eingänge: Echo: PD3

    //Ausgänge:
    DDRD  |= (1<<PD2);          //Trigger
    DDRA  |= (1<<PA0)|(1<<PA1);      //Status LED1 :PA0, LED2 :PA1
  //Register Konfiguration
  TCCR1B  |= (1<<WGM12);          // CTC Modus aktiv
  TCCR1B  |= (1<<CS10);          //Prescaller 1:1 = 1000000 Hz
  TIMSK  |= (1<<OCIE1A) | (1<<OCIE1B);  // Timer Interrups zum Vgl.
  OCR1A = 20000;              // Periodendauer: 20 ms
  OCR1B = 10;              // Implusdauer: 10 us


  while (1)

    {
    if (PIND & (1<<PD3)) //Wenn Echo auf High
    {
      PORTA |= (1<<PA0);  //LED1 AN
      PORTA &= (1<<PA1);  //LED2 AUS
      _delay_ms (1);
    }

    if (!(PIND & (1<<PD3))) //Wenn Echo auf LOW
    {
      PORTA &= (1<<PA0);  //LED1 AUS
      PORTA |= (1<<PA1);  //LED2 AN
      _delay_ms(1);
    }
    }
}
Gast #4534473
Lesenswert?
• ▲
▼
2 Fehler sind mir gerade selber aufgefallen. Also LED's Blinken beim 
manuellen Wechsel von high und Low. Jetzt hab ich noch die Frage, ob die 
Ansteuerung den richtig ist oder ob da auch noch ein Fehler drin steckt.

Fehler waren Sei(); vergessen damit überhaupt das interrupt ausgeführt 
wird und statt ... &= (1.... Müsste es ...&= ~(1.... Heißen. Und low und 
und High sind In der Anzeige der LEDs vertauscht.
Gast #4534670
Lesenswert?
• ▲
▼
Also mittlerweile läuft der Code fehlerfrei die erste Diode leuchtet, 
sobald am Echo pin ein high Pegel anliegt also warte auf Echo Signal. 
Die 2. Led leuchtet nach Eintreffen des Echos kurz auf und zeigt an wenn 
der Echo auf Low geht. Die Frequenz der 1. LED ist fest die der 2. 
ändert sich mit der Entfernung des Objektes.
#4535167
Lesenswert?
• ▲
▼
Bastian W. schrieb:
> Wenn kein Echo kommt ist der Ausgang für 200 ms high.

Ist das nicht etwas viel? Das wären max. nur 5 Messungen pro Sekunde :(

In diversen Datenblättern/Anleitungen gibt es verschiedene Angaben, z.B. 
mind. 10µs lang mit High triggern, nach abgefallener Triggerflanke 
sendet der HC-SR04 einen 200µs langen Burst (8 Pulse, 40 kHz), danach 
geht der Echo-Pin auf High und bleibt es 38ms lang, falls kein Echo 
kommt (oder geht bei Echo wieder auf Low), empfohlene Gesamtdauer pro 
Meßzyklus ist 60ms (also knapp 17 Messungen pro Sekunde).

Vllt. ist hier noch etwas: HC-SR04 auswerten
Beitrag "Ultraschallsensor HC-SR04 auswerten"
Beitrag "Ultraschall Modul HCSR04, falsche Auswertung"
Fertiger Code in AVR-C (evtl. mit HD44780 Display):
Beitrag "HC SR-04 Ultraschallsensor (fertiger Code im Anhang)"

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.