Hvordan skriver/læser man til/fra en bestemt pin på Atmel's AVR?

Jan 15, 2007 13 Replies

Hejsa



Jeg har købt mig et STK500 fra Atmel samt downloadet CodeVision i en evaluationversion til at skrive kode i.



Hvis jeg ønker at læse knapperne på boardet og bare skrive dem ud på de respektive LED's kan man bare skrive:



PORTB=PIND;



hvilket jo er såre simpelt, men hvordan gør man det for en bestemt pin? (både læse og skrive).



Håber, I kan hjælpe mig


Mvh. Tomas

Du skal maske de ikke-relevante bits væk. Hvis du er interesseret i D3, AND'er du med 08H, eller OR'er med F7H, afhængig af hvordan din logik vender.

/Bo.

Du skriver f.eks. PORTB.6, for at skrive til PORTB, ben 6. Tilsvarende f.eks. PINA.3 for læsning.

Alternativt som Bo skriver.

-- MVH Troels

Denne metode synes jeg, jeg har forsøgt - men uden held. Må bare prøve igen - ellers prøver jeg, som Bo foreslår :-)

Mvh. Tomas

hey, du skal jo lige huske at sætte direction regisrteret.... den er jo lidt anderledes end en 8031......

/f

Tomas . wrote:

Hvis dette virker:

Går jeg ud fra at DDR er sat! ;)

Brian

Brian Lund skrev:

Jeps, DDRD=0x00; DDRB=0xff; sætter jo hhv. port B som output og port D som input.

Mvh. Tomas

Der er åbenbart ingen der kan svare dig!? - Jeg roder selv meget med AVR men jeg roder ikke med det der C-pjat! ;) Jeg kan godt fortælle dig hvordan du kan gøre det i assembler hvis det er? Tilmeld dig evt. på

formatting link
og spørg der!

Brian

Brian Lund skrev:

Det er jo lidt som religion, om man vælger Assembler eller C Jeg ved dog godt, at skal man programmere et system i Real-time er assembler helt klart at foretrække, da du har fat i hardwaren helt anderledes, men er ikke videre stærk i assembler, så jeg holder mig til C :-)

Jeg prøver avrfreak - takker

Mvh. Tomas

Hej

Jeg har ikke den store erfaring med AVR, men en mulighed til at lave maskningen kunne være at definere nogle macroer som vist i følgende eks.:

// Define pin connections #define DispDataOutPort PORTB #define DispDataOutBit 0

// Define IO macro's #define DispDataOut_H DispDataOutPort |= (1

Hej Tomas

En lille hurtig guide, som dybest set ikke indeholder mere end hvad andre allerede har skrevet:

L=E6se ben 3 (Bit 2, siger vi bare) fra port D: input =3D PIND & (1

Hej Jesper

Tak for din udførlige guide. Lige lidt kommentarer/spørgsmål:

OK. Her vil input så være = 1, hvis PIND = 4dec og 0, hvis den antager alle andre værdier, korrekt?

Bjarke Jensen skrev:

Så på denne måde kan du måske hjælpe dig selv til at skabe en sammenhængende port, du kan skrive til bit 0 - 7, hvis du rent HW mæssigt har været nødsaget til at benytte enkelte pinne til andre operationer (INTR, TIMER etc)?

Mvh. Tomas

Hej Tomas

Lidt kommentarer/svar:

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required