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

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

nowpor 08 Lut 2011 20:30 2286 12
  • #1 9123070
    nowpor
    Poziom 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.
  • #2 9123336
    landy13
    Poziom 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)
  • #3 9123498
    nowpor
    Poziom 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 9123767
    skalsky5000
    Poziom 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 9124258
    piotrva
    VIP Zasłużony dla elektroda
    Nie, nie, nie
    Co do odczytu to jeśli cały pory jest jako output to czytaj stany z rejestru PORTB
  • #6 9134267
    elektrofil
    Poziom 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.

    Moderowany przez _Robak_:

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

  • #7 9135588
    pancio
    Poziom 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 9137872
    asembler
    Poziom 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 9138664
    Konto nie istnieje
    Poziom 1  
  • #10 9138686
    asembler
    Poziom 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 9138816
    Konto nie istnieje
    Poziom 1  
  • #12 9455642
    herbutt
    Poziom 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 9456171
    Konto nie istnieje
    Poziom 1  
REKLAMA