www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIR und R vs. Pullup


Autor: Thomas H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche momentan ein 5V TTL Signal eines PIR auf meinen uc zu 
bekommen. Ich habe den Vout direkt ohne zusätzlichen Pullup anden uc 
angeschlossen. Das DDR auf Eingang und die Internen Pullups aus.
Doch es tut sich nichts.

Wenn ich versuche zu programmieren spinnt das Board/AVR Studio und liest 
dauernd ne andere Signatur, sagt Fehler im Flash usw... Wenn ich alle 
Kabel entferne geht das programmieren wieder wie gewohnt. Also muß es am 
Programm liegen. Hab die Pullups schon ein und ausgeschaltet; hatte 
jedoch keine Veränderung.

Hier mal der Code:

#include <avr/io.h>

int main(void)
{
DDRD = 0x00;
PORTD= 0x00;

DDRC = 0xFF;
PORTC = 0xFF;

while(1)
{
 if (!(PIND & (1 << PD2)))
 {
 PORTD ^= (1<<PD2);
 }
}
}

Vielleicht kann ja mal einer drauf gucken und mir nen Tip geben.

Autor: Albrecht H. (alieninside)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas H. schrieb:
> Hallo,
>
> ich versuche momentan ein 5V TTL Signal eines PIR

So, welchen denn?

> auf meinen uc

Gott schütze die Erfindung des einzig wahren Einheitsmikrocontrollers!

> zu
> bekommen. Ich habe den Vout direkt ohne zusätzlichen Pullup anden uc
> angeschlossen. Das DDR auf Eingang und die Internen Pullups aus.
> Doch es tut sich nichts.
>
> Wenn ich versuche zu programmieren spinnt das Board/AVR Studio und liest
> dauernd ne andere Signatur, sagt Fehler im Flash usw... Wenn ich alle
> Kabel entferne geht das programmieren wieder wie gewohnt.

Eine Veränderung an der Hardware bringt Besserung, also muß es sich nach 
Scheibenweltlogik zwangsläufig um ein Softwareproblem handeln?

> Also muß es am
> Programm liegen. Hab die Pullups schon ein und ausgeschaltet; hatte
> jedoch keine Veränderung.
>
> Hier mal der Code:
>
> #include <avr/io.h>
>
> int main(void)
> {
> DDRD = 0x00;
> PORTD= 0x00;
>
> DDRC = 0xFF;
> PORTC = 0xFF;
>
> while(1)
> {
>  if (!(PIND & (1 << PD2)))
>  {
>  PORTD ^= (1<<PD2);
>  }
> }
> }
>
> Vielleicht kann ja mal einer drauf gucken und mir nen Tip geben.

Pin PD2 wird abgefragt und soll gleichzeitig was ausgeben? PORTC hat 
überhaupt keine Funktion?

Autor: Thomas H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum muß man denn immer gleich so auf jemandem rumhacken?! Es hat doch 
jeder mal klein angefangen -.- ...

Controller ist ein ATMEGA8.

Und beschaltet habe ich den 0/5V Ausgang des PIR mit einem Widerstand 
von 1kOhm auf PD2 gegen Kurzschluss. Die Kontroll LED liegt an PC1. Bei 
HIGH des PIR messe ich 4,94V und bei LOW 33mV. Pullups habe ich nun 
ausgemacht und den Code so korrigiert:

#include <avr/io.h>

int main(void)
{

DDRD = 0x00;
PORTD= 0x00;

DDRC = 0xFF;
PORTC = 0xFF;

while(1)
{

if (!(PIND & (1 << PD2)))
{
PORTC ^= (1<<PC1);
}
}

}

Leider blinkt die LED nach wie vor nicht.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich vermute, da soll eher so etwas wie "PORTC^=(1<<PC2)" stehen.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, zu spät. Bitte ignorieren.

Autor: MarioT (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist Dein PIR bei Low offen oder Steuert es Masse durch?

Autor: Thomas H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Er ist bei LOW auf Masse und bei HIGH auf 5V. Ich kann immer sehen wann 
er (ungefähr) schaltet, weil ich mein MM dran hab.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Und beschaltet habe ich den 0/5V Ausgang des PIR ....
So richtig gut zur Kommunikation zwischen Elektronikern hat sich ein 
Medium namens "Schaltplan" bewährt. Hast du so einen? Wie sieht der aus? 
Idealerweise incl. der Programmierschinttstelle, der Reset-Beschaltung, 
benamten Bauteilen (sonst muß man immer vom Widerstand "rechts oben" 
reden)...

Autor: Albrecht H. (alieninside)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wärs nicht trotzdem viel einfacher, wenn du kurz die Typenbezeichnung 
des "PIR" hinschreiben würdest, damit eventuell Interessierte mal einen 
Blick auf das entsprechende Datenblatt werfen können?

Und was das Programm angeht, blinkt die LED denn, wenn du abwechselnd 
mit einem Draht über einen 1K Widerstand mal GND und mal VCC auf PD2 
legst?

Autor: Thomas H. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Schaltplan siehe oben.

Das Datenblatt

http://www.roboter-teile.de/datasheets/KC7783R.pdf

Auch der Trick mit dem Kurzschließen über den Widerstand führt zu keinem 
Erfolg. Mein Schädel brummt und ich weiß nicht weiter.. hmpf.

Autor: Thomas H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat denn keiner ne Idee?

Autor: Albrecht H. (alieninside)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas H. schrieb:
> Schaltplan siehe oben.
>
> Das Datenblatt
>

Ja da wirds schon lichter, das ist kein nackter PIR-Sensor, (Wobei "PIR" 
ja auch sonst alles mögliche hätte sein können, gib den Begriff einfach 
mal in Google ein ...), sondern ein komplettes PIR-Modul.

Und dieses Modul liefert entweder 5V am Ausgang oder ... 
(Trommelwirbel), gar nichts (kein GND)!

D.h. der Eingangspin PD2 muß erst einmal mit einem 10K Widerstand direkt 
auf Masse gelegt werden und der Ausgang des PIR-Moduls wird dann 
entweder direkt oder wenn man will über einen Widerstand 330 bis 1000 
Ohm an PD2 angeschlossen.

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

> http://www.roboter-teile.de/datasheets/KC7783R.pdf
>
> Auch der Trick mit dem Kurzschließen über den Widerstand führt zu keinem
> Erfolg.

Da hast du ja hoffentlich vorher das PIR-Modul weggemacht, nicht dass es 
noch Schaden nimmt?

Trotzdem, das mit dem testweise VCC über 1K Widerstand kurz auf PD2 
gehen, muss natürlich erst mal, auch ganz ohne PIR-Modul, funktionieren 
sonst stimmt mit dem Programm irgendwas nicht.

> Mein Schädel brummt und ich weiß nicht weiter.. hmpf.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Hast du beachtet, das der Sensor eine Einschaltverzögerung von 24s hat?

MfG Spess

Autor: Thomas H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jetzt geht es!

Ich habe mal probiert mit 330 Ohm statt der 1k kurzzuschliessen. Und es 
geht! Beim PIR dasselbe.. Puh. Ich hab schon gedacht das Wochenende wird 
n Reinfall, aber nun :-) Danke an alle, die mitgedacht haben.

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas H. schrieb:
> while(1)
> {
>  if (!(PIND & (1 << PD2)))
>  {
>  PORTC ^= (1<<PC1);
>  }
> }

Ohne zu wissen, wie lange ein PIR denn den Eingang auf Low lässt: Du 
weißt, dass dein Code die LED nicht nur einmal toggelt, sondern ziemlich 
oft und ziemlich schnell nacheinander, geschätzt alle 10-15 Takte, 
solange PIND2 low ist? Daher ist es eher Zufall, in welchem Zustand sie 
nach dem Abschalten ist...

MfG, Heiko

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.