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

Jak odebrać impuls sygnału z silnika w PIC16F84A (C)?

yariire 11 Lip 2007 19:36 1583 5
REKLAMA
  • #1 4072580
    yariire
    Poziom 11  
    Posty: 5
    Buduję zegarek na podstawie tego tutaj: http://www.bobblick.com/techref/projects/propclock/propclock.html z tą różnicą, że korzystam z innego silnika ( JLN4B02 ) i programuję pica w C.
    Godzina w zegarku wyświetlana jest tak: od jakiegoś punktu zaczynają się wyświetlać odpowiednie diody (ich sekwencje) w odpowiednich odstępach czasu, co w połączeniu z obrotami wywołuje złudzenie optyczne - widzimy godzinę.
    Problem polega na wyznaczeniu punktu startowego do wyświetlania diód. W oryginale jedna z faz silnika jest przekazana do pica na wejście ra4.
    Tak samo u mnie, sygnał sinusoidalny prawdopodobnie o jednym impulsie na obrót silnika. Pytanie brzmi: jak zaprogramować wejście ra4 (lub inne), żeby właściwie wykorzystać ten impuls z silnika?

    Załączam aktualny schemat i proszę o pomoc, gdyż jest to jedyne czego mi brakuje do ukończenia prac, reszta działa :).
    Załączniki:
    • circuit2.pdf (93.08 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 4075700
    dir3ctor
    Poziom 27  
    Posty: 1150
    Pomógł: 71
    Ocena: 50
    Jesli chcesz zeby program reagowal na impuls, to najlepiej wykorzystac do tego port RB0 zaprogramowany jako zewnetrzne przerwanie.
  • REKLAMA
  • #3 4075748
    yariire
    Poziom 11  
    Posty: 5
    Takie rozwiązanie jest mi znane, wiem, że najprościej zastosować fotokomórkę .. problem w tym że jak widać na schemacie wszystkie porty rb0 - rb6 są zajęte, a układ jest już mocno 'napakowany', silnik również okablowałam tak, żeby dostarczyć sygnał do mikrokontrolera. W oryginale zastosowano sygnał w porcie ra4 i jak widać zadziałało i tej wiedzy właśnie mi potrzeba.
  • REKLAMA
  • #4 4075834
    dir3ctor
    Poziom 27  
    Posty: 1150
    Pomógł: 71
    Ocena: 50
    Jesli piszesz w asemblerze to ten fragment odpowiada za detekcje zbocza na RA4:

    
    ;--------
    ; test for index in rotation and store period in period_dup
    ;--------
    Check_index	movf	PORTA,w		;get the state of port a
    		xorwf	flags,w		;compare with saved state
    		andlw	b'00010000'	;only interested in bit 4
    		btfsc	STATUS,Z	;test for edge
    		retlw	0		;not an edge, same as last
    		xorwf	flags,f		;save for next time
    		btfsc	flags,4		;test for falling edge
    		retlw	0		;must have been a rising edge
    		movf	period_count,w	;make a working copy
    		movwf	period_dup	;called period dup
    		clrf	period_count	;a fresh start for next rotation
    		clrf	digit_index	;set to first digit
    		clrf	dot_index	;first column
    


    Dodano po 1 [minuty]:

    A co do tej zajetosci RB0... ze schematu widze ze wyprowadzenia ledow dalo by rade przesunac o 1 port (od RB1 do RB7), ale to juz twoja sprawa jak chcesz to rozwiazac ;-)
  • REKLAMA
  • #5 4075966
    yariire
    Poziom 11  
    Posty: 5
    Widziałam ten kod, niestety nie piszę w assemblerze a w C (niełatwo czyta się czyjeś kody zwłaszcza assemblerowskie). A co do przesunięcia diód to owszem jest to możliwe, ale dosyć kłopotliwe. Wolałabym uniknąć rozbiórki układu i takiej reorganizacji.
  • #6 4076072
    dir3ctor
    Poziom 27  
    Posty: 1150
    Pomógł: 71
    Ocena: 50
    No to ja nie widze problemu... zalezy co chcesz dokladnie osiagnac tym impulsem.

    Powinno byc to cos takiego:

    
    temp = RA4; // zapisuje wartosc portu do temp-a
    while(1) {  // nieskonczona petla
    	if(RA4==1 && temp==0) {  // wykrywam zbocze narastajace
    		...jakis kod...; 
    		break; // wychodze z petli while
    	}
    	if(RA4==0 && temp==1) {  // wykrywam zbocze opadajace
    		...jakis kod...; 
    		break; // wychodze z petli while
    	}
    }
    


    i robisz co tam potrzebujesz w danym momencie. Ten fragment kodu jest zapetlony ( while(1) ) dopoki na RA4 nie nastapi zmiana. Musisz i tym pamietac.

    Jesli nie o to chodzilo to napisz po krotce co chcesz osiagnac.
REKLAMA