Witam, piszę w C (w Programmer's Notepad - WinAvr).
Mam problem z kodem na mikrokontroler ATtiny13.
Zadaniem mikrokontrolera miało być dawanie prądu przez 3 sek. (na PB3) jeśli przed tym na pinie PB4 pojawił się prąd w takim czasie:
1. 500 - 1500 ms
<-przerwa->
2. 30 - 500 ms
<-przerwa->
3. 30 - 500 ms
<-przerwa->
4. 500 - 1500 ms
Problem w tym, że mikrokontroler daje już prąd gdy dam:
2. 30 - 500 ms
<-przerwa->
3. 30 - 500 ms
<-przerwa->
4. 500 - 1500 ms
Tak jakby jedynki nie było...
Dlaczego?
Proszę o pomoc,
Pozdrawiam,
Defozo
Mam problem z kodem na mikrokontroler ATtiny13.
/* "domofon.c" - programik do auto-otwieracza do domofonu */
/* układ ATtiny 1MHz */
/* PB3 - Wyjście - BUZ11 - otwiera drzwi */
/* PB4 - Wejście - dzwonek (wywołanie) */
#define F_CPU 1000000
//#include <avr/eeprom.h>
#include <avr/io.h>
#include <util/delay.h>
int czas = 0;
int czas3 = 0;
int czas2 = 0;
int access1 = 0;
int access2 = 0;
int access3 = 0;
int access4 = 0;
int main (void)
{
DDRB |= _BV(3);
while (1)
{
if ((access1 = 1) || (access2 = 1) || (access3 = 1) || (access4 = 1))
{
_delay_us(1);
czas2 = czas2+1;
if (czas2 > 10000000)
{
access1 = 0;
access2 = 0;
access3 = 0;
access4 = 0;
}
}
if (!(bit_is_clear(PINB,4)))
{
if (access1 == 0)
{
goto access1;
}
if (access2 == 0)
{
goto access2;
}
if (access3 == 0)
{
goto access3;
}
if (access4 == 0)
{
goto access4;
}
goto dalej;
access1:
while (!(bit_is_clear(PINB,4)))
{
_delay_ms(1);
czas3 = czas3+1;
}
if ((czas3 > 500) & (czas3 < 1500))
{
access1 = 1;
}
else
{
access1 = 0;
access2 = 0;
access3 = 0;
access4 = 0;
}
czas3 = 0;
goto dalej;
access2:
while (!(bit_is_clear(PINB,4)))
{
_delay_ms(1);
czas3 = czas3+1;
}
if ((czas3 > 30) & (czas3 < 500))
{
access2 = 1;
}
else
{
access1 = 0;
access2 = 0;
access3 = 0;
access4 = 0;
}
czas3 = 0;
goto dalej;
access3:
while (!(bit_is_clear(PINB,4)))
{
_delay_ms(1);
czas3 = czas3+1;
}
if ((czas3 > 30) & (czas3 < 500))
{
access3 = 1;
}
else
{
access1 = 0;
access2 = 0;
access3 = 0;
access4 = 0;
}
czas3 = 0;
goto dalej;
access4:
while (!(bit_is_clear(PINB,4)))
{
_delay_ms(1);
czas3 = czas3+1;
}
if ((czas3 > 500) & (czas3 < 1500))
{
access4 = 1;
}
else
{
access1 = 0;
access2 = 0;
access3 = 0;
access4 = 0;
}
czas3 = 0;
goto dalej;
}
dalej:
if ((access1 == 1) & (access2 == 1) & (access3 == 1) & (access4 == 1))
{
access1 = 0;
access2 = 0;
access3 = 0;
access4 = 0;
czas = 0;
czas2 = 0;
PORTB |= _BV(3);
_delay_ms(3000);
PORTB = 0x00;
}
}
}Zadaniem mikrokontrolera miało być dawanie prądu przez 3 sek. (na PB3) jeśli przed tym na pinie PB4 pojawił się prąd w takim czasie:
1. 500 - 1500 ms
<-przerwa->
2. 30 - 500 ms
<-przerwa->
3. 30 - 500 ms
<-przerwa->
4. 500 - 1500 ms
Problem w tym, że mikrokontroler daje już prąd gdy dam:
2. 30 - 500 ms
<-przerwa->
3. 30 - 500 ms
<-przerwa->
4. 500 - 1500 ms
Tak jakby jedynki nie było...
Dlaczego?
Proszę o pomoc,
Pozdrawiam,
Defozo