Putziges Problem: ATTiny24V

Gast #1751232
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
Gast #1751270
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)

...
Angehängte Dateien:
Gast #1751326
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.
Gast #1752052
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"?
Gast #1752243
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.
Gast #1752283
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
Gast #1752312
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.
Gast #1752348
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 ;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren