Forum: Mikrocontroller und Digitale Elektronik ATMega8a-PU ADC für PIR Sensor (ADC Einstellungen)


von Heinz M. (subi)


Lesenswert?

Hallo,
ich bin gerade über meiner Studienarbeit und soll aus einem PIR Sensor 
Signal eine Bewegung erkennen. Mein Problem ist, dass ich schon mal ein 
halbwegs vernünftiges Signal hatte. Jedoch war das Programm vom 
Unterricht und ich komme jetzt nicht mehr an die ADC Einstellungen.
Kurz: Ich weiß dass es geht, weiß aber nicht wie :-(


Verwendet wird:
ATMega8A-PU
LHI 878RF mit Minimalbeschaltung laut Datenblatt
SiSy C++ zur Programmierung


Was soll rauskommen:
Der Sensor liefert am Ausgang ca 0,82V bis 0,89V (Multimeter). Als 
Ausgangssignal kommt eine sehr kleine Spannungsspitze. Multimeter ist 
zur Erfassung zu langsam, Oszi zu schnell.

Zuvor hatte ich ein Signal von ca 2 bis ca 72 von 256(1Byte) bei starker 
Bewegung. Also ein Ausschlag von ca +-35. Signallänge ca 100-200ms.
Der Wert im Ruhezustand war ca 45-50. Nun ist es 100 bei 2,56V. 
Vermutung liegt nahe, dass es Vref(5V) war.


Das kommt raus:
Ein Signal welches nur um ca +-1 ausschlägt. Damit kann ich nichts 
erfassen. Je nach Vref ca 50 oder ca 100 als Mittelwert.


Bisherige Versuche:
ADC läuft auf 10Bit(Maximum) im FreeRunning Modus.
Abfrage per UART von 100ms auf 10ms (falls sich das Signal "versteckt") 
hat nichts gebracht.
ADMUX:
REFS habe ich die Referenzspannung auf 2,56V eingestellt, damit kam ich 
auf +-2. Die anderen Einstellungen brachten keinen Vorteil. 1,1V hat er 
laut Datenblatt nicht.
ADPS Einstellungen brachten eher eine Verschlechterung (115kHz, 230kHz, 
57,5kHz).
Eine Verstärkung wäre naheliegend. Ist jedoch laut Datenblatt nicht 
enthalten.
Mehr konnte ich aus dem Datenblatt und Suche zur ADC Signalverbesserung 
nicht entnehmen.

Frage am Rande:
https://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC
Was bedeutet bei der Kanalwahl(MUX) die 1,23V Vbg? Ist das mit den 0V 
zum Kalibrieren des ADC?

Sensor funktioniert, auf ein Feuerzeug reagiert er mit einem schön 
großen Ausschlag. Das ist aber nicht Sinn der Sache, den Bewegungsmelder 
mit einem Feuerzeug zu schalten ;-)
Am Aufbau wurde nichts verändert, nur am Programm. Irgendwo muss da noch 
was sein, womit man den Ausschlag des Signals verstärkken kann.

Danke für die Hilfe.

von chris (Gast)


Lesenswert?

Heinz M. schrieb:
> Was bedeutet bei der Kanalwahl(MUX) die 1,23V Vbg? Ist das mit den 0V
> zum Kalibrieren des ADC?

Du schaltest damit nur alle Kanäle quasi weg und hängst vor dem ADC, an 
dessen Eingang, eine Spannung von 1,23 Bandgap. Im net mal Bandgap 
eingeben was das ist.
(Bandabstandsreferenz) ;-)

Programm und Schaltplan fehlt.

von Heinz M. (subi)


Lesenswert?

Schaltung:
VCC des PIR mit 10Ohm gegen 5V vom Controller
GND mit GND
Signalleitung mit 47kOhm und 22µF gegen GND

Gemessen wir direkt an der Signalleitung gegen Masse. Also über die 
47kOhm und 22µF.
Es ist für die ganze Studienarbeit wichtig die Minimalbeschaltung 
beizubehalten. Wie gesagt hatte ich mit der Beschaltung bereits ein 
Signal.

Programm:
Es wurden die Bibliotheken von SiSy verwendet und die grafische 
Oberfläche. Hier mal als Pseudocode:
1
//onStart
2
ADMUX = (1<<REFS0)
3
ADMUX = (1<<REFS0)
4
5
//ADMUX = (1<<ADPS0) //Auskommentiert weil liefert nur noch Vollausschlag(256)
6
//ADMUX = (0<<ADPS1)
7
//ADMUX = (1<<ADPS2)
8
9
//onWork
10
uint8_t wert; //vordersten zwei Bits des ADC sind unwichtig, da die Spannung zu klein ist
11
wert=sensor2.getValue(); //Sensor2 ist ein fertiges Unterprogramm, was den adc abfragt -> kein Code von mir
12
ControlCenter.writeByte(wert); //ControlCenter ist die UART Schnittstelle

Mal sehen, ob ich in dem ADC Unterprogramm noch was finde.


Danke für die Erklärung von Vbg.

von Karl M. (Gast)


Lesenswert?

Heinz M.

C müsstest Du noch lernen und das Datenblatt des AVR µC ist deine Bibel 
!

Das ist unsinnig:
1
ADMUX = (1<<REFS0)
2
ADMUX = (1<<REFS0)

Es wird immer alle gelöscht.

von Heinz M. (subi)


Lesenswert?

Das Zweite muss natürlich REFS1 heißen. Im Programm steht es richtig.

von spess53 (Gast)


Lesenswert?

Hi

>Das Zweite muss natürlich REFS1 heißen. Im Programm steht es richtig.

Das ist auch nicht das, was du erreichen willst.

MfG Spess

von Heinz M. (subi)


Lesenswert?

Kannst du bitte etwas mehr schreiben. Die Aussage ist sehr mehrdeutig.

-Ist der Befehl falsch?
-Bringt er nichts in Hinblick auf das adc Signal?
-...

von Bastian W. (jackfrost)


Lesenswert?

Mit der zweiten Zeile löscht du wieder alle anderen Bits bis auf das 
REVS1. Du musst das zweite und jedes andere Bit das du zusätzlich setzen 
willst mit dem Register verodern.

Gruß JackFrost

: Bearbeitet durch User
von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Heinz M. schrieb:
> Das kommt raus:
> Ein Signal welches nur um ca +-1 ausschlägt. Damit kann ich nichts
> erfassen. Je nach Vref ca 50 oder ca 100 als Mittelwert.

So ein PIR hat einen verdammt kleinen Hub. Du brauchst einen 
Differenzverstärker, der aus der klitzekleinen Spannungsspitze ein 
Signal von mehreren hundert mV bei wenig Bewegung vor der aktiven Fläche 
erzeugt. Also Verstärkungs-Faktor 500-1000 wäre schon nicht schlecht. 
Für den Sensor selbst ist noch eine Fresnellinse zu empfehlen, die die 
IR-Strahlung aus dem geplanten Erfassungsbereich auf den Sensor im 
Brennpunkt bündelt.

von Heinz M. (subi)


Lesenswert?

Wie gesagt hatte ich bereits den Spannungshub gemessen. Wirklich klein, 
aber würde für den Zweck vollkommen ausreichen.

Das soll möglichst günstig und einfach sein. Daher wäre eine direkte 
Erfassung schöner.

von Heinz M. (subi)


Lesenswert?

Ich bin jetzt auf die Referenzspannung gegangen. Ich kann per Programm 
schon mal erfassen, dass sich meine Hand 3cm über dem Sensor befindet. 
Für Lehrzwecke im Notfall ausreichend. Schön ist es noch nicht.

Hat vielleicht noch jemand eine Idee, was da Programm/adc mäßig anders 
gewesen sein könnte?

@Knut: Fresnellinse habe ich. Dürfte aber nicht die Beste sein.

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.