Hallo zusammen,
ich mache gerade die ersten Schritte mit dem Attiny412 und der
megaTinyCore in Arduino.
Ich habe leider ein Problem mit dem "aufwachen" aus dem Sleep-Mode mit
einer steigenden Flanke an einem Pin.
https://cdn.tindiemedia.com/images/resize/PrhuQ78RWdU0AKZwkpfWuOkc2gk=/p/full-fit-in/2336x1752/i/77443/products/2019-08-25T00%3A37%3A05.079Z-ATtiny_xy2.png?1606306133
An Pin 2 (also PA1) habe ich einen Taster. Dieser ist an der einen Seite
an 5V und an der anderen Seite an Pin 2 (PA1) angeschlossen.
Normal sollte ja beim drücken der Taste ein High anliegen und damit der
Mikrocontroller aufwachen. Doch leider macht er das nicht.
Später würde ich gerne auch noch einen Wert eines Sensors mittels ADC
auslesen, aber da bis jetzt nicht einmal das aufwachen klappt, habe ich
den Code mal auf das Minimum reduziert.
Die Pixel LEDs hängen an der 5V Versorgungsspannung und GND hängt am
"Collector" eines NPN Transistor. Die Basis mit 10kOhm an Pin 1 (PA7)
und der Emitter ist mit Masse verbunden.
Die Datenleitung ist mit einem 300Ohm widerstand mit Pin 3 (PA2)
verbunden.
In Zeile 28, habe ich es eigentlich mit RISING versucht, aber das klappt
leider nicht. Mit BOTHEDGES klappt es ein paar mal, dann hängt sich der
uC irgendwie auf und ich bekomme Ihn nicht mehr geweckt.
Zeile 29 benötige ich zum ausschalten der Pixel LEDs. Diese verbinden
sich sonst über die Datenleitung mit der Masse und ich benötige zu viel
Strom.
Ifrgendwie bin ich ratlos. Ich suche schon die ganze Zeit im Internet
aber finde leider nichts gescheites.
Hier habe ich mich schon eingelesen:
http://www.technoblogy.com/show?2RA3https://github.com/SpenceKonde/megaTinyCore/blob/master/megaavr/extras/PowerSave.md
1
#include<tinyNeoPixel.h>
2
#include<avr/sleep.h>
3
4
// Which pin on the Arduino is connected to the NeoPixels?
5
#define PIN 3
6
// How many NeoPixels are attached to the Arduino?
<An Pin 2 (also PA1) habe ich einen Taster. Dieser ist an der einen
Seite
an 5V und an der anderen Seite an Pin 2 (PA1) angeschlossen>
PA1 liegt durch Pullup auf Vcc . Leg den Taster auf Masse.
Unbenutzte Pins ziehen im Deepsleep 1mA, also abschalten:
PORTA.PINxCTRL =4; //INPUT_DISABLE ,Digital input buffer disabled
Hallo,
danke für den Hinweis. Habe es ausprobiert mit Taster auf GND und das
hat auch funktioniert.
Dann habe ich noch weiter versucht und habe es nochmal mit dem Taster an
5V versucht.
So hat das dann auch geklappt. Änderung in Zeile 23.
Jetzt wollte ich zum ausprobieren mal einen AM312 Bewegungsmelder als
Auslöser verwenden.
https://i.stack.imgur.com/qWMTw.jpg
Dieser hat mit dem Multimeter ein 3V ausgangssignal bei Bewegung für 2
Sekunden.
Nun dachte ich, ich kann einfach das OUT an den Pin 2 (PA1) anschliessen
kann und damit den Mikrocontroller aufwecken kann.
Leider nicht. Mit dem Multimeter iegen jetzt an OUT nur noch 0V an bei
Bewegung. Löse ich die Verbindung zwischen Sensor OUT und uC Pin 2
(PA1), dann messe ich an OUT des Sensors wieder 3V bei Bewegung.
Liegt dies am Pullup des PIN 2 ???
Ich dachte ich könnte mir si vielleicht sogar noch den Taster sparen,
aber ist doch nicht so einfach. Oder doch und ich mache es falsch?
1
#include<tinyNeoPixel.h>
2
#include<avr/sleep.h>
3
// Which pin on the Arduino is connected to the NeoPixels?
4
#define PIN 3
5
// How many NeoPixels are attached to the Arduino?
DerNeue schrieb:> Nun dachte ich, ich kann einfach das OUT an den Pin 2 (PA1) anschliessen> kann und damit den Mikrocontroller aufwecken kann.> Leider nicht.
Doch.
DerNeue schrieb:> Mit dem Multimeter iegen jetzt an OUT nur noch 0V an bei> Bewegung. Löse ich die Verbindung zwischen Sensor OUT und uC Pin 2> (PA1), dann messe ich an OUT des Sensors wieder 3V bei Bewegung.>> Liegt dies am Pullup des PIN 2 ???
Mit dem AM312 brauchst du keinen Pullup.
Trotzdem ist etwas falsch. Der Pullup liefert eine positive Spannung und
der AM312 auch. Woher dann 0V?
DerNeue schrieb:> Normal sollte ja beim drücken der Taste ein High anliegen und damit der> Mikrocontroller aufwachen. Doch leider macht er das nicht.
Du brauchst eine Flanke zum aufwachen. Nach Loslassen der Taste bleibt
die Pinkapazität aber auf 5V geladen und denkt gar nicht daran auf 0V zu
wechseln.
Der AM312 wird bei 5V vermutlich die Grätsche machen.
Hallo zusammen,
also Danke schonmal für eure Antworten.
Ich habe jetzt mal ein ganz einfachen Code geschrieben. Die LEDs
leuchten bei einem HIGH des AM312 auf und gehen aus, wenn dieser auf LOW
ist.
Also der elektrische Aufbau scheint erstmal zu klappen.
Wenn ich in Zeile 13 von INPUT auf INPUT_PULLUP Wechsel, dann klappt es
nicht mehr. Dann gehen einmal die LEDs an und nicht mehr aus.
Nun ist die Frage. Wie kann ich das in den Sleep Code implementieren?
1
#include<tinyNeoPixel.h>
2
3
// Which pin on the Arduino is connected to the NeoPixels?
4
#define PIN 3
5
6
// How many NeoPixels are attached to the Arduino?
Hallo,
ernst gemeinter Tipp. Gehe bitte nochmal die Bsp. der IDE durch. Deine
ständige Konfiguration vom Taster macht keinen Sinn. Eingänge und
Ausgänge werden in der Regel zu 99% einmal konfiguriert. Danach werden
nur noch Pegel eingelesen und bei Ausgängen Pegel umgeschalten.
DerNeue schrieb:> Nun ist die Frage. Wie kann ich das in den Sleep Code implementieren?
Der hybride Code ist etwas verwirrend, aber AVR ohne Arduino sieht
ungefähr so aus: