Forum: Mikrocontroller und Digitale Elektronik Ultraschallsensor SRF02 über RS232


von RANGER (Gast)


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. :-(

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
}

von RANGER (Gast)


Lesenswert?

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

von Michael W. (miwitt001)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.