Forum: Mikrocontroller und Digitale Elektronik Inline Assembler ATtiny1617


von Markus W. (markusw36)


Lesenswert?

Hallo,

Bis jetzt habe ich eine WS2812B Kette mit einem ATTiny2313 betrieben.
Bei dem AT2313 habe ich die Ansteuerung der LED's per inline Assembler 
realisiert
1
                // define 1 for WS2812B
2
    asm volatile (
3
      "sbi %[port], %[bit] \n\t"
4
      ".rept %[onCycles] \n\t"
5
      "nop \n\t"
6
      ".endr \n\t"
7
      "cbi %[port], %[bit] \n\t"
8
      ".rept %[offCycles] \n\t"
9
      "nop \n\t"
10
      ".endr \n\t"
11
      ::
12
      [port]    "I" (_SFR_IO_ADDR(PORTA)),
13
      [bit]    "I" (0x02),
14
      [onCycles]  "I" (NS_TO_CYCLES(T1H) -2),
15
      [offCycles] "I" (NS_TO_CYCLES(T1L) - 2)
16
    );

Mein Problem ist nun, dass ich eine Steuerung für den ATtiny1617 
realisieren möchte, mein Problem ist nun jedoch, dass der Kompiler die 
Port Addressen nicht finden kann. Das Projekt habe ich via AtmelStart 
erstellt. Wo finde ich zu diesem Thema die Port definition oder 
weiterführende Links?

von avr (Gast)


Lesenswert?

vielleicht interessant , wenn auch alternative ansteuerung
Beitrag "WS2812B mit Attiny817 Hardware ansteuern"
mfg

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


Lesenswert?

Markus W. schrieb:
> dass der Kompiler die Port Addressen nicht finden kann

Was heißt das konkret?

Wenn ich mir die Architektur der neuen ATtinys ansehe, dann wirst du 
wohl auf die regulären Ports nicht mehr per IN/OUT/SBI/CBI zugreifen 
können, da sie alle höhere Adressen haben. Im unteren IO-Adressbereich 
sind dagegen diese VPORTs angesiedelt, und du müsstest dann das von dir 
gewünschte Peripheral auf einen solchen virtual port mappen – Abschnitt 
16.6.

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Jörg W. schrieb:
...
> Wenn ich mir die Architektur der neuen ATtinys ansehe, dann wirst du
> wohl auf die regulären Ports nicht mehr per IN/OUT/SBI/CBI zugreifen
> können, da sie alle höhere Adressen haben. Im unteren IO-Adressbereich
> sind dagegen diese VPORTs angesiedelt, und du müsstest dann das von dir
> gewünschte Peripheral auf einen solchen virtual port mappen – Abschnitt
> 16.6.
Bei Verwendung entsprechender C Bibliotheken merkt man das erstmal nicht 
am Programmieraufwand. Allerdings sind die Zugriffe erstaunlich 
aufwändig, was Kompilat und Laufzeit angeht.
Meine ersten Programme für die 1er-Serie habe ich komplett in 
Maschinensorache geschrieben und leise geflucht, weil der 
Portierungsaufwand für einfache Dinge groß war. Kompensiert wird das 
etwas durch die potentiell höheren Taktraten und das Plus an Speicher.
Die neuen AVRs haben so viel Peripherie an Board, dass der Designer 
indirekten Zugriff einführen musste.
Die neuen AVRs sind richtig schicke und billige low-power Chips. Machen 
sich gut als Manager-Baustein für komplexe Boards mit anderen 
Controllern oder in stand-alone Anwendungen.

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.