Hallo Nachdem ich den SRF04 getötet habe habe ich mir einen SRF05 gekauft. Nun das Programm vom 2560 auf den Atmega 16 umgeschrieben. Leider will das Programm nicht. Warscheinlich ist der Fehler total primitive aber ich finde ihn nach 4h suchen bei 32Grad nicht. ;-)
1 | #define F_CPU 16000000UL
|
2 | #include <avr/interrupt.h> |
3 | #include <util/delay.h> |
4 | #include <avr/io.h> |
5 | |
6 | #define START_CLK 0x0A // Start clock with 1:8 prescaler CTC mode
|
7 | #define START_CLK_N 0x02 // Start clock running 1:8 prescaler in normal mode
|
8 | #define STOP_CLK 0x08 // Stop clock
|
9 | |
10 | void init_Ultraschall(void) |
11 | {
|
12 | DDRA |= (1<<PA7); // Port A Pin 7 als Ausgang. Rest als Eingang |
13 | TCCR1A = 0x00; // TIMER 1 in CTC mode |
14 | TCCR1B = 0x08; |
15 | startTimer_init_Ultraschall(0xFFF); |
16 | |
17 | }
|
18 | void startTimer_init_Ultraschall (unsigned int time) |
19 | {
|
20 | OCR1A = time; // Time set to count to |
21 | TIFR = 0x10; // Clear timer campare match flag |
22 | TCNT1 = 0x00; // Clear timer to zero |
23 | TCCR1B = START_CLK; // Start timer running 1:8 prescaler |
24 | }
|
25 | |
26 | void waitForTimer(void) |
27 | {
|
28 | while(!(TIFR&0x10)); // wait for timer to set compare match flag |
29 | TCCR1B = STOP_CLK; // Stop the timer |
30 | }
|
31 | unsigned int getEcho(void) |
32 | {
|
33 | unsigned int range; |
34 | while(!(PINA&(1<<PA6))); // Wait for echo pin to go high, this indicates the start of the incoming pulse |
35 | TCNT1 = 0x00; // Clear timer to zero |
36 | TCCR1B = START_CLK_N; // Start timer running 1:8 prescaler in normal mode |
37 | while((PINA&(1<<PA6))); // Wait for echo pin to go low signaling that the pulse has ended |
38 | TCCR1B = STOP_CLK; // Stop the timer and set back to CTC mode |
39 | range = TCNT1/58; // Read back value in the timer counter register, this number divided by 58 will give us the range in CM |
40 | |
41 | return(range); |
42 | }
|
43 | |
44 | void startRange(void) |
45 | {
|
46 | PORTA = ( 1<<PA7 ); // Trigger Pin auf High |
47 | _delay_us(30); |
48 | PORTA &= ~(1<<PA7 ); // Trigger Pin auf LOW |
49 | }
|