Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

ATtiny 2313 - jak odczytać port i wygenerować przerwanie?

nowpor 08 Feb 2011 20:30 2256 12
Computer Controls
  • #1
    nowpor
    Level 11  
    Witam
    Jakiś czas temu programowałem sporo na x51, ale to były jeszcze czasy kiedy się to robiło w ASM, a o kompilatorach C to można było pomarzyć - he,he .
    Ale do rzeczy:
    Dostałem płytkę z przkaźnikami i atiny5213 i musze to trochę oprogramować. Pytanie jest następujące:
    1.Czy da się odczytać portB, który steruje 8xprzekaźnik (czyli ustawiony jako output). Chcę to sprawdzić, aby się dowiedzieć - które przekaźniki tak naprawdę są załączone.
    2. Czy da się wygenerować jakieś przerwanie po otrzymaniu znaku na RS-ie bo odczyt w pętli - to moim zdaniem lekka żenada.

    W załączniku plik jaki był ze sterownikiem.

    Piotr.
  • Computer Controls
  • #2
    landy13
    Level 31  
    A cóż to jest "atiny5213"?

    Piszesz: "o kompilatorach C to można było pomarzyć" a wklejasz kod w Bascomie?

    O co Ci tak naprawdę chodzi?

    Jeśli ten procesor to jakiś gorący AVR o którym Google jeszcze nic nie wie to:

    1. Da się. Czytaj rejestr PINB.
    2. Przerwanie to w Bascomie URXC, a w C to ISR(USART_RXC_vect)
  • Computer Controls
  • #3
    nowpor
    Level 11  
    mój błąd chodzi oczywiście o attiny2313. Język w jakim to zostanie napisane jest mi obojętny, a taki po prostu był.
    Za podpowiedź dziękuje.
    Czy ten rejestr (PINB) czyta się jako bajt, czy też czyta po bicie ?
  • #4
    skalsky5000
    Level 21  
    Zależy w czym będziesz pisał w bascomie jest to np. if PINB.1=0 then ..... i możesz bity czytać.W C już trzeba odczytywać cały bajt i maskować w razie potrzeby.
  • #5
    piotrva
    VIP Meritorious for electroda.pl
    Nie, nie, nie
    Co do odczytu to jeśli cały pory jest jako output to czytaj stany z rejestru PORTB
  • #6
    elektrofil
    Level 17  
    NIE, jeżeli chesz znać PRAWDZIWY stan portu czytaj PIN.
    Proponuje proste doświadczenie:
    1)ustaw port jako wyjście (config PORTB=output)
    2) portb=255
    3) sprawdź rejestr PINB zwierając jedno z wyjść do masy

    Tylko w ten sposób poznasz prawdziwy stan pinów, np jeżeli zrobisz to w atmedze na porcie z włączonym JTAG.
    Jeżeli chcesz poznać tylko stan tego co powinno być na wyjściu możesz czytać PORT a nie PIN.

    Moderated By _Robak_:

    Proszę nie proponować rozwiązań mogących uszkodzić mikrokonotroler oraz niezgodnych ze sztuką.
    Post zostawiam jako przestroga jak należy nie robić.

  • #7
    pancio
    Level 16  
    Odczyt z kontrolą stanu bitu (w AVRlib) :
    
    		if(bit_is_clear(PINB, 4))
    		{
    			//akcja
    		}
    


    lub alternatywnie funkcja bit_is_set() lub jak to się robi zgodnie z podtawami programowania w C: if( !(PINB & (1<<PC4) ) - (dzieki mirekk36 :-))

    Odczytanie wartości z rejestru PINx zawsze daje w wyniku "prawdziwy" stan nóżki procesora a nie wystawiony przez uC.
  • #8
    asembler
    Level 32  
    Ciekawi mnie jak podpiety przekaźnik do portu może zasygnalizować ze jest włączony?
    Zadne PINB sie nie odczytuje stanu portu ustawionego na wyjście, tylko Odczyt PORTB.
  • #9
    Anonymous
    Level 1  
  • #10
    asembler
    Level 32  
    Ale autor wyraznie pisze że chce odczytywac to co wpisał do portu.
    A PORTB mozna traktowac jako komorke pamieci i na jej podstawie wykonywac dalszy program.
    PORTB jest R/W.
  • #11
    Anonymous
    Level 1  
  • #12
    herbutt
    Level 11  
    Witajcie
    Ja klawiaturę podpiąłem do portu D i mam problem z jej działaniem w Bascomie. Jak mam odczytać wartość portu D jak w ATtiny2313 brakuje PD.7
  • #13
    Anonymous
    Level 1