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