mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ultraschallsensor SRF02 über RS232


Autor: RANGER (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute, ich hab ein Problem :-) ich komme mit dem Ultraschallsensor 
SRF02 nicht klar. Dateblatt: 
http://www.robotikhardware.de/download/srf02doku.pdf

Ich hab den Sensor an meinen ATmega128 angeschlossen. An Pin D3 ist RX 
vom Sensor angeschlossen und an Pin D2 ist TX vom Sensor dran. Masse und 
Mode vom Sensor sind miteinander verbunden. Dazu verwende ich den 
folgenden Code.

Zunächst soll eine Fireware abfrage stattfinden, gefolgt von einer 
Messung. Jedoch passiert gar nix. Beim einschalten leuchtet der Sensor 
auf, mehr kommt nicht.

Der ATmega128 ist heile mit anderen UART Programmen läuft er wunderbar. 
An UART0 ist ein MAX232 angeschlossen so das über HyperTerminal Daten 
gesendet und empfangen werden können.

Meiner Meinung nach steuer ich den Sensor falsch an, aber ich steh auf 
dem Schlauch. Oder er ist kaputt. :-(

#include <avr/io.h>
#include <stdio.h>

#define FOSC 16000000  //Quarzfrequenz
#define BAUD0 9600  //Baudrate
#define BAUD1 9600  //Baudrate
#define MYUBRR0 FOSC/16/BAUD0-1  //Werte für UBRR Register serial 0
#define MYUBRR1 FOSC/16/BAUD1-1  //Werte für UBRR Register serial 1

#define BV(bit) (1<<(bit))
#define cbi(reg, bit) reg&=~(BV(bit))
#define sbi(reg, bit) reg|=(BV(bit))


void USART0_Init( unsigned int ubrr )
{
  //Baudrate setzen
  UBRR0H = (unsigned char)(ubrr>>8);
  UBRR0L = (unsigned char)ubrr;

  //Sender Empfänger aktivieren
  UCSR0B = (1<<RXEN0)|(1<<TXEN0);
  
  //Frame Format setzen: 8data, 1stop bit */  
  UCSR0C = (0<<USBS0)|(1<<UCSZ01)|(1<<UCSZ00);
}

void USART1_Init( unsigned char ubrr ) 
{
  //Baudrate setzen
  UBRR1H = (unsigned char)(ubrr>>8);
  UBRR1L = (unsigned char)ubrr;

  //Sender Empfänger aktivieren
  UCSR1B = (1<<RXEN1)|(1<<TXEN1);
  
  //Frame Format setzen: 8data, 2stop bit */  
  UCSR1C = (1<<USBS1)|(1<<UCSZ11)|(1<<UCSZ10);
}

void USART0_Transmit( unsigned char data )
{
  //warten bis Sendepuffer leer
  while ( !( UCSR0A & (1<<UDRE0)) );

  //Daten in Puffer und senden
  UDR0 = data;
}

void USART1_Transmit( unsigned char data )
{
  //warten bis Sendepuffer leer
  while ( !( UCSR1A & (1<<UDRE1)) );

  //Daten in Puffer und senden
  UDR1 = data;
}

int main( void )
{
  USART0_Init ( MYUBRR0 );  //USART initialisieren
  USART1_Init ( MYUBRR1 );
  
  USART0_Transmit( '\f' );
  USART0_Transmit( 'S' );
  USART0_Transmit( 'e' );
  USART0_Transmit( 'n' );
  USART0_Transmit( 's' );
  USART0_Transmit( 'o' );
  USART0_Transmit( 'r' );
  USART0_Transmit( '\r' );
  USART0_Transmit( '\n' );

  USART1_Transmit( 0x00 );
  USART1_Transmit( 0x5D );
  USART0_Transmit( UDR1 );
  USART0_Transmit( UDR1 );
  USART0_Transmit( UDR1 );
  USART0_Transmit( UDR1 );
  USART0_Transmit( UDR1 );
  USART0_Transmit( UDR1 );
  USART0_Transmit( UDR1 );
  USART0_Transmit( UDR1 );

  USART1_Transmit( 0x00 );
  USART1_Transmit( 0x54 );
  if (!((UCSR1A & (1 << RXC)) == 0))
  {
    USART0_Transmit( UDR1 );
  }

  return 0;
}

Autor: RANGER (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
HILFE!!!!!
ist der Ultraschallsensor SRF02 nicht bekannt? Hat mit diesem Sensor 
noch niemand gearbeitet?

Autor: Michael Wittmann (miwitt001)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was willst du mit dieser Zeile Code erreichen:
USART0_Transmit( UDR1 );

Ich bezweifle nämlich, dass dies den gewünschten Effekt hat.
Außerdem fehlt in deiner Main-Funktion eine Endlosschleife, d.h. wenn 
der Controller einmal mit Main durch ist, macht er einen Reset und fängt 
von vorne an.

mfg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.