Czesc,
w ramach poznawania AVRow napisalem sobie taki kod jak nizej; wgrany do ATtiny2313, zewn. kwarc, podlaczony do 7447 i 2 przyciskow. Problem polega na tym, ze czasami wszystko dobrze dziala, tj. nacisniecie przyciskow zwieksza/zmniejsza wartosc na wyswietlaczu a czasami jedno nacisniecie powoduje przeskok o 2 wartosci lub nie powoduje nic (nawet przytrzymanie przycisku). Co sie dzieje? I czy da sie to jakos rozwiazac?
-----------------------------------------------------------------
#include <avr/io.h>
#include <inttypes.h>
#include <avr/delay.h>
#define F_CPU 4000000UL
/* PORTB (PIN0..PIN1) -- podlaczone do 7447 */ /* PORTD (PIN5) -- przycisk reset zwierajacy */ /* PORTD (PIN4) -- przycisk reset zwierajacy */
int main() { uint8_t i;
DDRB = 0xFF; PORTB = 0xFF;
DDRD = 0x00; PORTD = 0xFF;
i = 0;
PORTB=14;
while (1) {
while (bit_is_clear(PIND,5) || bit_is_clear(PIND,4)) ; _delay_ms(10);
if (bit_is_clear(PIND,5)) { i++; if (i > 9) i=0; PORTB = i; }
if (bit_is_clear(PIND,4)) {
if (i == 0) { i=9; } else { i--; } PORTB = i; }
while (bit_is_clear(PIND,5) || bit_is_clear(PIND,4)); } return(0); }
-----------------------------------------------------------------