logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[tiny13][c]Tester refleksu. Błąd w programie.

carkar 07 Lip 2010 15:07 1009 4
REKLAMA
  • #1 8270373
    carkar
    Poziom 15  
    
    #define F_CPU 1000000UL
    #include <avr/io.h>
    #include <util/delay.h>               
    
    int main(void)
    {
      int nadal;
      nadal = 0x01;
      DDRB = 0x07;
      PORTB = 0x18;
      while(1) {    
      PORTB &= ~0x06;
      _delay_ms(5647);
      PORTB |= 0x01;
      nadal = 0x01;
      while(nadal) {
      switch (PINB & 0x18) {
      case 0x08:
      PORTB |= 0x02;
      PORTB &= ~0x01;
      nadal = 0x00;
      _delay_ms(3000);
      break;
      case 0x10:
      PORTB |= 0x04;
      PORTB &= ~0x01;
      nadal = 0x00;
      _delay_ms(3000);
      break;
      default:
      break;
      }
      }  
      }
      }
    

    Napisałem taki program, jest to tester refleksu po zaświeceniu diody na PB0 kto pierwszy wciśnie swojego SWICHTA[normalnie zwarty][PB3 i PB4] zaświeci się jego dioda[PB1 i PB2].
    Niestety...
    Dioda PB0 zaświeca się lecz nic więcej....

    P.s.
    Proszę wyjaśnijcie mi jeszcze jedno:
    Kiedy ta część jest tak:
    switch (PINB & 0x18) {

    program zajmuje ~132B
    Kiedy ten fragment zamienię na
    switch (!(PINB & 0x18)) {

    Kod zajmuje tylko ~72B.
    O co biega????
  • REKLAMA
  • Pomocny post
    #2 8273665
    czmi3l
    Poziom 14  
    Dopisz sobie:
    
    case 0x18:	// rownoczesne
    	PORTB |= 0x06;
      _delay_ms(3000); 
    	break;
    

    Jeżeli zapalą się obydwie diody tzn, że przycisk nie jest normalnie zwarty ;-)

    Jeżeli nie pomorze, sprawdź miernikiem wejścia przycisków, czy ich naciśnięcie coś powoduje.

    A co do różnicy w wielkości programu.
    Wyrażenie z ! zwraca ci zaprzeczenie tego co podałeś. Czyli tylko 0 lub 1.
    czyli od razu skacze do default :)
  • REKLAMA
  • #3 8273744
    carkar
    Poziom 15  
    Sprawdzone w prostszy sposób że są normalnie zwarte.... I na 100% ną NZ.

    Jak sformułować warunek switcha.
    Czy moja propozycja jest poprawna dla przycisku normalnie zwartego???

    Cytat:
    Wyrażenie z ! zwraca ci zaprzeczenie tego co podałeś. Czyli tylko 0 lub 1.
    czyli od razu skacze do default Smile

    No tak masz rację. Wielkie dzięki.!! :D
  • REKLAMA
  • Pomocny post
    #4 8273765
    czmi3l
    Poziom 14  
    wydaje mi się, że tak, ponieważ:

    Jeżeli przyciski są normalnie zwarte i podłączone bezpośrednio do nóżek procesora, które są podciągnięte, to wydaje się być w porządku.

    Ponieważ:
    Jeżeli przyciski nie są naciśnięte, wówczas prąd płynie i nie ma napięcia na przyciskach -> PB3, oraz PB4 = 0.

    Czyli wyrażenie (PINB & 0x18) zwróci 0.

    Jeżeli np PB3 wciśnięty, wówczas, zwrócone zostanie 0x08.

    Proponuję podejść z miernikiem i zbadać napięcie na przycisku (od strony nóżki oczywiście) przyciśniętym i rozwartym. Jeżeli napięcie się będzie zmieniać, wówczas coś źle rozumuję :)

    i tego switcha trzeba będzie przerobić.
  • #5 8274822
    carkar
    Poziom 15  
    Jak przerobić??
REKLAMA