Forum: Mikrocontroller und Digitale Elektronik Arduino IDE (Atmega 328P Standalone) + Bewegungsmelder und Lichtsensor


von Paul (Gast)


Lesenswert?

Hallo zusammen,

ich habe hier einen Schaltung und nun verwende ich zum ersten Mal den 
Sleep Mode um ein wenig Strom zu sparen im späteren Betrieb.
Letzendlich soll bei Bewegung ein Sensor ausgelesen werden und der 
gemessene Wert übertragen werden.

Bewegungsmelder: AMS312 Mini Modul.
+ an 5V
- an Masse
OUT an PS2 (INT0)

Lichtsensor: ALS-PT19 Modul mit 10k Widerstand auf dem Board:
+ an PD4 Atmega
- an Masse
Out an A4 des Atmega

Der ALSPT19 soll durch Pin D4 gespiesen werden, sobald der Atmega 
"aufwacht" und anschliessend soll dann der Wert ausgelesen werden, bis 
ca. 15 Sekunden keine Bewegung mehr erkannt wird.

Ich versuche nun das über die Serielle Schnittstelle zu testen, aber es 
wird nach dem Aufwachen immer nur 1x der Lichtsensor ausgelesen, danach 
ist der Wert immer 0. Erst wenn der Atmega wieder schlafen geht und neu 
aufwacht wird 1x der Wert gemessen.
Am + des ALS liegen die 5V wie gewünscht an, aber den Wert bekomme ich 
einfach nicht mehr als 1x eingelesen.

Vielleicht bin ich dafür einfach zu blöd ;-)

PS. Die X_1 bis X_10 in der else Schlaufe waren für mich nur weil ich 
wissen wollte wo genau der Microcontroller sich schlafen legt ;-)
1
#include <avr/sleep.h>
2
#include <avr/power.h>
3
4
const byte ALS_PIN = A4;
5
const byte ALS_POWER_PIN = 4;
6
7
int WakeUpTrue = 0;
8
unsigned long WakeUpTime = 0;
9
10
unsigned long TimeSinceLastPirTracking = 0;
11
12
void ActivateIOs()
13
{
14
  Serial.println("WAKE-Activate IOs");
15
  pinMode (ALS_PIN,INPUT);
16
  pinMode(ALS_POWER_PIN, OUTPUT);
17
  digitalWrite(ALS_POWER_PIN, HIGH);
18
}
19
void DeactivateIOs()
20
{
21
  digitalWrite(ALS_POWER_PIN, LOW);
22
  pinMode(ALS_POWER_PIN, INPUT);
23
  digitalWrite(ALS_POWER_PIN, LOW);
24
}
25
26
void wake()
27
{
28
  sleep_disable(); // cancel sleep as a precaution
29
  Serial.println("-------WAKE UP-------");
30
  detachInterrupt (0); // precautionary while we do other stuff
31
  power_all_enable();
32
  ADCSRA |= (1 << ADEN);
33
  WakeUpTrue = 1;
34
  Serial.println("-------WakeUpTrue TRUE-------");
35
  TimeSinceLastPirTracking = 0;
36
  WakeUpTime = millis();
37
  ActivateIOs();
38
}  // end of wake
39
40
void setup() 
41
  {
42
    Serial.begin(9600);
43
    Serial.println("Start");
44
    delay(100);
45
  }  // end of setup
46
47
void loop() 
48
{
49
    if (WakeUpTrue == 1) 
50
        {
51
        int value_ALS_Sensor = analogRead(ALS_PIN);
52
        Serial.print("ALS Value: ");
53
        Serial.println(value_ALS_Sensor);
54
        delay(500);
55
        if (TimeSinceLastPirTracking <= 15000)
56
            {
57
            if (digitalRead(2) == HIGH)
58
                {
59
                TimeSinceLastPirTracking = 0;
60
                WakeUpTime = millis();
61
                }
62
            else
63
                {
64
                TimeSinceLastPirTracking = millis() - WakeUpTime;
65
                }
66
            Serial.print("ON - Time without movement: ");
67
            Serial.println(TimeSinceLastPirTracking);
68
            }
69
        else
70
            { 
71
            WakeUpTrue = 0;
72
            DeactivateIOs();
73
            ADCSRA = 0;  // disable ADC
74
            Serial.println("Go Sleeping ..."   );
75
            }
76
        }
77
  
78
  else {
79
        Serial.println("YX_1");
80
        ADCSRA = 0;  // disable ADC
81
        Serial.println("X_2");
82
        set_sleep_mode (SLEEP_MODE_PWR_DOWN); 
83
        Serial.println("X_3"); 
84
        sleep_enable();
85
        Serial.println("X_4");
86
        noInterrupts (); // Do not interrupt before we go to sleep, or the ISR will detach interrupts and we won't wake.
87
        Serial.println("X_5");
88
        attachInterrupt (0, wake, RISING); // will be called when pin D2 goes high  
89
        Serial.println("X_6");
90
        EIFR = bit (INTF0);  // clear flag for interrupt 0
91
        Serial.println("X_7");
92
        MCUCR = bit (BODS) | bit (BODSE); //turn off brown-out enable in software BODS must be set to one and BODSE must be set to zero within four clock cycles
93
        Serial.println("X_8");
94
        MCUCR = bit (BODS);  // The BODS bit is automatically cleared after three clock cycles
95
        Serial.println("X_9");
96
        interrupts ();  // one cycle
97
        Serial.println("X_10");
98
        sleep_cpu ();   // one cycle
99
        Serial.println("EEE");
100
        sleep_disable ();
101
        ActivateIOs();
102
        }
103
104
105
}

von Stefan F. (Gast)


Lesenswert?

Wie sehen deine Debug Meldungen aus?

von Stefan F. (Gast)


Lesenswert?

Der Fehler könnte damit zusammen hängen, dass du vor dem Schalfen gehen 
alle Bits in ADCSRA löscht, und nachher nur ADEN wieder setzt:

> ADCSRA = 0;  // disable ADC
> ADCSRA |= (1 << ADEN);

von Georg M. (g_m)


Angehängte Dateien:

Lesenswert?


von Paul (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Wie sehen deine Debug Meldungen aus?
1
Start<\r><\n>
2
Y<\0>?<21>j<\n>X_2<\r><\n>
3
X_3<\r><\n>
4
X_4<\r><\n>
5
X_5<\r><\n>
6
X_6<\r><\n>
7
X_7<\r><\n>
8
X_8<\r><\n>
9
X_9<\r><\n>
10
X_10<\r><\n>
11
-------WAKE UP-------<\r><\n>
12
-------WakeUpTrue TRUE-------<\r><\n>
13
WAKE-Activate IOs<\r><\n>
14
EEE<\r><\n>
15
WAKE-Activate IOs<\r><\n>
16
ALS Value: 71<\r><\n>
17
ON - Time without movement: 0ALS Value: 0<\r><\n>
18
ON - Time without movement: 0ALS Value: 0<\r><\n>
19
ON - Time without movement: 0ALS Value: 0<\r><\n>
20
ON - Time without movement: 0ALS Value: 0<\r><\n>
21
ON - Time without movement: 0ALS Value: 0<\r><\n>
22
ON - Time without movement: 0ALS Value: 0<\r><\n>
23
ON - Time without movement: 0ALS Value: 0<\r><\n>
24
ON - Time without movement: 0ALS Value: 0<\r><\n>
25
ON - Time without movement: 0ALS Value: 0<\r><\n>
26
ON - Time without movement: 0ALS Value: 0<\r><\n>
27
ON - Time without movement: 0ALS Value: 0<\r><\n>
28
ON - Time without movement: 0ALS Value: 0<\r><\n>
29
ON - Time without movement: 0ALS Value: 0<\r><\n>
30
ON - Time without movement: 0ALS Value: 0<\r><\n>
31
ON - Time without movement: 0ALS Value: 0<\r><\n>
32
ON - Time without movement: 0ALS Value: 0<\r><\n>
33
ON - Time without movement: 0ALS Value: 0<\r><\n>
34
ON - Time without movement: 0ALS Value: 0<\r><\n>
35
ON - Time without movement: 0ALS Value: 0<\r><\n>
36
ON - Time without movement: 502ALS Value: 0<\r><\n>
37
ON - Time without movement: 1003ALS Value: 0<\r><\n>
38
ON - Time without movement: 1505ALS Value: 0<\r><\n>
39
ON - Time without movement: 2005ALS Value: 0<\r><\n>
40
ON - Time without movement: 2507ALS Value: 0<\r><\n>
41
ON - Time without movement: 3008ALS Value: 0<\r><\n>
42
ON - Time without movement: 3510ALS Value: 0<\r><\n>
43
ON - Time without movement: 4010ALS Value: 0<\r><\n>
44
ON - Time without movement: 4512ALS Value: 0<\r><\n>
45
ON - Time without movement: 0ALS Value: 0<\r><\n>
46
ON - Time without movement: 0ALS Value: 0<\r><\n>
47
ON - Time without movement: 0ALS Value: 0<\r><\n>
48
ON - Time without movement: 0ALS Value: 0<\r><\n>
49
ON - Time without movement: 0ALS Value: 0<\r><\n>
50
ON - Time without movement: 0ALS Value: 0<\r><\n>
51
ON - Time without movement: 0ALS Value: 0<\r><\n>
52
ON - Time without movement: 0ALS Value: 0<\r><\n>
53
ON - Time without movement: 0ALS Value: 0<\r><\n>
54
ON - Time without movement: 0ALS Value: 0<\r><\n>
55
ON - Time without movement: 0ALS Value: 0<\r><\n>
56
ON - Time without movement: 0ALS Value: 0<\r><\n>
57
ON - Time without movement: 0ALS Value: 0<\r><\n>
58
ON - Time without movement: 500ALS Value: 0<\r><\n>
59
ON - Time without movement: 1002ALS Value: 0<\r><\n>
60
ON - Time without movement: 1504ALS Value: 0<\r><\n>
61
ON - Time without movement: 2005ALS Value: 0<\r><\n>
62
ON - Time without movement: 2505ALS Value: 0<\r><\n>
63
ON - Time without movement: 3007ALS Value: 0<\r><\n>
64
ON - Time without movement: 3509ALS Value: 0<\r><\n>
65
ON - Time without movement: 4010ALS Value: 0<\r><\n>
66
ON - Time without movement: 4512ALS Value: 0<\r><\n>
67
ON - Time without movement: 5012ALS Value: 0<\r><\n>
68
ON - Time without movement: 5514ALS Value: 0<\r><\n>
69
ON - Time without movement: 6015ALS Value: 0<\r><\n>
70
ON - Time without movement: 6517ALS Value: 0<\r><\n>
71
ON - Time without movement: 7017ALS Value: 0<\r><\n>
72
ON - Time without movement: 7519ALS Value: 0<\r><\n>
73
ON - Time without movement: 8020ALS Value: 0<\r><\n>
74
ON - Time without movement: 0ALS Value: 0<\r><\n>
75
ON - Time without movement: 0ALS Value: 0<\r><\n>
76
ON - Time without movement: 0ALS Value: 0<\r><\n>
77
ON - Time without movement: 0ALS Value: 0<\r><\n>
78
ON - Time without movement: 0ALS Value: 0<\r><\n>
79
ON - Time without movement: 0ALS Value: 0<\r><\n>
80
ON - Time without movement: 0ALS Value: 0<\r><\n>
81
ON - Time without movement: 0ALS Value: 0<\r><\n>
82
ON - Time without movement: 0ALS Value: 0<\r><\n>
83
ON - Time without movement: 0ALS Value: 0<\r><\n>
84
ON - Time without movement: 0ALS Value: 0<\r><\n>
85
ON - Time without movement: 0ALS Value: 0<\r><\n>
86
ON - Time without movement: 0ALS Value: 0<\r><\n>
87
ON - Time without movement: 0ALS Value: 0<\r><\n>
88
ON - Time without movement: 0ALS Value: 0<\r><\n>
89
ON - Time without movement: 0ALS Value: 0<\r><\n>
90
ON - Time without movement: 0ALS Value: 0<\r><\n>
91
ON - Time without movement: 0ALS Value: 0<\r><\n>
92
ON - Time without movement: 0ALS Value: 0<\r><\n>
93
ON - Time without movement: 0ALS Value: 0<\r><\n>
94
ON - Time without movement: 0ALS Value: 0<\r><\n>
95
ON - Time without movement: 0ALS Value: 0<\r><\n>
96
ON - Time without movement: 0ALS Value: 0<\r><\n>
97
ON - Time without movement: 0ALS Value: 0<\r><\n>
98
ON - Time without movement: 0ALS Value: 0<\r><\n>
99
ON - Time without movement: 502ALS Value: 0<\r><\n>
100
ON - Time without movement: 1003ALS Value: 0<\r><\n>
101
ON - Time without movement: 1503ALS Value: 0<\r><\n>
102
ON - Time without movement: 2005ALS Value: 0<\r><\n>
103
ON - Time without movement: 2507ALS Value: 0<\r><\n>
104
ON - Time without movement: 3008ALS Value: 0<\r><\n>
105
ON - Time without movement: 3508ALS Value: 0<\r><\n>
106
ON - Time without movement: 4010ALS Value: 0<\r><\n>
107
ON - Time without movement: 4512ALS Value: 0<\r><\n>
108
ON - Time without movement: 0ALS Value: 0<\r><\n>
109
ON - Time without movement: 0ALS Value: 0<\r><\n>
110
ON - Time without movement: 0ALS Value: 0<\r><\n>
111
ON - Time without movement: 0ALS Value: 0<\r><\n>
112
ON - Time without movement: 0ALS Value: 0<\r><\n>
113
ON - Time without movement: 0ALS Value: 0<\r><\n>
114
ON - Time without movement: 502ALS Value: 0<\r><\n>
115
ON - Time without movement: 1002ALS Value: 0<\r><\n>
116
ON - Time without movement: 1503ALS Value: 0<\r><\n>
117
ON - Time without movement: 2005ALS Value: 0<\r><\n>
118
ON - Time without movement: 2507ALS Value: 0<\r><\n>
119
ON - Time without movement: 3009ALS Value: 0<\r><\n>
120
ON - Time without movement: 3508ALS Value: 0<\r><\n>
121
ON - Time without movement: 4010ALS Value: 0<\r><\n>
122
ON - Time without movement: 4512ALS Value: 0<\r><\n>
123
ON - Time without movement: 5014ALS Value: 0<\r><\n>
124
ON - Time without movement: 5515ALS Value: 0<\r><\n>
125
ON - Time without movement: 6015ALS Value: 0<\r><\n>
126
ON - Time without movement: 6517ALS Value: 0<\r><\n>
127
ON - Time without movement: 7019ALS Value: 0<\r><\n>
128
ON - Time without movement: 7520ALS Value: 0<\r><\n>
129
ON - Time without movement: 8020ALS Value: 0<\r><\n>
130
ON - Time without movement: 8522ALS Value: 0<\r><\n>
131
ON - Time without movement: 9024ALS Value: 0<\r><\n>
132
ON - Time without movement: 9525ALS Value: 0<\r><\n>
133
ON - Time without movement: 10027ALS Value: 0<\r><\n>
134
ON - Time without movement: 10527ALS Value: 0<\r><\n>
135
ON - Time without movement: 11029ALS Value: 0<\r><\n>
136
ON - Time without movement: 11530ALS Value: 0<\r><\n>
137
ON - Time without movement: 12032ALS Value: 0<\r><\n>
138
ON - Time without movement: 12534ALS Value: 0<\r><\n>
139
ON - Time without movement: 13036ALS Value: 0<\r><\n>
140
ON - Time without movement: 13535ALS Value: 0<\r><\n>
141
ON - Time without movement: 14037ALS Value: 0<\r><\n>
142
ON - Time without movement: 14539ALS Value: 0<\r><\n>
143
ON - Time without movement: 15041ALS Value: 0<\r><\n>
144
Go S<\0>Start<\r><\n>
145
Start<\r><\n>
146
Y<\0>

Georg M. schrieb:
> http://gammon.com.au/forum/?id=11497

Danke für den Link, leider hilft mir das nicht so sehr weiter. Was genau 
macht diese Funktion?

von Georg M. (g_m)


Lesenswert?

Der Onkel im Video macht genau dasselbe:
PIR Deep Sleep ATMega328P
https://www.youtube.com/watch?v=7ChTq7ZHVTI

Sein Arduino-Sketch:
https://github.com/RalphBacon/PIR-ATMega328P-Deep-Sleep/blob/master/Benny_Cupboard_Alarm.ino

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Sichere das ADCSRA Register, und stelle den alten Wert nach dem 
Aufwachen wieder her, wie Georg es gezeigt hat.

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.