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
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.
Es sind noch weniger als 5 Zeilen.
1 | ldi r16,0b0110000 |
2 | out MCUCR,r16 |
3 | sleep |
das wars
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
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.
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.
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.
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
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.
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
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.
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
Funktionierts denn jetzt oder brauchst du noch Hilfe? :)
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
Das habe ich dir weiter oben schon alles beantwortet, inklusive Seitenangabe.
sry überlesen, aber trotdem danke. Michael
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.