Forum: Mikrocontroller und Digitale Elektronik ATTINY402 Port einlesen


von Herrgott (Gast)


Lesenswert?

Hallo!

Ich bin in die Verlegenheit gekommen, einen ATTINY402 programmieren zu 
müssen. Bisher war ich ATMEGA gewohnt. Der Umgang mit Ports erscheint 
mir grundlegend anders zu sein. DDR gibt es nicht, heißt komplett 
anders. Nicht so schlimm. Wie aber lese ich einen einzelnen Portpin aus? 
Beim ATMEGA geht es mit bspw. PINB


if (PINB & (2 << PINB0)){
    X = true;
}

Biem ATTINY402 gibt es so etwas nicht. Kann doch nicht sein, dass ich 
jedesmal den kompletten Port mit einer maske verunden muss:

if ((PORTA_IN & 0b00000010) !=0 ){

    X = true;
}

Lässt sich nicht auf 1 abfragen, wäre dann ja 2. Geht das auch 
eleganter?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Herrgott schrieb:
> Kann doch nicht sein, dass ich jedesmal den kompletten Port mit einer
> maske verunden muss:

Das machst Du doch im anderen Fall exakt genauso, nur daß Du die Maske 
anders beschreibst.

Ungewöhnlich ist Deine Herangehensweise:

Statt Deinem

(2 << PINB0)

schreibt der Rest der Welt

(1 << PINB1)

Aber unabhängig davon - beide Ausdrücke sind exakt dasselbe wie 2 (das 
Du in der nichtportablen Schreibweise als 0b00000010 ausgedrückt hast.

von Herrgott (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> (2 << PINB0)

Stimmt. War blödsinn. Ich hatte immer die 2 im Kopf. Aber nicht desto 
trotz: Warum müssen solche rudimentären Sachen geändert werden? Ging 
doch beim früheren ATTINY auch. Ich habe ein bisschen den verdacht, dass 
die Bequemlichkeit der Programmierung langsam aber stetig an die eines 
PIC angeglichen wird.

von Axel S. (a-za-z0-9)


Lesenswert?

Herrgott schrieb:

> Warum müssen solche rudimentären Sachen geändert werden? Ging
> doch beim früheren ATTINY auch.

Frag Microchip. Die Namen von IO-Registern sind am Ende ohnehin nur 
#defines in einem Headerfile.

> Ich habe ein bisschen den verdacht, dass
> die Bequemlichkeit der Programmierung langsam aber stetig an die eines
> PIC angeglichen wird.

Eine Verschwörungstheorie ist so gut wie die andere.

von spess53 (Gast)


Lesenswert?

Hi

> Ich habe ein bisschen den verdacht, dass
>die Bequemlichkeit der Programmierung langsam aber stetig an die eines
>PIC angeglichen wird.

Dann sieh dir mal die ATXMegas an. Dort war die Adressierung schon lange 
vor Microchip wie bei den jetzigen ATTinys.

MfG Spess

von Herrgott (Gast)


Lesenswert?

spess53 schrieb:
> Dann sieh dir mal die ATXMegas an. Dort war die Adressierung schon lange
> vor Microchip wie bei den jetzigen ATTinys.

Das selbe. Für den Anwender erschließt sich IMHO der Sinn nicht, warum 
die Port-Defines wieder an ein obsoletes Produkt (Warum das beim XMEGA 
anders sein musste als beim ATMEGA, weiß auch kein Mensch) angeglichen 
werden. Mit XMEGA habe ich allerdings nicht viel gemacht. Soll aber auch 
nicht das Thema sein.

von spess53 (Gast)


Lesenswert?

Hi

Mein Gott Walter schrieb:

>Für den Anwender erschließt sich IMHO der Sinn nicht, warum
>die Port-Defines wieder an ein obsoletes Produkt (Warum das beim XMEGA
>anders sein musste als beim ATMEGA, weiß auch kein Mensch) angeglichen
>werden.

Es gibt halt jetzt für einen Port zehn statt drei Register und je ein 
Register für jeden Port-PIN.

Und das betrifft nicht nur ATXMegas und die neueren ATTinys sondern auch 
die neue ATMega0-Serie. Damit wären jetzt bei allen drei Serien wieder 
auf einem
Stand.

Amen Spess

von Tim  . (cpldcpu)


Lesenswert?

Oder Du nutzt einfach die Atmel libraries, z.B. über Atmel-Start.

Dann sieht es so aus:
1
PORTB_get_pin_level(P_MISO)

Der Code, der am Ende heraus kommt ist allerdings der gleiche.

von J. Zimmermann (Gast)


Lesenswert?

Herrgott schrieb:
> Mit XMEGA habe ich allerdings nicht viel gemacht.

Solltest Du mal probieren. Dann wirst Du nämlich feststellen, dass die 
Port- & Register-Struktur des XMEGA und der neuen TINYs wesentlich 
sinngebender ist. Man sollte allerdings nicht diese sinnlosen  #defines 
nutzen, also z.B. statt PORTA_IN  PORTA.IN verwenden.

mfg
Achim

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.