Forum: Mikrocontroller und Digitale Elektronik Attiny 2313 in Sleep Mode -> Standby schicken, aber wie?


von Michael N. (lwl2012)


Lesenswert?

Hey Leute,

ich lese momentan ein Buch und bin dort auf den Abschnitt über die Sleep 
Modis gestoßen. Dort wurden 5 Verschiede Modis genannt.

1. IDLE
2. Powerdown
3. Powersave
4. Standby
5. ADC Noise Reduction Mode

Ich hab mir die Infos im Buch zu dem Thema durchgelesen und denke, der 
Standby Mode wäre der richtige für mich, da der µC ein Quarz hat und bei 
der Version soll der Quarz weiter laufen, damit dieser Teil vernünftig 
weiter läuft.

Oder gibt es ein anderen Mode, der besser ist?

Zum Wecken wurde genannt, dass ein Interrupt möglich wäre. Ich würde ein 
Hardware Interrupt nehmen, sobald der Interrupt gegen GND gezogen wird. 
Denke das wäre das sicherste, da Induktionsspannungen egal wären. 
Zumindest meinem Verständnis nach.

Aber nun zu meinem Problem, funktioniert der Standby Mode erst ab einer 
bestimmten Version? Weil ich arbeite noch mit der Version 1.11.9.0

Ich weiß, nicht gerade aktuell aber gut.

An sich soll der µC in den Schlaf geschickt werden (Kurz nach einer "Bin 
da Anzeige" durch eine LED) gleich zu Beginn und erst durch den 
Interrupt geweckt werden.
Im nächsten Schritt soll er seine Sensoren abfragen und dann auf einen 
Input warten.
Daten per Uart übermitteln, warten auf Bestätigung um im Anschluß wieder 
Schlafen geschickt zu werden.


Ich hoffe man versteht was ich meine und man kann mir helfen. Noch eine 
Info, ich nutze Bascom.

Michael

von Eumel (Gast)


Lesenswert?

Schau ins Datenblatt des Controllers. Da ist beschrieben was die 
Sleepmodi machen, wie du deinen Controller schlafen legst und ihn wieder 
wach bekommst. Ein Buch brauchst du dafür mit Sicherheit nicht.
In Assembler sind das ca. 5 Zeile, dann schläft er.

von Eumel (Gast)


Lesenswert?

Es sind noch weniger als 5 Zeilen.
1
ldi r16,0b0110000
2
out MCUCR,r16
3
sleep

das wars

von Michael N. (lwl2012)


Lesenswert?

Das Buch lese ich nur im Allgemeinen.

Und dort stieß ich auf dieses Thema. Nur kann mir jemand den Verraten, 
was genau diese Zeilen bedeuten? Und wie gesagt ich nutze Bascom. Habe 
mit Assembler bislang nix zu tun gehabt.

Und so gibts doch verschieden Schlafmodis, die Verschiede Ergebnisse 
erzielen.

Oder heißt der Code der Gepostet wurde schon das was ich will? Also 
diesen Standby Modi?



Michael

von Eumel (Gast)


Lesenswert?

Jap, das heißt er.
Schau ins Datenblatt auf Seite 30 und 31
http://www.atmel.com/Images/doc2543.pdf
da ist alles erklärt inklusive einer Tabelle was die verschiedenen 
Sleepmodi machen und wie du deinen Controller wieder aufweckst.
In dem was du oben beschrieben hast sehe ich nämlich noch nicht wie du 
deinen Controller wieder wecken möchtest. Was meinst mit "den Interrupt"
es gibt viele verschiedene Interrupts aber nur einige davon helfen dir 
weiter.

von Michael N. (lwl2012)


Lesenswert?

Ich hatte auch oben genannt, dass ich ein Hardware Interrupt meine. Also 
einen der INT Pins.

Also zumindest war das der Plan. Soweit ichs richtig gelesen hatte war, 
es dadrüber möglich gewesen den µC zu wecken.

Aber werde es mal mit dem Implementieren des ASM Befehls machen. Soweit 
ich das richtig verstanden habe, implementiere ich so das ASM Teil oder?
1
   $asm
2
3
      Asm Befehle
4
5
   $end Asm

Michael


PS: Hab gelesen, dass es INT0 ist. Also wenn ichs im Datenblatt richtig 
erfasst habe.

von Eumel (Gast)


Lesenswert?

Wie du den ASM Teil richtig einfügst weiß ich nicht. Aber es wird doch 
auch in Bascom Befehle geben um irgendeine Konstante in ein I/O Register 
zu schreiben? Die Konstante suchst du dir einfach aus dem Datenblatt, 
Register description im Sleepmodi teil. Da kannst du ja ablesen welchen 
Wert du in das MCUCR Register schreiben musst.

von Michael N. (lwl2012)


Lesenswert?

Ja gut, kann sein dass es ein Bascom Befehl gibt. Habe auch was gefunden 
um den µC in den Sleepmode Powerdown zu bekommen, nur da ich einen Quarz 
benutze ist dieser Modus nicht der geeignetste Modus, weil im Powerdown 
auch der Quarz angehalten wird und bis der wieder Stabil Schwingt dauert 
seine Weile. von daher wollte ich den Standby Mode nehmen, nur da fand 
ich trotz Googlen nicht das gewünschte Ergebnis.

Von daher danke ich den Leuten im Forum für den ASM Teil. Da ich als 
Anfänger mich über jede Hilfe freue.

Wäre nur nett, wenn mir die ASM Leute vielleicht verraten wie ich die 
die Anderen Sleep Modis aktivieren kann? Also was müsste ich an dem 3 
Zeiler ändern? Oder ist da kein Parameter bei, der die Unterschiedlichen 
Modis auswählt?

Ich wollt auch nur das gern erfahren, den im allgemeinen wollte ich bei 
Bascom bleiben.

Falls aber jemand noch was zu Bascom herraus findet, würd ich mich 
freuen von zu hören.


Michael

von d'oh (Gast)


Lesenswert?

Ich weiß ja nicht was für ein Buch du da ließt, aber evtl. ist es das 
Falsche für dich. Eines à la "Grundlagen der 
Mikrocontroller-Programmierung" (fiktiver Titel) ist denke ich eher 
angebracht, bevor du dich mit Powerfeatures und Sleepmodi beschäftigst.
Bascom hin oder her, kann ich dir die Tutorials auf dieser Seite sehr 
ans Herz legen. Schon nach den ersten 3-4 Seiten des Assembler Tutorial 
wirst du verstehen, was die oben gezeigten asm Snippets bedeuten und wie 
du Weiterverfahren kannst, wenn es um den von dir bevorzugten Standby 
Modus geht.

von Michael N. (lwl2012)


Lesenswert?

Naja das Buch trägt den Titel: "Mikrocontroller Programmieren mit Bascom 
Basic" - "Messen, Steuern, Regeln und Robotertechnik mit den 
AVR-Controllern" aus dem Franzis Verlag.

Grundeinstieg hab ich schon gemacht. Also bischen mit PWM Rum spielen, 1 
Wire Bus, RTC, ADC, Pins Configurieren, Uart Kommunikation, 
Schieberegister und sowas hab ich schon gemacht. Also eine Grundlage ist 
da und von daher wollte ich nun mal mit den Sleepmodis anfangen als 
nächsten schritt.


Michael

von d'oh (Gast)


Lesenswert?

Ja so etwas habe ich befürchtet, und dennoch kann und will ich dir da 
gar keinen Vorwurf machen. Ich finde es super, dass du zum Einstieg 
versuchst dich ausführlich mit dem Thema zu beschäftigen und auch 
Literatur zu Rate ziehst. Dennoch bin ich der Meinung, und ich denke die 
Art und Weise deiner Fragestellung gibt mir da recht, dass du das 
zugrundeliegende Konzept der Mikroprogrammierung noch nicht durchdrungen 
hast.
Die Schuld sehe ich nicht in deinem Engagement, ganz im Gegenteil, 
sondern in der verwendeten Literatur, welche meines Erachtens völlig 
unbrauchbar ist einem Anfänger die Grundlagen zu vermitteln.
Wenn man sich die ersten Kapitel des Buches anschaut (Amazon Leseprobe), 
dann sieht man schnell dass das Buch viel zu sehr auf die Bascom 
Programmiersprache ausgerichtet ist, und auf die wichtigsten Grundlagen 
wahrscheinlich gar nicht eingeht.
Beispiel: Kapitel 2: Mikrocontroller Grundlagen. Klingt ja erstmal nicht 
schlecht, aber inhaltlich wird man auf drei Seiten mit zwei sinnlosen 
Graphiken überschüttet, die rein gar nichts vermitteln. Am Ende weiß der 
Leser, ein Mikrocontroller hat Speicher, eine CPU, I/O Ports und kann 
ein Gewächshaus beleuchten. That's it... Ab Kapitel 3 steht dann Bascom 
im Mittelpunkt bis in Kapitel 13!!! über das Setzen von I/O Ports 
geschrieben wird.
Die Problematik bei der Mikrocontroller Programmierung ist zu verstehen, 
was eine Programmanweisung auf dem Mikrocontroller bewirkt und das lässt 
das Buch über die Vermittlung der Grunlagen durch Bascom nicht zu.
"LED = Output" lässt einfach nicht erkennen, dass für das Betreiben 
einer LED verscheidene Kontrollregister auf dem Mikrocontroller richtig 
gesetzt werden müssen, bis etwas blinkt.

Ich kann dir bei deinem Problem leider nicht sonderlich behilflich sein, 
weil ich Bascom nie verwendet habe, aber möchte dir nochmals die 
Tutorials hier auf der Seite ans Herz legen. Diese gestatten dir die 
Grundlagen wirklich zu verstehen und erlauben dir dann auch bspw. ein 
Datenblatt richtig zu interpretieren.

von Michael N. (lwl2012)


Lesenswert?

Ja gut,

das vielleicht der unterschied was manche wollen und vll was ich möchte.

Also mein eigentliches Ziel ist es eine mir gestellte Aufgabe einfach zu 
erledigen. Ich bin weniger der, der jedes kleine Detail wissen möchte 
was da so vorran geht. Ist schließlich nur für den Hobbybereich 
ausgelegt.

Bei der Äußerung wird sich sicher bei so dem ein oder anderen alles 
zusammen ziehen und man möchte ausholen über meine vorgehensweise. Aber 
bitte lasst es.

Wie gesagt es ist nur für den Hobbybereich und soll kein Hightech non 
plus Ultra Dingen werden.

Also bitte kritisiert mich nun nich in Grund und Boden, dass ich nur an 
der Oberfläche scharben möchte  und nicht bis in die letzte Ebene 
hinabsteigere.

Werde mir aber genannten Tutorials noch mal angucken.

Michael

von Eumel (Gast)


Lesenswert?

Funktionierts denn jetzt oder brauchst du noch Hilfe? :)

von Michael N. (lwl2012)


Lesenswert?

Ich werde es die Tage erst testen können. Habe zur Zeit Rufbereitschaft.

Aber wie würde den der 3 Zeiler aussehen, um die anderen Modis zu 
nennen? Gibts da vll ein Parameter, den man anpassen muss? Wenn ja gibt 
es eine Art "Liste" mit Parameter, mit der mans einstellt?

Also ich möchte beim Standby ersma bleiben, aber trotzdem mal die Frage 
aus interesse.


Michael

von Eumel (Gast)


Lesenswert?

Das habe ich dir weiter oben schon alles beantwortet, inklusive 
Seitenangabe.

von Michael N. (lwl2012)


Lesenswert?

sry überlesen, aber trotdem danke.


Michael

von Jimbo (Gast)


Lesenswert?

Oh mann, das ist ja ein anstrengender Dialog zum lesen. Von wegen "die 
Grundlagen sind da".

Der "dreizeiler" schreibt einfach den Wert 0b00110000 ins Register MCUCR 
(quasi die Einstellungen) und ruft dann sleep auf (Befehl zum schlafen 
wie eingestellt).

Was die Bits 0b00110000 in dem Register bewirken, steht im Datenblatt.

Der "Befehl" den du suchst sieht so aus:
=

Also z.B.
MCUCR = 0b00110000
(falls man Zahlen in Bascom so schreiben kann)
Sonst halt z.B.
MCUCR = 48

von Hannes L. (hannes)


Lesenswert?

Jimbo schrieb:
> Der "Befehl" den du suchst sieht so aus:
> =

Richtig, eine stinknormale Zuweisung!

> Also z.B.
> MCUCR = 0b00110000
> (falls man Zahlen in Bascom so schreiben kann)
> Sonst halt z.B.
> MCUCR = 48

Oder: mcucr = bits(se, sm0)

Michael N. schrieb:
> Also mein eigentliches Ziel ist es eine mir gestellte Aufgabe einfach zu
> erledigen.

Dann musst Du das Datenblatt zu rate ziehen und auch ein paar Grundlagen 
lernen.

> Ich bin weniger der, der jedes kleine Detail wissen möchte
> was da so vorran geht.

Dann hast Du schlechte Karten, dann wirst Du nix Gescheites 
programmieren können.

> Ist schließlich nur für den Hobbybereich
> ausgelegt.

Dann musst Du halt ohne Sleep auskommen, denn um Sleep zu benutzen, muss 
man es verstehen, und um es zu verstehen, muss man das Datenblatt lesen 
und verstehen.

Da würde man z.B. erkennen, dass Sleep in zwei Etappen läuft, zuerst 
wählt man den gewünschten Sleepmodus vor, dann, an geeigneter Stelle 
im Programm, schaltet man den Takt ab, indem man den ASM-Befehl sleep 
aufruft, für den weder C moch Bascom einen direkten "Befehl" hat (in 
Bascom ist es $sleep, in C eine Funktion, die den Befehl aufruft).

Es hat keiner was dagegen, wenn Du in Bascom programmieren möchtest. 
Aber ohne die Informationen des Datenblatts kommst Du auch in Bascom 
nicht weit. Lies mal das Bascom-Buch von Rowalt, steht auf seiner 
Webseite online, da wirst Du sehen, dass er auf fast jeder zweiten Seite 
auf das Datenblatt verweist. Und das macht der bestimmt nicht zum 
Spaß...

...

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.