- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 34

Thema: Eine RGB-Led und ein AtTiny13

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    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)

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Das lram sorgt wofür?
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Zitat Zitat von Kampi Beitrag anzeigen
    Das lram sorgt wofür?
    Die Hilfe unter Dim gefiel Dir nicht ?
    IRam ermöglicht es Prozessorregister unter einem Variablennamen anzusprechen. Es gibt im AVR 32 Prozessorregister, nämlich R0-R31.
    Mit:
    Code:
    Dim myFlag As IRam Byte At 12
    wird das Register R12 unter Bascomcode als myFlag ansprechbar, also:
    Code:
    If myFlag = 1 Then
    ' ...
    End If
    Prozessorregister dienen üblicherweise als Arbeitsregister und nur wenn diese von Bascom gerade selbst nicht genutzt werden, kann man das machen, was ich hier gezeigt hab'. Sobald z.B. eine Fließkommaberechnung stattfände, würden R12-R15 zerstört und damit die Sache unbrauchbar.

    Der Vorteil von IRam-Variablen liegt darin, dass Daten nicht extra aus dem SRam geholt und wieder dahin zurückgespeichert werden müssen, sondern jederzeit verfügbar in den Prozessorregistern vorliegen. Das geht schneller und spart Code.

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Danke für die Erklärung.
    Ich hab unter IRam gesucht und nichts gefunden
    Deswegen hab ich gefragt.
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Zitat Zitat von Kampi Beitrag anzeigen
    Deswegen hab ich gefragt.
    Kein Problem. IRam gehört weder zu den bekanntesten noch zu den meistverwandten Dingen. Tatsächlich ist's so, dass ich für mich kein IRam verwende, ich schreib dann lieber die ganze ISR in Assembler. Hier fand ich's interessant es zu erwähnen, da man so unter (fast) ausschließlicher Verwendung von Bascom-Befehlen einen deutlichen Vorteil erzielt.

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Zitat Zitat von Kampi Beitrag anzeigen
    Was für ne LED verwendest du den? Auch so eine 3W LED oder kleiner?
    Ich verwende eine kleine 5mm RGB-Led mit 4 Anschlüssen, gemeinsame Anode. Durch den geringen Vorwärtsstrom von 20mA pro Farbe konnte ich einen etwaigen Treiber einsparen. Durch großzügige Vorwiderstände (ich will es nicht so hell) wird ein Batteriebetrieb möglich. Die LED ist direkt auf die Platine aufgelötet; da die Platine - oder eher, das Platinchen - sehr klein ist, stört das nicht. Das Platinchen liegt hinter mehreren Kerzen auf der Deko-Ecke eines Kastens und beleuchtet dadurch die Raumecke. Natürlich kommt das Licht nur zur Wirkung, wenn der Raum abgedunkelt ist, aber das war ja auch der Sinn der Sache. Also sozusagen die passende lichttechnische Untermalung zum Kuscheln und Fernsehen.

    @MagicWSmoke
    Vielen Dank für die sehr interessanten Ausführen. Es ist sehr faszinierend, wieviel du aus dem Code herausholen konntest. Mit den Assembler-Instruktionen habe ich zwar noch meine Probleme, aber das liegt wohl eher daran, dass ich mich zu meiner Schande viel zu wenig damit beschäftige.
    Grüße
    Thomas

  7. #7
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    35
    Beiträge
    3.501
    Blog-Einträge
    9
    Zitat Zitat von Thomas E. Beitrag anzeigen
    @MagicWSmoke
    Vielen Dank für die sehr interessanten Ausführen. Es ist sehr faszinierend, wieviel du aus dem Code herausholen konntest. Mit den Assembler-Instruktionen habe ich zwar noch meine Probleme, aber das liegt wohl eher daran, dass ich mich zu meiner Schande viel zu wenig damit beschäftige.
    Da bist du nicht alleine. Aber das ist genial....der Code wurde von 90% auf 66% runter gedrückt

    Zitat Zitat von Thomas E. Beitrag anzeigen
    Ich verwende eine kleine 5mm RGB-Led mit 4 Anschlüssen, gemeinsame Anode. Durch den geringen Vorwärtsstrom von 20mA pro Farbe konnte ich einen etwaigen Treiber einsparen. Durch großzügige Vorwiderstände (ich will es nicht so hell) wird ein Batteriebetrieb möglich. Die LED ist direkt auf die Platine aufgelötet; da die Platine - oder eher, das Platinchen - sehr klein ist, stört das nicht. Das Platinchen liegt hinter mehreren Kerzen auf der Deko-Ecke eines Kastens und beleuchtet dadurch die Raumecke. Natürlich kommt das Licht nur zur Wirkung, wenn der Raum abgedunkelt ist, aber das war ja auch der Sinn der Sache. Also sozusagen die passende lichttechnische Untermalung zum Kuscheln und Fernsehen.
    Ok sowas hatte ich auch geplant nur weil meine LED bisl größer ist muss ich noch 3 Transistoren mit auf die Platine bringen. Aber ich möchte das Ding dann auch mit einem Steckernetzteil betreiben
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Zitat Zitat von Thomas E. Beitrag anzeigen
    Mit den Assembler-Instruktionen habe ich zwar noch meine Probleme, aber das liegt wohl eher daran, dass ich mich zu meiner Schande viel zu wenig damit beschäftige.
    Nun, wenn Du normalerweise nicht brauchst, ist's ja ok. Assembler ist aber sehr einfach mit Bascomcode zu mischen und da stellt's 'nen echten Vorteil dar, wenn man's kann.

Ä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
  •  

Labornetzteil AliExpress