mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Software BOD Disable im ATtiny45 funktioniert nicht


Autor: Juan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend!

Ich hab hier einen ATtiny45 Revision G mit per Fuse aktiviertem BOD 
(2.7V) und bekomme den Software BOD Disable im Power-Down-Sleep-Mode 
nicht aktiviert. Laut Datenblatt soll das mit Revision D und neuer 
funktionieren.

Im ersten Schritt soll BODS und BODSE gesetzt werden. Danach muss 
innerhalb von 4 Taktzyklen BODS gesetzt und BODSE gelöscht werden. 
Anschliessend soll innerhalb von 3 Taktzyklen der Sleep-Mode ausgeführt 
werden, wenn ich das richtig verstehe. So habe ich es gemacht:
ldi     temp0, (1 << SE) | (1 << SM1) | (1 << BODS) | (1 << BODSE)
out     MCUCR, temp0
cbr     temp0, (1 << BODSE)
out     MCUCR, temp0
sleep

Der Sleep-Mode funktioniert, der AVR wacht nicht mehr auf. Wenn aber die 
Spannung auf 2.5V sinkt und anschliessend wieder über 2.7V steigt, macht 
der AVR einen Reset und das Programm beginnt erneut, was es eigentlich 
nicht sollte.

Im Datenblatt steht noch, dass auf Geräten, die den Software BOD Disable 
nicht unterstützen, BODS immer als 0 gelesen wird. Das ist bei meinem 
Exemplar auch so. Wenn ich statt der sleep-Instruktion das BODS-Bit 
lese, ist es 0.

Wo ist nun der Fehler? Verstehe ich die Aktivierungsprozedur falsch? Ist 
der Code falsch? Oder kann die Revision G das doch nicht? Hat das schon 
einmal jemand gehabt?

Danke und schönen Abend!

Autor: Axel Schwenke (a-za-z0-9)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Juan schrieb:
> Im ersten Schritt soll BODS und BODSE gesetzt werden. Danach muss
> innerhalb von 4 Taktzyklen BODS gesetzt und BODSE gelöscht werden.

Und warum machst du das dann nicht?

> ldi     temp0, (1 << SE) | (1 << SM1) | (1 << BODS) | (1 << BODSE)
> out     MCUCR, temp0
> cbr     temp0, (1 << BODSE)
> out     MCUCR, temp0

Sieh mal hin, welches Bit du beim zweiten Zugriff setzt bzw. löschst

Autor: c-hater (Gast)
Datum:

Bewertung
-3 lesenswert
nicht lesenswert
Juan schrieb:

> Im Datenblatt steht noch, dass auf Geräten, die den Software BOD Disable
> nicht unterstützen, BODS immer als 0 gelesen wird. Das ist bei meinem
> Exemplar auch so. Wenn ich statt der sleep-Instruktion das BODS-Bit
> lese, ist es 0.
>
> Wo ist nun der Fehler?

Du verwendest wohl die falsche Chip-Revision.

Wahrscheinlich hat da irgendwer ein paar Chargen alter Chips billich 
eingekauft und dann umgelabelt, um sie ein paar Cent teuerer verkaufen 
zu können. Bei entsprechender Stückzahl lohnt der Aufwand, da können 
leicht einige k€ Gewinn bei anfallen. Und du hast die dann bei honest 
chinese dealer z.B. ePay gekauft.

So kommt zusammen, was zusammengehört. Der Sparfuchs und die cleveren 
Leute, die selbst aus den Sparfüchsen noch einen Gewinn rausleiern...

Autor: Wolluntier (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
c-hater schrieb:
> Wahrscheinlich hat da irgendwer ein paar Chargen alter Chips billich
> eingekauft und dann umgelabelt, um sie ein paar Cent teuerer verkaufen
> zu können. Bei entsprechender Stückzahl lohnt der Aufwand, da können
> leicht einige k€ Gewinn bei anfallen. Und du hast die dann bei honest
> chinese dealer z.B. ePay gekauft.

Du hast doch mit Pflaumenmus gegurgelt! Jeden Tag neue krude Theorien. 
Was bist Du nur für eine Pfeife?

c-hater schrieb:
> So kommt zusammen, was zusammengehört. Der Sparfuchs und die cleveren
> Leute, die selbst aus den Sparfüchsen noch einen Gewinn rausleiern...

Mit Dir gehört der Fuchsbandwurm zusammen. Der ist für den Menschen 
genau so nützlich wie Du.

Irgendwann reicht's -genau jetzt war es so weit.

Autor: Juan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Axel S. schrieb:
> Sieh mal hin, welches Bit du beim zweiten Zugriff setzt bzw. löschst
Ich dachte, ich "cleare" BODSE. Der Rest inklusive BODS bleibt 
unverändert (also BODS gesetzt), wie verlangt. Ich sehe es nicht. Was 
meinst du genau?

Der AVR ist von Conrad Schweiz (vor ca. 1.5 Jahren). Wenn das immer noch 
zu billig ist, bitte ich um Entschuldigung. Aber viel mehr will 
eigentlich kein Händler auf der Welt für diese ICs haben.

Autor: Axel Schwenke (a-za-z0-9)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Juan schrieb:
> Axel S. schrieb:
>> Sieh mal hin, welches Bit du beim zweiten Zugriff setzt bzw. löschst
> Ich dachte, ich "cleare" BODSE. Der Rest inklusive BODS bleibt
> unverändert (also BODS gesetzt), wie verlangt. Ich sehe es nicht.

Oops. Mein Fehler. Ich habe da "ldi" statt "cbr" gelesen. So wie du es 
machst, müßte es in der Tat funktionieren.

Juan schrieb:
> Im Datenblatt steht noch, dass auf Geräten, die den Software BOD Disable
> nicht unterstützen, BODS immer als 0 gelesen wird. Das ist bei meinem
> Exemplar auch so. Wenn ich statt der sleep-Instruktion das BODS-Bit
> lese, ist es 0.

Das würde dann dafür sprechen daß dein ATtiny45 das wirklich nicht kann 
:(

Autor: Karl M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

So schreibe ich die Assembleranweisungen als Inline Code.
Ja, das ist keine avr gcc Syntax.
'In order to disable BOD during sleep (see Table 7-1 on page 35)
    'the BODS bit must be written to logic one.
    'This is controlled by a timed sequence and the enable bit, BODSE in MCUCR.
    'First, both BODS and BODSE must be set to one.
    'Second, within four clock cycles, BODS must be set to one and
    'BODSE must be set to zero.
    'The BODS bit is active three clock cycles after it is set.
    'A sleep instruction must be executed while BODS is active in order to turn off the BOD for
    'the actual sleep mode. The BODS bit is automatically cleared after three clock cycles.
    
    asm
      ' disable BOD
      ldi    _HB0, (1<<BODS) or (1<<BODSE)
      ldi    _HB1, (1<<BODS)
      in    _HA0, MCUCR
      or    _HB0, _HA0
      out    MCUCR, _HB0
      or    _HB1, _HA0
      out    MCUCR, _HB1
      ' three clock cycles
      sei
      sleep
    EndAsm

Autor: Karl M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

was noch gelten muss, alle o.g. "BOD"-Assembler Anweisungen müssen ohne 
Interrupt Unterbrechung ausgeführt werden.

Autor: S. Landolt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
an Karl M.

Da wäre jetzt von Interesse, auf welchem ATtiny_5 mit welcher Revision 
das bei Ihnen läuft.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.