Forum: Mikrocontroller und Digitale Elektronik AVR Touchsensor mit Powerdown


von LED_Go! (Gast)


Lesenswert?

Hey Forum!

ich baue einen mobilen Aufbau: Attiny13 an einem GreenCap, der über eine 
kleine Solarzelle geladen wird. Der Attiny13 steuert eine LED und etwas 
Beschaltung, damit das Ganze bis 0,9V runter funktioniert.

Bisher habe ich Versionen gebaut, die bei Dunkelheit einfach angehen und 
Leuchten, bis die Spannung zu niedrig wird. Jetzt möchte ich, dass die 
LED leuchtet, sobald jmd eine Metallfläche berührt oder in die Nähe 
kommt.
Ich habe nun eine Frage bezüglich des Codes.

Dieser einfache Code in Bascom funktioniert super:
1
'DarlingtonStufe (2fach) an Pinb.3!
2
3
4
$regfile = "attiny13.dat"
5
$crystal = 1200000
6
$hwstack = 32                                               ' default use 32 for the hardware stack
7
$swstack = 10                                               'default use 10 for the SW stack
8
$framesize = 10
9
Declare Sub Blitz
10
Config Adc = Single , Prescaler = Auto , Reference = Avcc
11
Config Portb.0 = Output
12
Config Portb.3 = Input
13
'Pinb.3 = 1                                                   ' Achtung kein Pull-up!
14
15
Dim Messergebnis As Word
16
17
Do
18
Sbi Adcsra , 7
19
Messergebnis = Getadc(3)
20
cbi adcsra,7
21
If Messergebnis > 500 Then                                  'Achtung >!
22
Gosub Blitz
23
End If
24
Loop
25
26
27
Blitz:
28
29
Portb.0 = 1
30
Waitms 100
31
32
33
Return
34
35
36
End

Um Strom zu sparen,möchte ich jetzt gerne die Main-Loop nach dem Messen 
des Wertes am Sensor-Pin schlafen legen. Der Watchdog soll dann alle 2 
Sekunden wecken und es wird erneut gemessen und wieder in Power-down 
gegangen.
Habe es also mal so versucht:

[code:]

'[...]

Config Watchdog = 2048

Enable Interrupts
Stop Ac
Start Adc
Start Watchdog

Do

sbi adcsra,7
Messergebnis = Getadc(3)
cbi adcsra,7
If Messergebnis > 500 Then
Gosub Blitz
End If
Powerdown
Loop


Blitz:
Stop Watchdog

Portb.0 = 1
Waitms 100
sbi adcsra,7
Messergebnis = Getadc(3)
cbi adcsra,7
If Messergebnis > 500 Then
Goto Blitz
End If
Start Watchdog
Powerdown

Return

End
[/code]

Leider funktioniert dieser Code aber nur in einer geerdeten Schaltung 
(Entwicklungsboard-Umgebung) und nicht in der mobilen ungeerdeten 
Schaltung.
Weiß jemand von den Profis Rat, wie man so etwas doch realisieren kann?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Sowas macht man nicht mit dem ADC, sondern mit einem Touch-Algorithmus 
und ein paar passiven Bauteilen.


Beitrag "qtouch - sekt oder selters"

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.