Forum: Mikrocontroller und Digitale Elektronik SRF10 Problem


von Marc (Gast)


Lesenswert?

Hallo zusammen,
Ich habe ein Problem mit dem Auslesen meines SRF10.
Der SRF10 wird zwar angesprochen und reagiert auch (allerdings erst ab 
ca. 20 cm) aber das was er mir in HyperTerminal ausgibt sind nur Pfeile, 
Smilies usw..
Außerdem ist mein ack andauernd auf 0.
1
#include <inttypes.h>
2
#include <avr/interrupt.h>
3
#include <avr/sleep.h>
4
#include <avr/io.h>
5
#include <math.h>
6
#include "i2cmaster.h"
7
#include "twimaster.c"
8
#include <util/delay.h>
9
#include <avr/sfr_defs.h>
10
#define SRF 0xE0
11
#define BAUD 115200L
12
#define F_CPU 7372800UL
13
14
//unsigned int distance;
15
16
17
18
void initusart(void) 
19
{
20
unsigned char x; 
21
22
UBRRL = (F_CPU / (16L*BAUD)) -1; 
23
UCSRB |= (1<<TXEN) | (1<<RXEN); 
24
UCSRC |= (1<< URSEL) | (1<< UCSZ1) | (1<<UCSZ0); 
25
x = UDR;
26
}
27
28
void sendeusart(int x)
29
{
30
while (!(UCSRA & (1<<UDRE))); 
31
32
UDR = x;
33
}
34
35
36
int main(void) 
37
{ 
38
initusart();
39
40
unsigned char Lbyte,Hbyte;
41
42
while(1) 
43
{ 
44
i2c_init();
45
46
i2c_start(SRF); 
47
i2c_write(0x00); 
48
i2c_write(0x51); 
49
i2c_stop(); 
50
51
_delay_ms(65); 
52
53
i2c_start(SRF);  
54
i2c_write(0x02);
55
i2c_stop(); 
56
57
i2c_start_wait(SRF + 0x01); 
58
Hbyte=i2c_readAck(); 
59
Lbyte=i2c_readNak(); 
60
i2c_stop(); 
61
//distance=(Hbyte*256)+Lbyte;
62
//sendeusart(Hbyte);
63
sendeusart(Lbyte); 
64
}
65
}

Pullups hab ich dran...

Ich denk es ist ein doofer Anfängerfehler bei dem ihr mir bestimmt 
helfen könnt.


MfG

Marc

von spess53 (Gast)


Lesenswert?

Hi

>aber das was er mir in HyperTerminal ausgibt sind nur Pfeile,
>Smilies usw..

>sendeusart(Lbyte);

Und was meinst du, was in 'lbyte' stehen sollte?

MfG Spess

von Tombstone (Gast)


Lesenswert?

>#include "twimaster.c"
?????

von Marc (Gast)


Lesenswert?

Hi,
@Spess
ich dachte, dass ich mit
>distance=(Hbyte*256)+Lbyte;
und dann mit sendeusart(distance) den Abstand raus bekomm.


@Tombstone
hab den code größten Teils übernommen...

von spess53 (Gast)


Lesenswert?

Hi

>>ich dachte, dass ich mit
>>distance=(Hbyte*256)+Lbyte;
>und dann mit sendeusart(distance) den Abstand raus bekomm.

Aber das ist mit Sicherheit ein Hexwert, der im Terminalprogramm das 
entsprechende ASCII-Zeichen erzeugt. Pfeile,Smilies deuten auf Werte 
zwischen 0 und 31.

MfG Spess

von Marc (Gast)


Lesenswert?

Ist es denn richtig, dass mein Ack immer 0 ist?
Die Rechnung für distance ist dann ja unsinnig...

MfG

Marc

von Marc (Gast)


Lesenswert?

Habe meinen Fehler gefunden. Bzw. es war nie einer da...
Das tut weh.

Trotzdem danke

von Auch aus Fehlern anderer Lernwilliger (Gast)


Lesenswert?

Ja was war's denn nun?

Da liest man nun schon mit, und dann gibt's am Ende nichts, wo man auch 
was draus für sich mitnehmen kann?

Und denkt doch bitte auch mal an die, die den Thread später mal lesen. 
So ein offenes Ende ist doch irgendwie blöd.

von Marc (Gast)


Lesenswert?

Der SRF10 gibt den Abstand dezimal in cm aus und mein Hyper Terminal hat 
die dezimale Zahl in ein ASCII-Zeichen umgewandelt.

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.