- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 34

Thema: Eine RGB-Led und ein AtTiny13

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #23
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Zitat Zitat von Kampi Beitrag anzeigen
    Wenn man in der ISR jetzt nur ein Flag setzt, kann man dann trotzdem deine ISR so wie sie ist nutzen oder muss man an dem push usw. noch was ändern?
    Oder sicherst du damit nur die ganzen Register, egal wie die verwendet wurden?
    Nein, ich würde vor pauschaler Nutzung immer vorsichtig sein.
    Es sind insgesamt 32 Register und ich sichere nur die Verwendeten. Da ist's wichtig sich dazu das erzeugte ASM-Compilat ansehen und zu schauen was da tatsächlich hergenommen wird. Wenn Bascom-Funktionen (wie z.B. Incr) aufgerufen werden, wird's schwieriger, denn dann geht's erstmal aus der ISR per CALL/RCALL raus und mann muss alle weiteren Verzweigungen verfolgen, die der Code nehmen kann.

    Darum schrieb ich auch die Version, der Compiler wird zu einem bestimmten Versionsstand bestimmte Register nutzen, aber Garantie für andere Versionen gibt's dafür nicht.

    Wird dagegen nur ein Flag gesetzt wird, müssen weniger Register gesichert werden, das würde man besser per Assembler machen, eben weil man dann die volle Kontrolle hat. Am Schnellsten geht ein Bit im Bereich bis I/O &h1F zu setzen. Manche Prozessoren haben GPIO's in dem Bereich, z.B. ATM644:
    Code:
    On Interruptx ISR Nosave
    ' ...
    ISR:
    !SBI   GPIOR0, 0
    Return
    Meist sitzen die Ports auch in diesem Bereich. Hat man einen Pin des Ports zur freien Verfügung, so ist das die kürzest mögliche Anweisung:
    Code:
    ISR:
    !SBI   PortA, 0
    Return
    Alles andere geht langsamer. Wenn man keine Fließkomma-Variablen verwendet, dann sind meist R12-R15 frei. Leider gehen einige ASM-Befehle erst ab >= R16, darum wird ein Flag setzen in R12 zu so etwas:
    Code:
    Dim myFlag As IRam Byte At 12
    ' ...
    ISR:
    !PUSH R16
    !LDI   R16, 1
    !MOV R12, R16
    !POP  R16
    Return
    Ein Setzen einer SRam-Variablen würde so gehen:
    Code:
    Dim myFlag As Byte
    ' ...
    ISR:
    !PUSH R16
    !LDI   R16, 1
    !STS {myFlag}, R16
    !POP  R16
    Return
    Geht in der ISR gleich schnell wie mit einer IRam-Variablen, nur in der Hauptschleife ist eine Verwendung von Bascom-Befehlen in Verbindung mit IRam immer noch ein Gewinn. Ein Sichern des Statusregisters SREG ist in keinem der Beispiele notwendig, da weder LDI, MOV, PUSH, POP noch STS das SREG verändern.
    Und das Decr und Incr besser ist wenn man ein Word hat ist ja auch interessant zu wissen.
    Macht sich halt nur bei vielen Anweisungen oder kleinem Speicherplatz wirklich bemerkbar.
    Edit:
    Pwm_count kann man noch als IRam At 15 dimensionieren, dann geht's auf 65%
    Geändert von MagicWSmoke (12.03.2012 um 13:55 Uhr)

Ähnliche Themen

  1. Samarai: Eine Drohne wie eine Ahornfrucht
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 15.08.2011, 15:20
  2. ATTiny13 PWM
    Von Jacob2 im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 13.05.2009, 18:08
  3. attiny13
    Von epos im Forum AVR Hardwarethemen
    Antworten: 8
    Letzter Beitrag: 05.10.2007, 21:39
  4. Antworten: 5
    Letzter Beitrag: 02.02.2007, 10:03
  5. Antworten: 7
    Letzter Beitrag: 17.10.2006, 16:10

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen