AVR - Aufwecken eine Attiny45 aus Powersleep (Rising event)

OP #2701194
Lesenswert?
• ▲
▼
Also erstmal ein paar worte zu mir und dem mini Bastelprojekt.

Ich bin knappe 30 Jahre alt und hab beruflich mit elektronik nix am Hut, 
ausser dass ich natürlich einen PC Arbeitplatz hab und dieser Art 
Elektronik seit ich 12 zu meinem Leben gehört. Hab ein kleines Ambilight 
Bastelprojekt erfolgreich gemeistert und seid dem will ich irgendwie 
mehr.

Versuche mich nun langsam zu steigern ;)

Was ich machen will: Einen Türsensor an einem Kühlschrank nachrüsten. 
Dafür soll ein Attiny zum einsatz kommen diverse LEDs und ein Allegra 
A1120 Hallsensor (Dauermagnet an der Kühlschranktür), Dar Hallsensor ist 
am Kühlschrank befestigt und der Magnet liegt ihm gegenüber. Der A1120 
ist ein unipolarer Sensor welcher bei anwesendem Magnetfeld GND 
durchschaltet.

Angedacht war folgende funktionsweise. Bei geschlossener Kühlschranktür 
soll alles im Powerdown modus laufen, sobald die Tür sich öffnet und der 
Hallsensor keinen Magneten mehr detektiert soll der Attiny wieder 
aufwachen und LEDs blinken lassen und einen Buzzer piepen lassen. 
Schliesst sich die Tür wieder dann soll alles wieder in den Power down 
gehn.

Dies funktioniert bis jetzt auch recht gut auf umgekehrem wege. (Alarm 
geben bei geschlossener Tür und Sleep modus beim offnen)

Was ich schon verstanden hab, dass es nur 4 trigger zum aufwecken an 
INT0 port gibt (LOW, RISING, CHANGE, FALLING) Der A1120 schaltet laut 
datasheet mit magnetfeld auf LOW und ohne auf HIGH. Da ja bei geöffneter 
Kühlschranktür kein Magnet vorhanden ist, sollte dann HIGH anliegen, es 
gibt aber kein HIGH trigger, also müsste es der RISING trigger sein (LOW 
auf HIGH) dies funktioniert aber nicht. selbst wenn ich dies über einen 
normalen Schalter versuche antstatt den Hallsensor zu benutzen. versuche 
ich es mit dem LOW trigger (also mit Magnet vorhanen) dann 
funktionierts.

Zusammengeschrieben ist alles im Arduino editor und programmiert wird 
alles mit einen umprogrammierten Teensy (Arduino kompatibles device) 
über Arduino. Ich hoffe man kann mir trotzdem weiterhelfen oder mich in 
die richtige Richtung verweisen. Den Code habe ich mit angehangen. Falls 
ich hier überhaupt an der richtigen Adresse bin (Mikrocontroller oder 
Arduino forum ich war mir da nicht so sicher)

Vielen dank schonmal vorab
Stefan
Angehängte Dateien:
#2701227
Lesenswert?
• ▲
▼
Tach Stefan,

dein Problem ist folgendes und recht einfach zu beheben: INT0 ist ein 
synchroner interrupt heißt er braucht die I/O clock um edge zu triggern. 
Ohne clock also im power down kann er nur level triggern. Im speziellen 
aber nur low level. Ist bei dem Typ so.

Die Lösung ist einen PCInt(pin change int) zu nehmen. Der kann asynchron 
auf edge triggern. Du musst nicht mal deine Schaltung umlöten, denn der 
tiny45 hat auf jedem Pin einen PCInt(auch auf INT0).

Thor

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.