Title: Les 6 - onderwerpen
1Les 6 - onderwerpen
- Code paging
- Switch bounce
- A/D conversie
- Seriele communicatie met een PC(UART - USB -
VCP) - IR
- Muziek
2Code paging
- 11 bits 2k instructies...
3Code paging
- Als je minder dan 2k code gebruikt ? geen
probleem - Anders GOTO ? LGOTO
- CALL ? LCALL
- Maar LGOTO en LCALL worden vertaald naar
meerdere instructies, dus je kan niet skippen!
Wel kan - BANKSEL daarzo
- SKPNZ
- GOTO daarzo
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 heeft 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
7(No Transcript)
8BRGH 0
BRGH 1
91
0
0
-
1
-
-
R
10R
R
-
0
1
0
1
-
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 (1)
- TFM5360
- (alleen) gevoelig voor een 36 kHz signaal.
- Dat signaal mag niet continu zijn (goed is bv.1
kHz 500 us signaal, 500 us uit)
18De IR ontvanger (2)
- (alleen) gevoelig voor een 36 kHz signaal.
- Bij 10 afwijking, dus 33-40 kHz, 60 vd.
Afstand.
19De IR ontvanger (3)
- Aanbevolen puls gt 400uS, periode lt 0.4
20De IR ontvanger (4)
21Eenvoudig 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
22DB038 circuit multiplexers
23PIC A/D
RA0 ?
- A/D converter vertaald een analoge spanning naar
een waarde 0..255 (8 bits) of 0..1023 (10 bits)
24PIC A/D configure pin as analog
25PIC A/D aan zetten
26PIC A/D channel
?
27PIC A/D clock
28PIC A/D start, wait
29PIC A/D start, wait
?
?
30PIC A/D enable, go / done
31PIC A/D result format
32Read 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)
33DB038 circuit luidspreker
34piepen
- RE0..RE3 output, waarde 0x02
- RA1 output
- En nu maar knipperen op RA1
35Hoogte en duur
Met een punt er achter 50 langer
36nootnaam ? frequentie
37C4 ¼ E4 ¼ C4 ¼ E4 ¼ C4 ¼ E4 ¼ G4
3/8 Stilte 1/8 G4 3/8 F4 1/8 ...
38oefening (facultatief) 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 bepaald het
A/D kanaal dat wordt gelezen, en (hexadecimaal)
wordt weergegeven op de rechter 2 displays.
39oefening A/D (facultatief)
- 1) Lees met de A/D converter de potentiometer uit
en laat het 8-bits resultaat zien op 2
zeven-segment displays. - 2) Lees met de A/D converter de LDR uit en laat
het 8-bit resultaat zien op de LEDs
40oefening piepen (facultatief)
- Maak een programma dat 1 keer een piep laat horen
- (bv 4 seconde op 1 kHz)
- Piepen is niets anders dan knipperen, maar dan
met een luidspreker in plaats van een LED, en wat
sneller. - 1 kHz 1ms per puls 500 us hoog / 500 us laag
- 4 seconde 4000 pulsen 80 x 250