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?
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.
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.
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.
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
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.