Forum: Mikrocontroller und Digitale Elektronik Putziges Problem: ATTiny24V


von Martin (Gast)


Lesenswert?

Unten steht ein kleiner Programmausschnitt, der aus dem AVR-Studio 
stammt. Der Ausschnitt gehört zu ATiny24-Programm.

Das Programm läuft im Simulator einwandfrei, der erste Abschnitt setzt 
ein Ausgangsbit auf 0 , der zweite Abschnitt setzt  ein Ausgangsbit auf 
1.

Der reale Chip ATTiny24V funktioniert nicht. Zwar wird das Bit im ersten 
Abschnitt auf Null gesetzt, das Bit aus dem zweiten Abschnitt wird aber 
nicht auf 1 gesetzt.

Mit dem Dragon wird das Programm bis Zeile +00000148: Schritt für 
Schritt einwandfrei ausgeführt. Führt der Dragon die Zeile +00000148: 
mit dem Befehl   ST X,R24  aus , geht das Programm nicht (wie zu 
erwarten) zur Zeile +00000149: weiter, sondern "verzweigt" in eine 
anderen Programmteil Der Befehl selbst wird korrekt ausgeführt.

Frage: Mache ich etwas falsch? Warum "verzweigt" der Controller?

330:                  PORTB &= ~(1 << pinswitch) ;
+00000142:   E3A8        LDI       R26,0x38       Load immediate
+00000143:   E0B0        LDI       R27,0x00       Load immediate
+00000144:   E3E8        LDI       R30,0x38       Load immediate
+00000145:   E0F0        LDI       R31,0x00       Load immediate
+00000146:   8180        LDD       R24,Z+0        Load indirect with 
displacement
+00000147:   7F8E        ANDI      R24,0xFE       Logical AND with 
immediate
+00000148:   938C        ST        X,R24          Store indirect

331:                  PORTA |=  (1 << pinSpannungOK)  ;
+00000149:   E3AB        LDI       R26,0x3B       Load immediate
+0000014A:   E0B0        LDI       R27,0x00       Load immediate
+0000014B:   E3EB        LDI       R30,0x3B       Load immediate
+0000014C:   E0F0        LDI       R31,0x00       Load immediate
+0000014D:   8180        LDD       R24,Z+0        Load indirect with 
displacement
+0000014E:   6880        ORI       R24,0x80       Logical OR with 
immediate
+0000014F:   938C        ST        X,R24          Store indirect

von Martin (Gast)


Angehängte Dateien:

Lesenswert?

Kann es mit der Zeile "mcu = attiny24" im Makefile (siehe Angang) 
zusammenhängen? Nach dem Compilieren erhalte ich die Meldung "Device: 
Unknown" (siehe unten).

...

----------------
Device: Unknown

Program:     908 bytes
(.text + .data + .bootloader)

Data:         33 bytes
(.data + .bss + .noinit)

...

von Floh (Gast)


Lesenswert?

Code als Anhang?

von Martin (Gast)


Lesenswert?

Am Makefile liegt es nicht, da ich einen Hinweis auf eine Änderung 
(ELFSIZE = $(SIZE) --format=avr --mcu=$(MCU) $(TARGET).elf) gefunden 
habe. Jetzt wird der Controllertyp korrekt angezeigt.

Mein Problem bleibt: leider.

von Martin (Gast)


Lesenswert?

@ Floh: den Code werde etwas aufhübschen und posten.

Ansonsten bin ich ziemlich ratlos :(

von Martin (Gast)


Lesenswert?

Das Problem liegt nicht an den Tools oder dem Programm. Das Verhalten 
der Software wird durch das Schalten eines Transistors (TSM2301) 
verursacht, der die "enorme" Last (Versorgung weiterer Elektronik) von 5 
mA schaltet. Trenne ich den Controllerpin  vom Gate des Transistors 
läuft das Programm einwandfrei durch.

Kann es überhaupt sein, dass der ATiny24V immer auf die gleiche Art und 
Weise "abstürzt"?

von Alexander V. (avogra)


Lesenswert?

Also Gates kenn ich eigentlich nur von Mosfets. Zeig doch mal die 
Schaltung :)

von Shuzz (Gast)


Lesenswert?

Versorgungsspannung ordentlich mit 100nF am Controller abgeblockt?
Dito am Resetpin?

von putzig (Gast)


Lesenswert?

So was passiert bei Kurzschlüssen am Ausgang.

von Martin (Gast)


Lesenswert?

Das Problem ist gefunden: beim Einschalten des Transistors bricht die 
Spannung unter den BODLEVEL. Der Controller führt einen Reset durch und 
"landet" auf Grund eines anderen Pegels an einem Pin immer in einer 
anderen Funktion.

Jetzt muss ich "nur" noch die Ursache finden.

von MichiR (Gast)


Lesenswert?

Hast den Ausgangspin auch als Ausgang deklariert? bzw. intern Pull-Up 
oder Pull-Down beachtete?

hatte mal das problem bei nem Schieberegister... Ein Pin war 
versehentlich noch als Eingang anstatt als Ausgang deklariert und schon 
hatte ich ne lustige Antenne und andere kleine Probleme...

Könnt ja auch an sowas kleinem liegen :)

LG

von Martin (Gast)


Lesenswert?

...
Hast den Ausgangspin auch als Ausgang deklariert? bzw. intern Pull-Up
oder Pull-Down beachtete?
...

Das habe ich (mehrmals) überprüft.

Z. Z. prüfe ich den LP2950-3.3 und seine Beschaltung. Das Problem könnte 
daran liegen, dass er die Umschaltung - vom Ruhezustand mit 60 µA in den 
Wachzustand mit 5 mA - nicht schnell genug ausregelt.

von Matthias (Gast)


Lesenswert?

>der Software wird durch das Schalten eines Transistors (TSM2301)
>verursacht, der die "enorme" Last (Versorgung weiterer Elektronik) von 5
>mA schaltet. Trenne ich den Controllerpin  vom Gate des Transistors
>läuft das Programm einwandfrei durch.


Hängt der Pin direkt am Gate, oder über einen Widerstand?

Da das GAte eines Transistors wie eine Kapazität wirk, also im 
"Einschaltmoment" als Kurzschluß (Stromspitze), sollte man ein Gate 
immer über einen Widerstand anschließen, dass der Strom begrenzt wird.

Der BOD des AVR ist ziemlich empfindlich, so dass auch kurze 
Spannungseinbrüche erkannt werden. Da nützt dem auch der 100nF nicht
viel. wenn jemand der Logic über einen Port den Strom abzapft ;-)

von Martin (Gast)


Angehängte Dateien:

Lesenswert?

>> Hängt der Pin direkt am Gate, oder über einen Widerstand?

Ja. 10 K bringt es aber auch nicht.

Spannungseinbruch siehe Anhang (blau VCC, gelb VCC geschaltet)

von Mike J. (linuxmint_user)


Lesenswert?

@ Martin
Poste bitte den Schaltplan + Layout + Foto vom Aufbau
damit man dir ohne raten helfen kann.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Vielleicht solltest du ja die Vcc des Controllers etwas entkoppeln?

von Martin (Gast)


Lesenswert?

>> Vielleicht solltest du ja die Vcc des Controllers etwas entkoppeln?

Gute Idee! Diode & Kondensator?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Martin schrieb:

> Gute Idee! Diode & Kondensator?

Diode braucht halt Flussspannung.  Wenn du die verkraften kannst,
ist das sicher OK.  Ansonsten LC-Glied.  1 mH + 1 µF hat eine
Zeitkonstante von ~ 30 µs, das sollte dir schon ein Stück helfen.

von Martin (Gast)


Lesenswert?

Es funktioniert mit einem Gatewiderstand von 100 K.

Vielen Dank an alle :)

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Alexander v. Grafenstein schrieb:
> Also Gates kenn ich eigentlich nur von Mosfets. Zeig doch mal die
> Schaltung :)

Wieso? Das ist doch ein Transistor. Was meinst Du, wofür das "T" steht.

metal oxide semiconductor field-effect transistor
Metall-Oxid-Halbleiter-Feldeffekt TRANSISTOR

von Alexander V. (avogra)


Lesenswert?

Christian H. schrieb:
> Wieso? Das ist doch ein Transistor. Was meinst Du, wofür das "T" steht.

Oops, vollkommen richtig. War also ein absolut überflüssiger Kommentar 
von mir. Sorry!

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.