Hallo allemaal
Ik wil een Attiny2313 programeren in C.
Ik weet hoe ik mijn ingangen kan lezen en uitgangen kan wegschrijven:
DDRB=0x0F;
DDRD=0x7F;
PORTD==0x7F;
PORTB=0x0F;
Maar stel nu dat ik bijvoorbeeld als uitgang "PORTB=0x0A;" wil hebben als pin PD3 laag wordt, zonder rekening te houden met alle andere pinnen. Hoe doe ik dit het beste?
Ik kan toch moeilijk alle mogelijke combinaties gaan ingeven waarbij pin PD3 laag wordt:
PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7
1 1 1 0 1 1 1 1 => 0xF7
0 1 1 0 1 1 1 1 => 0xF6
1 0 1 0 1 1 1 1 => 0xF5
1 1 0 0 1 1 1 1 => 0xF3
... => ...Iemand een idee?
Bedankt
[Bericht gewijzigd door klein is fijn op (1%)]
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Het lukt mij niet echt. Ik had graag mijne uitgang laten in- en uitschakelen met dezelfde knop.
Ik had hier het volgend programma voor geschreven:
DDRB=0x0F; //uitgangen
DDRD=0x7F; //ingangen
wdt_reset();
PORTD=0x7F;
PORTB=0x0F;
long wait;
int Flank1;
int eFlank1;
while(1)
{
if (PIND==0x7E)
{
eFlank1 = 1;
}
else;
if (PIND==0x7F & eFlank1==1)
{
eFlank1=0;
Flank1 = 1;
}
else;
if (PORTB == 1 & Flank1==1)
{
PORTB &= ~(1 << 1); //????? Is dit juist ????
Flank1=0;
wait=0;
while(wait<10000)
wait++;
}
else;
if (PORTB == 0 & Flank1==1)
{
PORTB |= (1 << 1); //????? Is dit juist ????
Flank1=0;
wait=0;
while(wait<10000)
wait++;
}
else;Ziet iemand de fout??? Ik denk dat het ergens zit bij het schrijven van de uitgangen.
if (PIND==0x7F & eFlank1==1)
Zou ik veranderen naar:
if ((PIND==0x7F) && eFlank1)
en als ik het verkeerd begrepen heb:
if ((PIND==0x7F) & eFlank1)
Ik zou van int Flank1 en int eFlank1 een bool maken, wel moet je dan #include <stdbool.h> toevoegen.
PORTB |= (1 << 1); //????? Is dit juist ????
Betekend een 1 1 plaats naar links schuiven of vermenigvuldigen met 2^1. In dit geval betekend dat 2. Vervolgens Or je die met je PORT en set je daarmee het 2e pinnetje of PB1. Die haakjes zijn niet nodig.
[Bericht gewijzigd door critiacrof op (31%)]
Zou ik veranderen naar:
if ((PIND==0x7F) && eFlank1)en als ik het verkeerd begrepen heb:
if ((PIND==0x7F) & eFlank1)
Wat is het verschil???
PORTB |= (1 << 1); //????? Is dit juist ????Betekend een 1 1 plaats naar links schuiven of vermenigvuldigen met 2^1. In dit geval betekend dat 2. Vervolgens Or je die met je PORT en set je daarmee het 2e pinnetje of PB1. Die haakjes zijn niet nodig.
Ik wil eigenlijk gewoon PB0 hoog(laag) maken. Hoe moet ik dit dan doen?