Portar på AVR
Portar på AVR
Har en liten frågeställning mest för att kolla att jag tänker rätt.
Scenariot är följande:
Har en pinne på en port som skall användas för dubbelriktad seriell kommunikation.
När AVR:en sänder data så skall den för 1:a sätta pinnen i tristate och låta en pull-up dra upp signalen. För 0:a så skall pinnen sänka ström som utgång.
Min tanke är då att jag sätter pinnen till 0 en gång i början på programmet:
CBI PORTD, PORTD7
Sedan så modifierar jag bara rätt bit i DDRD för att ändra mellan 1 och 0 närhelst det behövs i programmet.
CBI DDRD, PORTD7 = nolla
SBI DDRD, PORTD7 = etta
Detta skall väl inte påverkas att programmet då och då använder porten som ingång genom att läsa av PIND? Bit 7 i PORTD fortsätter väl vara nolla?
Mvh
Nisse
Scenariot är följande:
Har en pinne på en port som skall användas för dubbelriktad seriell kommunikation.
När AVR:en sänder data så skall den för 1:a sätta pinnen i tristate och låta en pull-up dra upp signalen. För 0:a så skall pinnen sänka ström som utgång.
Min tanke är då att jag sätter pinnen till 0 en gång i början på programmet:
CBI PORTD, PORTD7
Sedan så modifierar jag bara rätt bit i DDRD för att ändra mellan 1 och 0 närhelst det behövs i programmet.
CBI DDRD, PORTD7 = nolla
SBI DDRD, PORTD7 = etta
Detta skall väl inte påverkas att programmet då och då använder porten som ingång genom att läsa av PIND? Bit 7 i PORTD fortsätter väl vara nolla?
Mvh
Nisse
Ha detta i åtanke då du designar mjukvaran:
Saxat från datablad:
Saxat från datablad:
Kod: Markera allt
When switching between tri-state ({DDxn, PORTxn} = 0b00) and output high ({DDxn,
PORTxn} = 0b11), an intermediate state with either pull-up enabled ({DDxn, PORTxn} =
0b01) or output low ({DDxn, PORTxn} = 0b10) must occur. Normally, the pull-up
enabled state is fully acceptable, as a high-impedant environment will not notice the difference
between a strong high driver and a pull-up. If this is not the case, the PUD bit in
the SFIOR Register can be written to one to disable all pull-ups in all ports.
Switching between input with pull-up and output low generates the same problem. The
user must use either the tri-state ({DDxn, PORTxn} = 0b00) or the output high state
({DDxn, PORTxn} = 0b11) as an intermediate step.
Hmm, få se nu.....
Jag kommer aldrig växla mellan tri-state och output high. De gånger pinnen används som utgång så ska den sänka signalen.
Därimot så stöter jag på det andra fallet, växlar mellan input with pull-up och output low. Där skall jag alltså se till att först gå till Tri-State.
Tack för detta Karlstedt. Hade inte sett detta i databladet. Ska genast titta närmare i mjukvaran.
Men i övrigt så tänker jag rätt i mitt första inlägg?
Mvh
Nisse
Jag kommer aldrig växla mellan tri-state och output high. De gånger pinnen används som utgång så ska den sänka signalen.
Därimot så stöter jag på det andra fallet, växlar mellan input with pull-up och output low. Där skall jag alltså se till att först gå till Tri-State.
Tack för detta Karlstedt. Hade inte sett detta i databladet. Ska genast titta närmare i mjukvaran.
Men i övrigt så tänker jag rätt i mitt första inlägg?
Mvh
Nisse
Jag pratar med en SHT11 från Sensirion. DATABLAD
Har fått ihop ett program som funkar skapligt. Dock missar det i kommunikationen ibland. Ska skriva om hela rasket och se till att kolla ACK-signaler osv. nogrannare. Men innan jag gör det så ville jag få bekräftat att jag tänkte rätt angående hur jag kan använda utgångspinnen.
Mvh
Nisse
Har fått ihop ett program som funkar skapligt. Dock missar det i kommunikationen ibland. Ska skriva om hela rasket och se till att kolla ACK-signaler osv. nogrannare. Men innan jag gör det så ville jag få bekräftat att jag tänkte rätt angående hur jag kan använda utgångspinnen.
Mvh
Nisse