Hallo Ich habe auf eune Platine 8 TSOP1736 und 8 IR Leuchtdioden. Damit will ich damit eine Hindernis erkennung realisieren. So weit so gut. Leider ist es so das wenn ich die IR Dioden deaktivere der TSOP1736 trotzdem etwas detektiert. D.h wenn ich mit meiner Hand in die nähe des Sensors komme erkennt er das. Wieso das? Der benötigt doch ein IR Signal mit 36khz. Wenn ich die LEDs mit nem Atmega 16 toggle ist die Empfindlichkeit des TSOP1736 bei weitem nicht so gut. Hier der Code mit getoggelten LEDs und ohne ;-) Da ich den Atmega überlasten würde schalte ich immer nur 4 LEDs ein. PS: Einfluss von Sonnenlicht ist ausgeschlossen da ich im Schatten das getestet habe. MFG Christoph
Hast du die 8 Pull-Up Widerstände vergessen? Interne an PORTA sehe ich keine im Code und im Schaltplan auch nicht :-)
habe die Pull ups aktiviert. Das ändert jedoch gar nichts am Verhalten des TSOP1736
Das sollte eigentlich ein Zaunpfahl dafür sein, dass du den Schaltplan und/oder den Hardwareaufbau zeigst. Vereinfache für's Debuggen den Code radikal, bis die Hardware und das Basisprogramm fehlerfrei funktionieren. Dann erweitere den Code.
1 | #include <avr/io.h> |
2 | #define F_CPU 8000000
|
3 | #include <util/delay.h> |
4 | #include <mega/MEGA_TWI_SLAVE.h> |
5 | |
6 | void main (void) |
7 | {
|
8 | DDRA = 0x00; // 8 Eingänge: TSOP1736 |
9 | PORTA = 0xFF; // interne Pull-Up Widerstände EIN |
10 | _delay_ms(1000); |
11 | MK3_INIT_TWI_SLAVE(TWI_Slave1); |
12 | |
13 | while(1) |
14 | {
|
15 | MK3_TWIS_WR8_RAM(0x01, PINA); |
16 | }
|
17 | }
|
Damit umschiffst du den problematischen Durchfallcode in SIGNAL (TIMER0_COMP_vect) und alle IRQ Komplikationen. Wenn es dann immer noch hapert, wäre IMHO softwareseitig als nächstes die korrekte Benutzung der MEGA_TWI_SLAVE-Bibliothek zu prüfen. Die IR-LEDs könnte man die auch zum Debuggen verwenden. Hier nur mal eine LED um den Zustand von Pin PA0 zu spiegeln. Die LED kann man erkennen, wenn man mit einer Videokamera oder einer Digitalkamera draufschaut. Die IR-Sperrfilter dieser Kameras sind nicht perfekt. Alternativ kann man auch ein Multimeter benutzen und die Spannung an PA0 oder PB0 messen.
1 | #include <avr/io.h> |
2 | #define F_CPU 8000000
|
3 | #include <util/delay.h> |
4 | |
5 | void main (void) |
6 | {
|
7 | DDRA = 0x00; // 8 Eingänge: TSOP1736 |
8 | PORTA = 0xFF; // interne Pull-Up Widerstände EIN |
9 | |
10 | DDRD = 0xFF; // 8 Ausgänge: IR-LED |
11 | PORTA = 0x00; // IR-LEDs alle AUS (active high) |
12 | |
13 | while(1) |
14 | {
|
15 | if ( PINA & (1<<PA0) == 0 ) { // IR signal erkannt? |
16 | PORTB |= (1<<PB0); // LED an |
17 | } else { |
18 | PORTB &= ~(1<<PB0); // LED aus |
19 | }
|
20 | }
|
21 | }
|
1. Die TSOP sind zwar gut gefiltert aber auch nicht perfekt. Leuchtstoffröhren und co. können schon mal zu fehlerhaften Impulsen führen. Da du Immer nur einmal schaust ob der Pin 0 ist kann ein Störimpuls schon mal als positiv ansprechender Sensor detektiert werden d.h. du sollest dir ein Konzept überlegen das wenn Sensor x für y ms ein Signal detektiert es erst zu einem erkennen des Hindernisses genutzt wird. 2. SIGNAL (TIMER0_COMP_vect) das ist veraltet müsste ISR(TIMER0_COMP_vect) funktioniert zwar trotzdem aber sollte so nicht mehr gemacht werden. 3. Bei deinem switch-case in der "TIMER0_COMP_vect" fehlen auf jeden Fall die breaks sonst arbeitet er Case 1-8 jedes mal komplett ab. 4.
1 | PORTD^=(0b00001000); |
2 | PORTD&=~(1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3); |
Was soll den das bringen du Toggelst PD3 und eine Zeile weiter schaltest du ihn wieder aus? Mein Tipp baus erst mal mit einem Sensor und einer LED sauber auf und dann überleg dir wie du es auf 8 erweitern kannst. Gruß Matthias
hier der Schaltplan. Hatte nur das Eagle File vom TSOP1738. Daher der "falsche" Name im Schaltplan. Was soll den das bringen du Toggelst PD3 und eine Zeile weiter schaltest du ihn wieder aus? Ups das stimmt. ;-)
Quatsch geschrieben oben
1 | void main (void) |
2 | {
|
3 | DDRA = 0x00; // 8 Eingänge: TSOP1736 |
4 | PORTA = 0xFF; // interne Pull-Up Widerstände EIN |
5 | |
6 | DDRD = 0xFF; // 8 Ausgänge: IR-LED |
7 | PORTD = 0x00; // IR-LEDs alle AUS (active high) ### |
8 | |
9 | while(1) |
10 | {
|
11 | if ( PINA & (1<<PA0) == 0 ) { // IR signal erkannt? |
12 | PORTD |= (1<<PD0); // LED an ### |
13 | } else { |
14 | PORTD &= ~(1<<PD0); // LED aus ### |
15 | }
|
16 | }
|
17 | }
|
Die 1K Widerstände an den TSOPs in SENSOR_2.PNG sitzen bei dir in der VO Signalleitung; in dem Datenblatt aber in der Vs (+5V) Leitung. Der dazugehörende Kondensator fehlt ganz.
Krapao schrieb: > in dem Datenblatt aber in der Vs (+5V) Leitung. Der > dazugehörende Kondensator fehlt ganz. Jup, hatte mich auch gewundert. 100Ohm & 22µF habe ich immer drin. Keine Probleme. ( habe soviele 22µF-Kond.) @Christoph B: Wie sieht denn das Sendesignal aus? Datenblatt empfiehlt 10-70 Perioden des Trägers, gefolgt von mindestens 14 Perioden Stille. Mit ca. 50 Perioden Träger ein, gefolgt von 50 Perioden aus habe ich problemlos 3-4m direkt erreicht. Reflektiert weniger, mehr als 1.5m waren aber auch da möglich. Wichtig ist, daß man die richtige Mittenfrequenz und die richtigen LEDs verwendet (spektrales Maximum bei 950nm, also Datenblätter von den LEDs und dem TSOP vergleichen!). Gruß Jadeclaw.
Vor allem die Stille sollte er mal kontrollieren. Ohne die, wollen sie nicht. Sie sind einfach fürs TV gemacht!
Hallo Jadeclaw Dinosaur Ich habe kein spezielles Sende Signal. Die LEDs haben 950nm. Ich toggle einfach nur eine LED und werte zugleich den TSOP aus. Wenn er das IR detektiert dann soll der Atmega das mitbekommen. (sensor_0=1 sonst 0) Dann gehts weiter mit der nächsten LED und dem nächsten Sensor...
Abdul K. trifft den Nagel auf den Kopf. Bei Dauerlicht läuft die AGC vom TSOP zu und der Ausgang geht unmotiviert aus, wenn sich dein UFO bewegt kommt der Ausgang nochmal durch, um dann wieder auszugehen. Deshalb ist das Sendesignal zusätzlich zu den 36kHz periodisch ein- und auszuschalten. Empfängerseitig muß dann geprüft werden, ob genau dieses Signal empfangen wurde. Dieses Verhalten dient der Störunterdrückung, um selbst bei Störungen im 36kHz-Bereich (ESL) Fehlauslösungen zu verhindern. Richtig, ich habe eine solche ESL gehabt, eingeschaltet und der Fernseher reagierte nicht mehr. Gruß Jadeclaw.
Die Teile haben zwei AGCs. Eine regelt den Vorverstärker an der Fotodiode, der andere ist hinter dem Demodulator der 36KHz im DC-Bereich und regelt dort die Durchschnittsspannung, mit der verglichen wird um den Logikpegel des Ausgangs zu entscheiden. Leider ist es im Datenblatt nicht sonderlich ausführlich beschrieben. Aber es sind genaue Angaben über die notwendigen Tastverhältnisse enthalten! Leider so umständlich beschrieben, daß man sowas zu gerne überliest. Es würde ja Arbeit machen es zu verstehen ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.