Nopeuden mittaaminen
Tavoitteet Tarkka PALLON nopeuden mittaaminen Ei siis esim. mailan, jota tutka myös mittaisi Mittaaminen aina samalta kohdalta
Anturit Yhdessä portissa 25 ir-lediä ja diodia -> 100 kpl! Toimivat 880 nm alueella
Anturit
Vahvistin
Vahvistin 68,8 km/h
Emolevy Prosessori PIC 18F45xx Efektipiiri ISD2560 20 Mhz ICSP 60 sekuntia Osoitteellinen Sarjaportti MAX232
Emolevy
Mikrokontrollerit Datasheet: http://ww1.microchip.com/downloads/en/devicedoc/39632d.pdf
PIC 18F...
Ominaisuudet
Ominaisuudet
Ominaisuudet
Ominaisuudet
Ominaisuudet
Ominaisuudet
Kotelointi
Kotelointi
Rekisterit=muisti=toiminnot
Rekisterit bittitasolla
PORTx Perus digitaalinen portti Suunta valitaan TRISx muuttujalla 1=5 V (tai ko. käyttöjännite) 0=0 V ADCON1 määrittää digitaalinen vai analoginen
Portin alustus CLRF PORTA ;Initialize PORTA by clearing output data latches CLRF LATA ; Alternate method to clear output data latches MOVLW 0Fh ; Configure A/D MOVWF ADCON1 ; for digital inputs MOVLW 07h ; Configure comparators MOVWF CMCON ; for digital input MOVLW 0CFh ; Value used to initialize data direction MOVWF TRISA ; Set RA<3:0> as inputs RA<5:4> as outputs
Porttien käyttö Alustus: ADCON1=>digt. TRISB-> ulos Käyttö: CLRF PORTB INCFSZ PORTB,f GOTO $-1 MOVLW.255 MOVWF PORTB CLRF PORTB
Ajastin ja laskuri
Laskurin käyttö
Laskurin käyttö TMR0L=0 TMR0H=0 T0CON='10100000' // Käynnistä laskuri pinnistä while(portb,7=0){ // Laske kunnes PORTB,7=1 } T0CON='00100000' //Pysäytä ajastin //Tulokset löytyy: TMR0L ja TMR0H
PWM
PWM MOVLW.80 ;Periodi MOVWF PR2 ;Timer2 max arvo movlw b'00000000' MOVWF T2CON ;ei esijakajia tms. (nopeus) movlw.40 ;Päällä 40/80 =50% PWM movwf CCPR1L BSF T2CON, TMR2ON;Ajastin päälle
RS232 softalla RS232init macro BANK1 bcf TXtris ; set output bsf RXtris ; set input with weak pull-up bcf OPTION_REG,INTEDG ; RS232 interrupt on falling edge BANK0 bsf TXport ; set default state: logical 1 bcf INTCON,INTF ; ensure interrupt flag is cleared bsf INTCON,INTE ; enable RB0/INT interrupt bsf INTCON,GIE ; enable global interrupt endm SEND movlw call endm macro S_string S_string SENDsub SENDw call endm macro SENDsub RECEIVE call btfsc goto movlw movwf _RECa btfsc bsf btfss bcf decfsz rrf decfsz goto call btfss goto endm macro SB_Wait RXport _RSerror 0x08 TEMP1 call T_Wait RXport RXD,0x07 RXport RXD,0x07 TEMP1,w RXD,f TEMP1,f _RECa T_Wait RXport _RSerror ; "SEND 'X'" sends character to RS232 ; first wait sub-routine ; no valid start bit ; number of bits to receive, 9600-8-N-1 ; inter-baud wait sub-routine ; skip if TEMP1 == 1 ; do this only 7 times ; inter-baud wait sub-routine ; check if stop bit is valid ; no valid stop bit ;***** SUBROUTINES ***** SENDsub bcf movlw movwf call _SENDa bsf btfss bcf rrf call decfsz goto bsf call call RETURN movwf TXD ; store in data register TXport ; start bit 0x08 TEMP1 ; number of bits to send, 9600-8-N-1 T_Wait btfsc TXD,0x00 ; send LSB first! TXport TXD,0x00 TXport TXD,f T_Wait TEMP1,f _SENDa TXport ; stop bit T_Wait T_Wait ; due to re-synchronization T_Wait movlw 0x0C RECEPTION movwf TEMP2 goto X_Wait ; FOR TRANSMISSION & ; total wait cycle until next ; bit: 19200 baud ==> 52 us ;*** When entering this subroutine, ISR context restore has already consumed some cycles *** SB_Wait movlw 0x01 ; FOR RECEPTION of start bit movwf TEMP2 ; total wait cycle : 26 us goto X_Wait ; (=> sampling in the center of each bit) X_Wait goto RETURN decfsz TEMP2,1 X_Wait ; WAIT LOOP _RSerror clrf RXD ; invalid data goto _ISR_RS232error ; goto RS232 error handling in ISR
RS232 rauta Alustuksen jälkeen: Lähetys: Vastaanotto: BTFSS 0x0C,TXIF BTFSS 0x0C,RCIF GOTO $-1 GOTO $-1 MOVWF TXREG MOVF RCREG,W
USB
USB Helppoa kun joku toinen on jo tehnyt sen valmiiksi... http://www.sparkfun.com ~20e Sisältää valmiiksi usb bootloaderin Ja softan jolla (USB)sarjaportin kautta saa kaikki toiminnot käyttöön ilman ohjelmointia Materiaali ja softa jos haluaa tehdä itse: http://greta.dhs.org/ubw/index.html
PICin USB kytkentä
USB Bootloader Tunnistuu usb laitteeksi ja on ohjelmoitavissa suoraan ilman muita ohjelmointilaitteita Tyhjä piiri vaatii siis kerran tuon bootloaderinkoodin sisäänsä ohjelmointilaitteella... Saatavissa useita kaupallisia ja opensource Google: Microship usb bootloader Samassa paketissa yleensä.hex picciä varten, ohjelma, jolla pc suorittaa latauksen ja mahdollinen windows ajuri (linux ei tarvitse)
Oma usb laite Bootloader mahdollistaa ohjelmoinnin, mutta ei tarjoa normaaliin ohjelmaan usb:tä (tai mitään muutakaan) Oman ohjelman pohjaksi c-kielisiä saatavissa: Human Interface Device (HID) class firmware Communication Device Class (CDC) firmware Mass Storage Class Firmware Microchip Custom Driver
C-kääntäjä Microchip tarjoaa ilmaisen opiskelijaversion: MPLAB C18 Vaatii MPLAB ohjelmiston (ilmainen) Ilmainen löytyy myös: SDCC - Small Device C Compiler >2.7.0 Ubuntu 8.04 (Hardy Heron) pakettina PikLab (~MPLAB IDE) tukee reilusti ohjelmointilaitteita SDCC:lle mukautettu usb koodi sparkfun levylle: http://greta.dhs.org/ubw/ USB bootloader lataaja linuxille (toimii Microchipin bootloaderin kanssa): http://www.internetking.org/fsusb/