PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SRF05 Fehler bei Abstandsmessung



Maurerson
07.02.2015, 12:09
Hallo ich bin gerade bei einem Projekt einen WLAN gesteuerten Roboter zu entwickeln. Das geht soweit ganz voran. Jetzt bin ich gerade dran einen Ultraschalsensor (SRF05) zu integrieren.
Der soll als Schutz dienen, das der Roboter nich gegen Wände färt. Nach mehreren entwürfe und Test hab ich bis jetzt noch nicht geschaft den SRF05 richtig anzubinden. Ich nutze das Atmel Evalutions-Board V2.0.1 mit addon Board.
Meine µController ist der AtMega32. Zum Debbugeen benutze ich das Atmel Studio 4.18 mit dem JTAG Adapter von OLMEX. Ich selbst bin noch eine Anfänger. Der Roboter selbst läuft mit dem RN-Control-Board und einem WLAN-Modul.
Mein bestreben ist erst ein kleines Test Programm zum laufen zu bringen und wenn das auf beide Umgebungen funktoniert wird das in meinen Roboter integriert.

So jetzt zu meinen Testprogramm:




#include <stdlib.h>
#include <stdio.h>
#include <avr/io.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <util/twi.h>
#include <stdint.h> //definiert den Datentyp uint8_t



volatile unsigned int ergebnis = 0, erg = 0, over = 0, i=0;



ISR(TIMER0_OVF_vect)
{
over++;
}



int main(void)
{

DDRD |= 0xFF; //LEDs zum Testen


TIMSK |= (1<<TOIE0); // Enable overflows interrupt
sei();



while (1)
{


if( i ==200) // nur zum Testen
{



DDRA |= (1<<PA2); // PC2 Ausgang --> beim Debbugen geht er 0-3 mal durch und danach bleibt das Programm hier hängen
PORTA |= (1<<PA2); // PA2 High
_delay_us(20); // warte 20 µSekunden
PORTA &= ~(1<<PA2); // PA2 Low
DDRA &= ~(1<<PA2); // PC2 Eingang



while(!(PINA & (1<<PA2))); //warte auf Echo Signal
TCCR0 = (1<<CS01); // starte timer Prescaler 8
TCNT0 = 0; // setze Timer1 auf 0



while((PINA & (1<<PA2))); //warte auf Echoende
ergebnis = TCNT0;
TCCR0 &= ~(1<<CS01); // Stoppe timer


erg = ((over * 256)+ ergebnis) / 58 ; //Berrechnung in cm


PORTD = erg ; // LED ausgabe


i= 0;
}

erg = 0;
ergebnis = 0;
over = 0;

i++;
_delay_ms(100); //warte 100ms
}
}







Das Messen funktioniert ganz gut und ich bekomme immer die richtige Entfernung angezeigt. Nur das macht er 0-3 mal und danach bleibt er in der ersten while schleife hängen.
Ich selbst hab 2 SRF05 und habt das gleiche Problem mit beiden. Ich Teste das Programm auch auf dem Atmel Evalutions-Board V2.0.1 und auf dem RN-Control-Board.
Bei beiden Umgebung bleibt es hängen.

Kann mir irgenwer helfen bei meinem Problem.

Vielen Dank für eure Hilfe und Unterstützung.

Maurerson