Ultraschallsensor SRF02 über RS232

Gast #1603827
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. :-(

1
#include <avr/io.h>
2
#include <stdio.h>
3

4
#define FOSC 16000000  //Quarzfrequenz
5
#define BAUD0 9600  //Baudrate
6
#define BAUD1 9600  //Baudrate
7
#define MYUBRR0 FOSC/16/BAUD0-1  //Werte für UBRR Register serial 0
8
#define MYUBRR1 FOSC/16/BAUD1-1  //Werte für UBRR Register serial 1
9

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

14

15
void USART0_Init( unsigned int ubrr )
16
{
17
  //Baudrate setzen
18
  UBRR0H = (unsigned char)(ubrr>>8);
19
  UBRR0L = (unsigned char)ubrr;
20

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

28
void USART1_Init( unsigned char ubrr ) 
29
{
30
  //Baudrate setzen
31
  UBRR1H = (unsigned char)(ubrr>>8);
32
  UBRR1L = (unsigned char)ubrr;
33

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

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

46
  //Daten in Puffer und senden
47
  UDR0 = data;
48
}
49

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

55
  //Daten in Puffer und senden
56
  UDR1 = data;
57
}
58

59
int main( void )
60
{
61
  USART0_Init ( MYUBRR0 );  //USART initialisieren
62
  USART1_Init ( MYUBRR1 );
63
  
64
  USART0_Transmit( '\f' );
65
  USART0_Transmit( 'S' );
66
  USART0_Transmit( 'e' );
67
  USART0_Transmit( 'n' );
68
  USART0_Transmit( 's' );
69
  USART0_Transmit( 'o' );
70
  USART0_Transmit( 'r' );
71
  USART0_Transmit( '\r' );
72
  USART0_Transmit( '\n' );
73

74
  USART1_Transmit( 0x00 );
75
  USART1_Transmit( 0x5D );
76
  USART0_Transmit( UDR1 );
77
  USART0_Transmit( UDR1 );
78
  USART0_Transmit( UDR1 );
79
  USART0_Transmit( UDR1 );
80
  USART0_Transmit( UDR1 );
81
  USART0_Transmit( UDR1 );
82
  USART0_Transmit( UDR1 );
83
  USART0_Transmit( UDR1 );
84

85
  USART1_Transmit( 0x00 );
86
  USART1_Transmit( 0x54 );
87
  if (!((UCSR1A & (1 << RXC)) == 0))
88
  {
89
    USART0_Transmit( UDR1 );
90
  }
91

92
  return 0;
93
}
Was willst du mit dieser Zeile Code erreichen:
1
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.