Hallo.
Wir sitzen den ganzen Tag schon daran und versuchen das Infrarotsignal
einer Fernbedienung (RC5) zu dekodieren und auf dem Display anzeigen zu
lassen. Klappt aber leider nicht so wie wir uns das vorstellen. Es
werden nur 1en ausgegeben.
1 | #include <avr/io.h>
|
2 | #include <stdlib.h>
|
3 | #include <avr/interrupt.h>
|
4 | #include <util/delay.h>
|
5 | #ifndef F_CPU
|
6 | #warning "bla"
|
7 | #define F_CPU 32000000UL
|
8 | #endif
|
9 | #include <stdint.h>
|
10 | #include <stdio.h>
|
11 | #include "lcd.h"
|
12 | #include "ultostr.h"
|
13 |
|
14 | int main(void) {
|
15 | DDRD = 0b00000000;
|
16 | PORTD = 0b00000001;
|
17 |
|
18 | lcd_init(LCD_DISP_ON);
|
19 |
|
20 | char ausgabe[7];
|
21 | int bla = 0;
|
22 | int intausgabe[14];
|
23 |
|
24 | while(bla == 0) { //wird nur einmal ausgeführt
|
25 | loop_until_bit_is_clear(PIND,PIND0); //warten bist signal kommt, invertiert durch den Empfänger, standartmäßig wird 1 zurückgegeben
|
26 |
|
27 | _delay_ms(1.3335); //warten bis wir uns bei 3/4 des Signals des ersten Bit befinden, hier lässt sich der Zustand ablesen
|
28 |
|
29 | for(int i=0; i < 14; i++) {
|
30 | if(PIND & (1<<PIND0)) {
|
31 | intausgabe[i] = 0; //0 bei gesetztem Bit speichern(invertiert)
|
32 |
|
33 | }
|
34 | else {
|
35 | intausgabe[i] = 1; //1 bei nicht gesetztem Bit speichern(invertiert)
|
36 |
|
37 | }
|
38 | _delay_ms(1.778); //wartet darauf dass 3/4 des nächste Bit vergangen sind
|
39 |
|
40 | }
|
41 |
|
42 | if(1 == 1) { //vergessen^^
|
43 |
|
44 | lcd_clrscr();
|
45 | lcd_puts("Empfangen:\n");
|
46 |
|
47 | for(int i=0; i < 14; i++) { //gibt bit für bit aus array auf display aus
|
48 | itoa(intausgabe[i], ausgabe, 2);
|
49 | lcd_puts(ausgabe);
|
50 | }
|
51 |
|
52 |
|
53 | bla++; //sorgt dafür dass die while-schleife kein 2. mal durchlaufen wird
|
54 | }
|
55 | }
|
56 |
|
57 | return(0);
|
58 | }
|
wie man vielleicht auch erkennen kann sind unsere c-kenntnisse nicht die
besten. wir haben aber versucht, alles so zu schreiben, dass wir meinen
es müsste funktionieren..auch wenn es das nicht tut :(
Könnt ihr uns vielleicht weiterhelfen?
Vielen Dank und schöne Grüße,
Johannes und Tobias