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


von Juan (Gast)


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:
1
ldi     temp0, (1 << SE) | (1 << SM1) | (1 << BODS) | (1 << BODSE)
2
out     MCUCR, temp0
3
cbr     temp0, (1 << BODSE)
4
out     MCUCR, temp0
5
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!

von Axel S. (a-za-z0-9)


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?

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

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

von c-hater (Gast)


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...

von Wolluntier (Gast)


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.

von Juan (Gast)


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.

von Axel S. (a-za-z0-9)


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 
:(

von Karl M. (Gast)


Lesenswert?

Hallo,

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

von Karl M. (Gast)


Lesenswert?

Hallo,

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

von S. Landolt (Gast)


Lesenswert?

an Karl M.

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

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.