Title: Les 6 - onderwerpen
1Les 6 - onderwerpen
- Ghosting
- Dender (bouncing)
- U(S)ART
- IR
- Toontjes en muziek
- motortjes
- Opdrachten kies er (ten minste) 1
2Ghosting bij multiplexen
Laat Digit 1 zien (wacht)
Laat Digit 2 zien (wacht)
Laat Digit 3 zien (wacht)
Laat Digit 4 zien (wacht)
Doe eventueel ander werk
3Ghosting bij multiplexen
- Laat digit 1 zien
- Zet het nieuwe adres op RE0..RE2
- Zet het nieuwe segment-patroon op RD0..RD7
- Wacht 1 ms
- - Wat gaat hier (heel even) fout?
- - Hoe is dit op te lossen?
4Switch bounce (denderen)
- Als je een drukknop indrukt maakt hij niet 1 keer
contact hij dendert een tijdje (maximaal 50
ms)
5PIC - 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
6PIC - USART
DB038 manual 2.4
716F887 datasheet p 149-164
8BRGH 0
BRGH 1
16F887 datasheet p 149-164
91
0
0
-
1
-
-
R
16F887 datasheet p 149-164
10R
R
-
0
1
0
1
-
16F887 datasheet p 149-164
11PIC 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
12PIC 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)
13PIC 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)
14power van de 2e USB poort
15PIC 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
16PIC 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 '"'
17De 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
18De 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)
19De IR ontvanger
- (alleen) gevoelig voor een 36 kHz signaal.
- Bij 10 afwijking, dus 33-40 kHz, 60 vd.
Afstand.
20De IR ontvanger
- Aanbevolen puls gt 400uS, periode lt 0.4
21De IR ontvanger
22Eenvoudig 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
23DB038 circuit multiplexers
DB038 manual 2.8
24PIC A/D
RA0 ?
- A/D converter vertaald een analoge spanning naar
een waarde 0..255 (8 bits) of 0..1023 (10 bits)
16F887 datasheet p 99-108
25PIC A/D configure pin as analog
16F887 datasheet p 99-108
26PIC A/D aan zetten
16F887 datasheet p 99-108
27PIC A/D channel
?
16F887 datasheet p 99-108
28PIC A/D clock
16F887 datasheet p 99-108
29PIC A/D start, wait
16F887 datasheet p 99-108
30PIC A/D start, wait
?
?
16F887 datasheet p 99-108
31PIC A/D enable, go / done
16F887 datasheet p 99-108
32PIC A/D result format
16F887 datasheet p 99-108
33Read an analog input
- Zet de juiste code op poort RE
- Configureer de pin (RA0) als input (TRISA)
- Configureer de pin (RA0 AN0) in ANSEL als
analoog - Activeer de A/D, selecteer het betreffende
kanaal, selecteer de conversie clock (ADCON0) - Selecteer VSS en VDD als referenties, en de
alignment (ADCON1) - wacht 100 us
- start de conversie (ADCON0)
- wacht tot de conversie voltooid is (ADCON0)
- lees het resultaat (ADRESH, eventueel ADRESL)
34Hoogte en duur
Met een punt er achter 50 langer
35nootnaam ? frequentie
36C4 ¼ E4 ¼ C4 ¼ E4 ¼ C4 ¼ E4 ¼ G4
3/8 Stilte 1/8 G4 3/8 F4 1/8 ...
37DB038 - motortjes
37
Hogeschool Utrecht / Institute for Computer,
Communication and Media Technology
38H-brug (H-bridge)
38
Hogeschool Utrecht / Institute for Computer,
Communication and Media Technology
3939
DB038 manual 2.19
Hogeschool Utrecht / Institute for Computer,
Communication and Media Technology
4040
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
41oefening 1 toetsenbord, A/D, display, UART
- Schrijf een programma dat het toetsenbord leest,
en de ingedrukte toets laat zien op het meest
linker display. De ingedrukte toets bepaalt het
A/D kanaal dat wordt gelezen, en (hexadecimaal)
wordt weergegeven op de rechter 2 displays, en
verstuurd naar de PC via de UART.
42oefening 2 IR
- Maak een IR-reflex detector. Zend een korte IR
puls, lees de IR receiver uit, en laat het
resultaat zien (bv op de Leds).
oefening 3 melodie
Laat een kort stukje van een (bekende) melodie
horen.