Forum: Mikrocontroller und Digitale Elektronik TSOP1736 verhält sich ungewöhnlich


von Christoph H. (christoph_b)


Angehängte Dateien:

Lesenswert?

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

von Krapao (Gast)


Lesenswert?

Hast du die 8 Pull-Up Widerstände vergessen? Interne an PORTA sehe ich 
keine im Code und im Schaltplan auch nicht :-)

von Christoph H. (christoph_b)


Lesenswert?

habe die Pull ups aktiviert. Das ändert jedoch gar nichts am Verhalten 
des TSOP1736

von Krapao (Gast)


Lesenswert?

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
}

von Stone (Gast)


Lesenswert?

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

von Christoph H. (christoph_b)


Angehängte Dateien:

Lesenswert?

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. ;-)

von Krapao (Gast)


Lesenswert?

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.

von Jadeclaw D. (jadeclaw)


Lesenswert?

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.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Vor allem die Stille sollte er mal kontrollieren. Ohne die, wollen sie 
nicht. Sie sind einfach fürs TV gemacht!

von Christoph H. (christoph_b)


Lesenswert?

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...

von Jadeclaw D. (jadeclaw)


Lesenswert?

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.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.