Title: Les 6 - onderwerpen
1Les 6 - onderwerpen
- Volgende weken
- Keypad, dender (bouncing)
- U(S)ART
- IR
- Motortjes
- C library
- Opdrachten
- toetsenbord en UART (asm),
- LCD (C)
2Na vandaag
- Week 22
- maandag 32 mei inhaalles voor de
maandag-klas - Week 24 projectweek!
- maandag 14 juni SLO / ABC
- docent(en) aanwezig wo, vry 1000 1400
- Week 25 projectweek!
- docent(en) aanwezig di 1000 1400
- donderdag 24 juni beoordeling woensdag-klas
1000 1500 - vrijdag 25 juni beoordeling maandag-klas 1000
1500 - Practicum opgaven kunnen uiterlijk dinsdag 26
juni worden afgetekend.
3keypad
DB038 manual 2.18
4Keypad lezen
- Maak pin RA1 een ingang (bit 1 in TRISA)
- Maak poort A een digitale poort
- ANSEL 0
- Zet een waarde 0x01, 0x02, 0x04 of 0x08 op PORTD
- Zet een waarde 4 .. 7 op PORTE
- Lees pin RA1
- Doe dit voor alle 16 toetsen
DB038 manual 2.18
5Keypad lezen - demo
main_loop BCF PORTA_SHADOW, 2 LCALL
PORTA_FLUSH LCALL kbd_read XORLW
0xFF MOVWF PORTD_SHADOW LCALL
PORTD_FLUSH MOVLW .4 MOVWF
PORTE_SHADOW LCALL PORTE_FLUSH BSF
PORTA_SHADOW, 2 LCALL PORTA_FLUSH LCALL
M10WAIT LGOTO main_loop END
- errorlevel -307
- errorlevel -302
- include ltDB038-01.INCgt
- include ltkbd.incgt
-
Archive kbd-asm.zip
6Keypad lezen kbd.inc
- LGOTO kbd_inc_end
- define kbd_0 .0
- define kbd_1 .1
- define kbd_2 .2
- define kbd_3 .3
- define kbd_4 .4
- define kbd_5 .5
- define kbd_6 .6
- define kbd_7 .7
- define kbd_8 .8
- define kbd_9 .9
- define kbd_A .10
- define kbd_B .11
- define kbd_C .12
- define kbd_D .13
- define kbd_S .14
- define kbd_H .15
- define kbd_none .16
kbd_read banksel TRISA bsf TRISA,
1 banksel TRISD clrf TRISD banksel
TRISE clrf TRISE banksel ANSEL clrf
ANSEL banksel 0 kbd_test 1, 4,
kbd_S kbd_test 1, 5, kbd_0 kbd_test 1, 6,
kbd_H kbd_test 1, 7, kbd_D kbd_test 2, 4,
kbd_7 kbd_test 2, 5, kbd_8 kbd_test 2, 6,
kbd_9 kbd_test 2, 7, kbd_C kbd_test 4, 4,
kbd_4 kbd_test 4, 5, kbd_5 kbd_test 4, 6,
kbd_6 kbd_test 4, 7, kbd_B kbd_test 8, 4,
kbd_1 kbd_test 8, 5, kbd_2 kbd_test 8, 6,
kbd_3 kbd_test 8, 7, kbd_A retlw
kbd_none kbd_inc_end
kbd_test macro D, E, K movlw D movwf
PORTD_SHADOW LCALL PORTD_FLUSH movlw
E movwf PORTE_SHADOW LCALL PORTE_FLUSH BTFS
C PORTA, 1 RETLW K endm
7Switch bounce (denderen)
- Als je een drukknop indrukt maakt hij niet 1 keer
contact hij dendert een tijdje (maximaal 50
ms)
8PIC - USART
- USART Universal Synchronous / Asynchronous
Receiver Transmitter - wij gebruiken asynchroon
- PIC UART pins zijn verbonden met een FT232R
USB-to-asynchronous converter - Op de PC wordt een (virtuele) seriele poort
aangemaakt (XP en Vista hebben al een driver) - control panel ? system ? hardware ? device
manager ? ports - Evt. driver van www.ftdichip.com gebruiken
- op de PC gebruik je een terminal, bv
HyperTerminal - (hypertrm, 19k2, no parity, no flow control, hu
com3 (?)) - In de image staat een icoon ?
9PIC - USART
power van de 2e USB poort
DB038 manual 2.4
10PIC USART - init
- make TxD (RC6) output, RxD (RC7) input
- SPBRG 19k2 value for high speed
- TXSTA 8 bit, enable, asynch, high speed
- RCSTA enable, 8 bit, continuous, no ADDEN
11PIC USART - send
- wacht tot TSR bit aangeeft dat TSR empty is
- copy het te verzenden byte naar TXREG
- (wacht tot TSR bit aangeeft dat TSR empty is)
PIC USART - receive
- als OERR bit gezet is
- clear CREN
- wacht een paar instructies
- set CREN
- als PIR1 TXIF op 0 gezet is
- lees RCREG, dit is het ontvangen byte
- (anders is er nog niets ontvangen)
12PIC USART demo code subroutines
- UART_INIT call to inistialise the UART for 19k2
- UART_CHAR_SEND sends the char in W
- UART_CHAR_RECEIVE checks the UART for a
received char, C flag set when a char is received
(char in W), C flag is cleared when no char is
received - UART_CLRF_SEND sends the CR LF sequence
Archive uart.zip
13PIC USART demo code main
- MAIN
- CALL UART_INIT
- MOVLW 'H'
- CALL UART_CHAR_SEND
- MOVLW 'i'
- CALL UART_CHAR_SEND
- CALL UART_CLRF_SEND
- MAIN_LOOP
- CALL UART_CHAR_RECEIVE
- SKPC
- GOTO MAIN_LOOP
- MOVWF Char
- MOVLW '"'
- CALL UART_CHAR_SEND
- MOVFW Char
- CALL UART_CHAR_SEND
- MOVLW '"'
14De IR ontvanger
16F887 pins Direction Value
RA2 Digital input Low when an IR signal is received, otherwise high.
RE0 RE2 Outputs 0b110
- RA2 must be a digital input
- RE0..RE2 outputs, value 0b110
DB038 manual 2.8
15De IR ontvanger
- TFM5360 of TSOP1736
- (alleen) gevoelig voor een 36 kHz signaal.
- Dat signaal mag niet continu zijn (goed is bv.1
kHz 500 us signaal, 500 us uit)
16De IR ontvanger
- (alleen) gevoelig voor een 36 kHz signaal.
- Bij 10 afwijking, dus 33-40 kHz, 60 vd.
Afstand.
17De IR ontvanger
- Aanbevolen puls gt 400uS, periode lt 0.4
18De IR ontvanger
19Eenvoudig IR zenden / ontvangen
- 36 kHz ? 28 us per puls ? 5 28 instructies per
fase (hoog en laag) - 400 us / 28 us ? minimaal 14 pulsen, neem bv 30
pulsen - Onmiddelijk daarna de IR ingang lezen (laag
signaal gedetecteerd) - Pauze! (bv. 400 us)
- herhaal
20DB038 - motortjes
20
Hogeschool Utrecht / Institute for Computer,
Communication and Media Technology
21H-brug (H-bridge)
21
Hogeschool Utrecht / Institute for Computer,
Communication and Media Technology
2222
DB038 manual 2.19
Hogeschool Utrecht / Institute for Computer,
Communication and Media Technology
2323
16F887 pins Direction Value
RC0 Output Motor 1 A
RC1 Output Motor 2 enable
RC2 Output Motor 1 enable
RC3 Output Motor 1 B
RC4 Output Motor 2 A
RC5 Output Motor 2 B
A B value Motor effect (if enable is high)
0 0 Brake
0 1 Forward
1 0 Backward
1 1 Brake
- Wat moet je op RC0..RC5 zetten om het
onderstaande te bereiken - Motor 1 (links) vooruit, motor 2 (rechts) vooruit
- Links vooruit, rechts op de rem (bocht naar
rechts) - Links achteruit, rechts vooruit (draai om de as
naar links)
DB038 manual 2.19
Hogeschool Utrecht / Institute for Computer,
Communication and Media Technology
2424
PIC programmeren in C
- Gewoon in MPLAB
- DB038 manual hoofdstuk 5
- Gewoon dubbel-klikken op de .mcp file van een
bestaand C project. - Let op de omvang van de integer types
- Compiler handelt pages en banks af
- De 8-level stack limit bestaat nog steeds!
- PORTA, ADRESL, etc zijn al gedefinieerd
Hogeschool Utrecht / Institute for Computer,
Communication and Media Technology
2525
integers
Types Size Remarks
Bit 1 bit Non-standard see manual
(signed or unsigned) char 8 bits 1 byte
(signed or unsigned) short int 16 bits 2 bytes
(signed or unsigned) int 16 bits 2 bytes
(signed or unsigned) short long int 24 bits 3 bytes non-standard
(signed or unsigned) long int 32 bits 4 bytes
Float 24 bits 3 bytes
Double 24 bits 3 bytes, or 32 bits 4 bytes see manual
Hogeschool Utrecht / Institute for Computer,
Communication and Media Technology
2626
C libraries
Files Contain
db038.h db038.c Configuration fuses, busy waiting, I/O port shadowing, nibble-to-char.
db038-adc.h db038-adc.c Read the A/D converter.
db038-dallas.h db038-dallas.c Access to Dallas one-wire peripherals.
db038-i2c.h db038-i2c.c I2C library.
db038-keypad.h db038-keypad.c 4 x 4 keypad reading.
db038-lcd.h db038-lcd.c HD44780 character LCD initialization, clear, cursor position control, char print, string print, custom character definition.
db038-leds.h db038-leds.c Show values on the seven segment displays and the LEDs.
db038-string.h db038-string.c Character and string functions.
db038-uart.h db038-uart.c UART initialization, character send and receive, string send.
Hogeschool Utrecht / Institute for Computer,
Communication and Media Technology
2727
LCD library
void lcd_init( unsigned char x, unsigned char y
) void lcd_char_print( char c ) // note
\v void lcd_string_print( const char p )
Hogeschool Utrecht / Institute for Computer,
Communication and Media Technology
2828
Simpel C voorbeeld
include "db038-leds.h" include
"db038-adc.h" void main(void) volatile
unsigned int ad_result for()
ad_result adc_potmeter()
display_decimal_show( ad_result, 0, 0, 10 )
Hogeschool Utrecht / Institute for Computer,
Communication and Media Technology
29oefening 1 toetsenbord, UART (asm)
- Schrijf met behulp van de de programmas - een
programma dat het toetsenbord leest, en via de
UART laat zien welke toets er is ingedrukt. Je
programma moet ook reageren als er door de PC een
character naar de PIC wordt verzonden. Bepaal
zelf hoe.
30oefening 2 LCD (C)
- Schrijf in C een programma dat gebruik maakt
van het LCD, en ten minste 1 andere peripheral
(A/D, UART, toetsjes, IR, etc) op het bord.