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
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) ...
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.
@ Floh: den Code werde etwas aufhübschen und posten. Ansonsten bin ich ziemlich ratlos :(
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"?
Also Gates kenn ich eigentlich nur von Mosfets. Zeig doch mal die Schaltung :)
Versorgungsspannung ordentlich mit 100nF am Controller abgeblockt? Dito am Resetpin?
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.
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
... 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.
>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 ;-)
>> 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)
@ Martin Poste bitte den Schaltplan + Layout + Foto vom Aufbau damit man dir ohne raten helfen kann.
>> Vielleicht solltest du ja die Vcc des Controllers etwas entkoppeln?
Gute Idee! Diode & Kondensator?
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.
Es funktioniert mit einem Gatewiderstand von 100 K. Vielen Dank an alle :)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.