De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee?...

38
De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben Emons PB2BN

Transcript of De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee?...

Page 1: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

De PIC Microcontroller Wat is het en wat kun je er mee?

November 2010, v0.9

1

Lex Peters - PE1CVJ

Dick Bronsdijk PA3HBS

Lex Peters PE1CVJ

Ben Emons PB2BN

Page 2: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Inhoud presentatie

• Waarom starten met een PIC Microcontroller?

• hoe werkt het ding

• wat kun je er nu mee

• wat heb je nodig om te starten

• Uitwerking van een PIC project

• Werkende voorbeelden uit de praktijk

VERON afdeling Amstelveen,

25 November 2010

Lex Peters - PE1CVJ

2

Page 3: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

“Peripheral Interface Controller”

Achtergrond en basale werking

3

Lex Peters - PE1CVJ

Page 4: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Waarom een microcontroller? Lex Peters - PE1CVJ

4

• Wat is er mis met de conventionele manier van electronische schakelingen ontwerpen en bouwen?

▫ Helemaal niets!

• Waarom dan toch starten met microcontrolers?

▫ Je kunt bijna alles maken met een handvol componenten en een goed idee

▫ Je hebt nauwelijks ruimte nodig om te ontwikkelen (alleen een PC, wat software, een programmer en een experimenteer (bread) board

▫ Je kunt dingen veel simpeler ontwerpen

▫ Het werkt vaak sneller

▫ Het is te integreren met andere componenten (I2C bus, serieel, USB, CAN bus, 1-wire etc.)

▫ Er is ontzettend veel gratis beschikbaar!!

▫ Er zijn al veel gebruikers forums waar je via internet veel mee kunt delen

▫ En het is gewoon ontzettend leuk om het zelf te kunnen ontwerpen !!!!

Page 5: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Waarom de PIC van Microchip? (er zijn nog zoveel andere typen)

Lex Peters - PE1CVJ

5

Eigenlijk geen speciale reden, ATMEL en TI maken ook hele goede chips met wellicht een betere architectuur, alleen:

• Vanuit de historie zijn er al veel ontwerpen beschikbaar voor de PIC

• PIC modellen zijn upwards compatible

• Binnen de VERON A02 was er al de nodige kennis van PIC Microcontrollers

• Er zijn al een groot aantal 16F88’s PICs en LCD displays verzameld door VERON A02 voor nog op te starten projecten (SWR/Power meter was een idee)

• Er zijn al projecten mee gedaan (denk aan de LC-meter)

• Bijna alle PICs kun je in-circuit programmeren (dus zonder ze uit de schakeling te halen)

• Er zijn een paar hele leuke boeken beschikbaar om mee te starten van Bert van Dam

• JAL (Just Another Language), een gratis open source compiler die via een wereldwijd platform van gebruikers dat steeds meer functionaliteit biedt

• Onderdelen zijn goed verkrijgbaar via VOTI.NL welke is opgezet door

• Wouter van Ooijen, initiator van JAL en de leverancier van de bekende WISP programmers

Dus eigenlijk niet echt een heel speciale reden……….;-)

Page 6: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Architectuur & funkties I Lex Peters - PE1CVJ

6

Voorbeeld: PIC16F887 Block Diagram Wat zit er zoal in een PIC Microcontroller aan functies: • Input/output poorten

digitaal/analoog • AD en DA omzetters • Timer / Clock / Oscillator • Pulse Wide Modulation

(PWM) • Communicatie bussen

(Serial port, USB, I2C, etc.) • Comparator • Memory

Schema uit webcursus van MikroElektronika

Een microcontroller bevat dus veel meer dan alleen een processor!!

Page 7: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Architectuur & funkties II Lex Peters - PE1CVJ

7

Schema uit webcursus van MikroElektronika

Von Neuman architectuur (zoals in de PC)

Harvard architectuur (zoals in de PIC)

• Voordeel: 1 soort memory, makkelijk uitbreidbaar

• Nadeel: zelfde bus voor data en instructies (dus langzamer)

• Focus: data processing

• Voordeel: verschillende bussen voor data en instructies dus snelheidsonafhankelijk

• Nadeel: verschillende soorten memory, niet zo makkelijk uit te breiden

• Focus: besturing

Een microcontroller is eigenlijk een complete computer voor maar een paar Euro ;-)

Page 8: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Instructies en registers Lex Peters - PE1CVJ

8

Schema uit webcursus van MikroElektronika

Een PIC Microcontroller is dus eigenlijk een complete computer, inclusief geheugen en connectie mogelijkheden naar de buitenwereld. Dus ook een eigen, heel simpel operating system. Als we een functie iets willen laten doen moeten we dus dat operating system vertellen wat, hoe, wanneer; kortom via instructies (programma). De aansturing van de beschikbare functies vindt plaats via z.g. registers. De meest basale manier om een programma te schrijven is via Assembler. Via deze taal kan via een beperkte set van instructies alles worden aangestuurd en afgetest. Microchip levert gratis de programma suite MPLAB die naast een editor om het programma te schrijven ook een assembler heeft om het programma om te zetten in hexadecimale codes: de enige taal die een PIC begrijpt.

Page 9: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Assembler vs high level taal Lex Peters - PE1CVJ

9

Voordelen assembler: • Je kunt alles aansturen en afvangen • Het is specifiek voor de PIC en

wordt gratis door de fabrikant geleverd (MPLAB)

• Het zal daarom altijd worden ondersteund

Nadelen assembler: • Je hebt meer basale kennis nodig

van de diepere werking van de controller

• Het leest minder makkelijk • Veel instructies voor simpele

handelingen

Oplossing: high level programmeer taal als C, Basic of JAL • Makkelijker leesbaar en

programmeerbaar door preset functies (maar: uiteindelijke PIC code blijft gelijk)

Schema uit webcursus van MikroElektronika

Page 10: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Nodig om te starten…. Lex Peters - PE1CVJ

10

9-16 V …………………………………….of ……………………………..5 V apart

internet

Serieel /

USB

Software (MPLAB of JAL editor):

1. Een editor om het programma in te schrijven

2. Een Compiler om het geschreven programma om te zetten in machine code

3. Een programma om de machinecode in de PIC Microcontroller te zetten

4. Handig: een VT52 terminal emulatie programma om met de PIC te communiceren

I/O via Display of VT52

In-circuit Prog + Serieel

PC + Software

Interface Bread board

LCD Display

Page 11: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Basale PIC aansluitingen Lex Peters - PE1CVJ

11

Spanning • Meestal 5 V • Sommige 3,3 V Int/ext Oscillator • Interne oscillator • Of extern kristal 4-20Mc • Of extern keramisch filter

I/O poorten • Analoog/Digitaal • Opletten of er pull-up

weerstanden nodig zijn

ADC • Let goed op de

spannningsrange

Voorbeeld van een schakeling met reset en voeding

+

+ -

-

- : Vss

-

+ : Vdd +

Page 12: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Een simpel project in assembler Lex Peters - PE1CVJ

12

Bij het begin van een nieuw project zal er een keuze gemaakt worden met welke PIC er begonnen wordt. Ben’s eerste keus is de PIC 16F88. Bevat : • Twee I/O registers voor analoge input en digitale

input en output. • In- en externe oscillator opties. • Diverse timer opties. • Geschikt voor ICSP. Goed verkrijgbaar en goedkoop. Veel kant en klare software op internet. Ondersteuning in diverse programmeertalen. Later kan altijd nog naar een grotere of kleinere PIC overgestapt worden omdat de code compatibel is. Vraagt wel enige kleine aanpassingen in de broncode en vervolgens draait het programma weer.

+ -

Page 13: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

De 16F88 nader bekeken Lex Peters - PE1CVJ

13

Aansluitingen Per pin meerdere opties mogelijk die in het programma aan of uitgezet moeten worden. Aansluitspanning 5V (Vdd = + en Vss = -) Externe oscillator op OSC1 en OSC2 RAx en RBx indicatie voor poorten A en B met poortnummer x INT = interrupt PGD en PGC nodig voor seriele communicatie met de programmer Ook PGM en MCLR nodig voor programmeren ANx geeft verwijzing naar analoge ingang met poortnummer x Kortom: datasheet is onmisbaar

+ -

Page 14: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Voorbeeldproject Assembler I Lex Peters - PE1CVJ

14

; Name: SWITCH.ASM

;

; Test for switch connected between RA0 and ground and resistor

; of 1000 Ohm between RA0 and + 5 V.

; LED, connected to RB0 via 470 Ohm resistor, shows result.

; Ben Emons, PB2BN, Amstelveen, 21 nov. 2010

;

; Instructions for assembler

;

LIST P=16F88

ERRORLEVEL -302 ;Suppress bank selection msgs

#INCLUDE "p16F88.inc"

__CONFIG _CONFIG1, _CPD_OFF & _CP_OFF & _DEBUG_OFF &

_LVP_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _WRT_PROTECT_OFF &

_HS_OSC & _BODEN_OFF

;================= Start of Code =================

org 100 ;Prevent conflicts with first 20H!

goto Start

; Enable B0 for dig output / A0 for dig input

Start clrf STATUS ;Initialize ports A and B

banksel PORTA

clrf PORTA ;Set port A0 as digital input.

banksel ANSEL

movlw 0x00

movwf ANSEL

movlw b'00000001'

movwf TRISA

clrf PORTB ;Set port B0 as digital output.

movlw b'11111110'

movwf TRISB

BCF STATUS,RP0 ;Select REGISTER BANK 0

; Program

TEST BTFSS PORTA,0 ;Test switch for ON/OFF

GOTO RESET

BSF PORTB,0 ;Set LED 1 ON

GOTO RESULT

RESET BCF PORTB,0 ;Set LED 1 OFF

RESULT GOTO TEST

END

; Instructionset for PIC 16F88 can be found in :

;

; "8-bit CMOS Flash/EEPROM Microcontrollers PIC 16F88"

+

+

-

-

470

1K

S1

Bepaal of S1 wordt gesloten (poort RA0 – input) en laat dan LED D1 branden (poort RB0 - output)

D1

Oscillator etc. even weggelaten in dit voorbeeld

Page 15: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Voorbeeldproject Assembler II Lex Peters - PE1CVJ

15

; Name: SWITCH.ASM

;

; Test for switch connected between RA0 and ground and resistor

; of 1000 Ohm between RA0 and + 5 V.

; LED, connected to RB0 via 470 Ohm resistor, shows result.

; Ben Emons, PB2BN, Amstelveen, 21 nov. 2010

;

; Instructions for assembler

;

LIST P=16F88

ERRORLEVEL -302 ;Suppress bank selection msgs

#INCLUDE "p16F88.inc"

__CONFIG _CONFIG1, _CPD_OFF & _CP_OFF & _DEBUG_OFF &

_LVP_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _WRT_PROTECT_OFF &

_HS_OSC & _BODEN_OFF

;================= Start of Code =================

org 100 ;Prevent conflicts with first 20H!

goto Start

; Enable B0 for dig output / A0 for dig input

Page 16: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Voorbeeldproject Assembler III Lex Peters - PE1CVJ

16

Start clrf STATUS ;Initialize ports A and B

banksel PORTA

clrf PORTA ;Set port A0 as digital input.

banksel ANSEL

movlw 0x00

movwf ANSEL

movlw b'00000001'

movwf TRISA

clrf PORTB ;Set port B0 as digital output.

movlw b'11111110'

movwf TRISB

BCF STATUS,RP0 ;Select REGISTER BANK 0

; Program

TEST BTFSS PORTA,0 ;Test switch for ON/OFF

GOTO RESET

BSF PORTB,0 ;Set LED 1 ON

GOTO RESULT

RESET BCF PORTB,0 ;Set LED 1 OFF

RESULT GOTO TEST

END

Page 17: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

PIC programmers Lex Peters - PE1CVJ

17

De JDM-programmer is een eenvoudige schakeling om te gebruiken om uw programma in de PIC te schrijven. De software hiervoor is ICPROG van Bonny Gijzen. Kijk bij www.ic-prog.com Voor een printje zie www.pi4zlb.nl • Vereist een echte RS232C poort die meestal afwezig is. • Werkt niet met USB → serieel kabeltje! • Geen ondersteuning voor modernere PIC's zoals 16F88. • Advies: kies in zulke gevallen een USB-programmer want die poort is er altijd. Canakit UK1301 met 20-pens ZIF-voet, zie www.canakit.com/usb-pic-programmer.html • Prijs ongeveer € 39.- . • Werkt uitstekend op basis van PICkit2 software van Microchip. • Updates voor nieuwe PIC's is dus geen probleem. • Er is een duurdere versie met 40 pens ZIF-voet. Niet nodig, want de UK1301 kan die via ICSP

programmeren.

WISP648: is verkrijgbaar bij www.voti.nl als bouwpakket en volledig gebouwd • Is volledig compatible met zowel de MPLAB software en hardware van Microchip alsook met de

JAL software. Ondersteuning alle PICs (updateble PIC), • gaat uit van in-line programming (dus geen ZIF-voet) • Goede ervaringen Lex en Dick. • Prijs bouwpakket 29 Euro, • Rs232 naar USB kabel (16 Euro) is nodig voor USB gebruik maar werkt wel goed

Page 18: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Overige hulpmiddelen Lex Peters - PE1CVJ

18

Een ontwikkelbordje is erg handig en zelf te maken (gaatjesprint). Bread boards zijn handig voor de het hele experimentele stadium. Aantal exemplaren aanwezig in het clubhuis voor experimenten op de technische avonden. Zijn ook in de handel te koop. Voor een idee, zie bij www.voti.nl onder o.a. DWARF-board. Daar vindt men ook printjes voor LCD display of analoge aansluitingen. Op internet is voor PIC's veel software te vinden. Vaak met broncode die met kleine aanpassingen goed te gebruiken is. Selectief kijken en u vindt zeker wat u zoekt! Dat bespaart veel werk! Leuke en leerzame projecten zijn vaak compleet te downloaden van internet zoals de Frequentiemeter, zie www.qsl.net/om3cph/counter/counter.html of www.pi4zlb.nl. Vaak is alleen de gecompileerde code beschikbaar en niet de z.g. ‘source code’ die u nog aan kunt passen. Het voordeel is dat u, met een eigen programmer en software wel uw eigen PICs hiermee kunt programmeren. Werken met PIC's vereist wel ervaring met PC, internet, downloaden en installeren van software. Heeft u die kennis (nog) niet denk dan even na voordat er in een impuls met iets begonnen wordt om teleurstellingen te voorkomen.

Page 19: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Zelf een morse decoder ontwerpen o.b.v. de PIC 16F88 met

de high level programmeertaal JAL (Just Another Language)

19

Lex Peters - PE1CVJ

Page 20: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Project ontwerp

20

Wensenlijstje • Ingangsignaal schakelbaar

• Lijn signaal • Microfoon ingebouwd • Keyer

• Signaal hoorbaar (aan/uit schakelbaar)

• In-Circuit Programmeren mogelijk • Seriëele communicatie mogelijk • LCD display

• Gedecodeerde tekst • Woorden per minuut (WPM) • Iets over kwaliteit • Ingangssignaal level?

• Signaal indicatie (Led) • Liefst met reeds aanwezige

componenten

PIC 16F88

NE 567

Micr

Line-in

Tone Decoder

Key

Input select

OpAmp

Max. 200 mV

TTL

LCD 4x20 44780 compatible

ICP Serial

Signal

On/offl

Principe schema

Lex Peters - PE1CVJ

Audio-in

Page 21: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Schema PIC schakeling

21

Lex Peters - PE1CVJ

Schema is getekend met ExpressPCB CAD software die gratis gebruikt kan worden om schema’s te tekenen maar ook om printen te ontwerpen en deze ontwerpen electronisch te laten vervaardigen: http://www.expresspcb.com/

Page 22: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Toondecoder met NE567

22

Lex Peters - PE1CVJ

Maar eerst het gebied analyseren dat we willen gaan automatiseren…..….

Uit datasheet LM567

Page 23: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Analyse van het morse signaal

. . - . t t 3t 3t

F Einde letter

7t

Einde woord

23

De puzzel…. • Een letter in morse bestaat uit

maximaal 6 tekens in de vorm van signalen ‘kort’ en ‘lang’

• De tijdsduur van ‘lang’ is 3 maal die van ‘kort’

• De tijdsduur tussen de tekens is gelijk aan de tijdsduur van ‘kort’

• Het einde van een letter wordt aangegeven doordat de tijdsduur tussen 2 signalen (tekens) niet 1 maal maar 3 maar de lengte van ‘kort’ is

• Het einde van een woord wordt aangegeven met een tijdsduur tussen 2 tekens van 7 maal de duur van ‘kort’

Kort samengevat voor de techneuten….

Lex Peters - PE1CVJ

t t t t

Page 24: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Bepalen woorden per minuut . - - . t t t 3t

P Einde letter

7t

Einde woord

24

Definitie en berekening: • De norm voor het aantal woorden per

minuut is bepaald aan de hand van het aantal keer dat het woord ‘PARIS’ in 1 minuut kan worden geseind (1 maal = 50t)

• Het gaat er dus om om de waarde van t te bepalen (= de tijdseenheid van ‘kort’)

• Een snelheid van 12 WPM betekent dus dat PARIS 12 maal in 60 sec. (1 minuut) wordt geseind

• Dus 1 maal PARIS seinen duurt dus 5 sec. • Dat is gelijk aan 50t dus: t = 5/50, is 0,1

sec = 100 mSec • Vanuit de gemeten duur van een ‘punt’ (t

in sec) kun je dus berekenen dat: WPM = 60/(t*50)

• WPM = 60000/(t*50) = 1200/t (in mSec)

Lex Peters - PE1CVJ

3t 3t t t =14t

3t

A Einde letter

3t t =8t t

3t

R Einde letter

3t =10t t t t t

3t

I Einde letter

t t =6t t

S t t =12t t t t

=50t

. -

. - .

. .

. . .

Page 25: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Programma opzet

Meet signaaltijd hoog

Signaalhoog

Meet signaaltijd laag

Einde letter?

Ja

nee

nee

Display letter

Einde woord?

Display spatie

Start

Ja

Ja

nee

25

Lex Peters - PE1CVJ

Page 26: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Opbouw van een JAL programma

26

Lex Peters - PE1CVJ

Programma commentaar inclusief, auteur, versie, datum, compiler etc. (-- of ‘)

Aangeven welke libraries gebruikt gaan worden: INCLUDE [librarynaam]

Declareren van variabelen: VAR [variabele naam] [type] = [waarde]

Declareren van constanten: CONST [Constante naam] [type] = [waarde]

Definieren van de pin setting: normaal door register setting, met goede library met naam

Initieren van gebruikte periferie zoals: • LCD display • Communicatie bus (serieel, USB, I2C etc.) • Etc.

Het programme zelf als 1 herhalende lus (loop): Forever Loop • Opdracht 1 • Opdracht 2 • Opdracht 2

• Opdracht n End loop

Binnen hoofdprogramma kunnen ook weer loops worden gebruikt: de end loop opdracht heeft altijd betrekking op de laatst gestart loop (LiFo)

Specifieke opdrachten voor de compiler om speciale features aan of uit te zetten bv Pragma ….

Page 27: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Documentatie & bibliotheken

27

Lex Peters - PE1CVJ

-- -- Morse code decoder -- -- October 2010 -- Version 0.12 -- Author: Lex Peters (PE1CVJ) -- -- PIC Processor 16F88 -- and 4*20 display -- JAL 2.4 -- -- include 16F88_bert include lcd_44780_Lex_4x20_16F88

Altijd programma documenteren Versie beheer Compiler indicatie Bibliotheken: alle functies die je kunt bedenken kun je in een bibliotheek opslaan en steeds weer gebruiken. Veel is er al!!! De 16F88_bert library is een standaard JAL bibliotheek waarin alle basale zaken voor een specifieke PIC worden ingesteld. De lcd_44780_Lex_4x20_16F88 library bevat Bv aangepaste functies voor een 4*20 LCD display. Commentaar in JAL begint met een quote (‘) of twee streepjes (--) en kan overal geplaatst worden

Het begin van een programma……

Page 28: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Constanten en pin settings

28

Lex Peters - PE1CVJ

-- Constants Const volatile byte txt_disp10[] ="PE1CVJ CW Decoder " Const volatile byte txt_disp11[] ="Initialising ......." Const volatile byte txt_disp12[] ="Version 0.12 ......." Const volatile byte txt_disp2[] ="WPM: " Const volatile byte txt_disp3[] ="mSec: "

Aparte constante: gebruikt als tabel: Morse tekens worden omgezet in byte Waarde byte is gelijk positie tabel Met deze positie kan de bijbehorende letter worden opgehaald

-- pin setting -- B1 for switching the LED (pin 7) -- B4 to read the morse signal (pin 10) pin_b1_direction = output pin_b4_direction = input

Pin setting: LEDje aansturen met poort b1 Lezen hoog/laag op poort b4

Constanten: Variabelen die gedurende de loop van het programma niet meer veranderen

Const volatile byte LtrDisp[] = “

*TEMNAIOGKDWRUS**QZYCXBJP*L*FVH09*8***7*(;**/=61*******2***3*45*******:****,*****)***********-**'***@****.********?************“

0....5....1....5....2....5....3....5....4....5....5....5....6....5....7....5....8....5....9....5....1....5....1....5....2....5.7

Volatile (zeker stellen van een vaste plek)

Page 29: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Variabelen I

29

Lex Peters - PE1CVJ

-- variables var byte H_Pointer var byte Teller_t var byte Teller_q var byte FouteMeting = 0 -- Unit time op 100 standaard bij start uitgaande van 1 punt 100 mSec -- bij 12 WPM -- Standaard 80 msec is ingeveer 15 WPM var word AvgUnitTime = 80 var volatile byte LetterCode var byte LetterPos var volatile byte HLetterCode -- wordt 1 als einde letter wordt geconstateerd var byte EoL -- wordt 1 als einde woord wordt geconstateerd var byte EoW -- var byte CWspeed -- In de even plekken van "InputBuffer" worden de tijden hoog gemeten -- in de oneven de tijden laag var volatile word InputBuffer[12] var volatile bit DashDot at LetterCode:0 var byte TimeRatio var byte TxtLine[20] var byte WPM

Type variabelen: Bit (0 of 1) Byte (8 bits) Word (16 bits) Logisch (0 of 1) Array (tabel met plaatsindex) Posities (bit) van een variabele van het type Byte

Let op bij rekenen met variabelen: het type moet de uitkomst of tussenwaarde wel kunnen bevatten!

Variabelen eerst definieren voor je ze kunt gebruiken!

Page 30: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Variabelen II

30

Lex Peters - PE1CVJ

Soms wil je maar 1 bit bekijken van een byte (8-bits) Als je zeker hebt gesteld dat de byte variable op een vaste plek staat kun je ook iedere bit ervan een naam geven (alias) Doordat het programma nog in een experimenteel stadium verkeert, zijn er veel extra variabelen gedefinieerd om allerlei zaken te meten, vast te leggen of te displayen. Als alles uiteindelijk werkt kunnen deze weer worden verwijderd.

-- mechaniek voor HighByte en LowByte splitsing Word var volatile word WordValue var volatile byte FW[2] at WordValue var volatile byte HB = FW[1] var volatile byte LB = FW[0] -- var byte bbx var byte NrDashDots var word NrTimeUnits Var word SumHighTimes var volatile bit hbb0 at hlettercode:0 var volatile bit bb0 at lettercode:0 var volatile bit bb1 at lettercode:1 var volatile bit bb2 at lettercode:2 var volatile bit bb3 at lettercode:3 var volatile bit bb4 at lettercode:4 var volatile bit bb5 at lettercode:5 var volatile bit bb6 at lettercode:6 var volatile bit bb7 at lettercode:7

Volatile (zeker stellen van een vaste plek)

Page 31: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Meten van kort en lang

31

Lex Peters - PE1CVJ

-- measure high time (CW key pushed) LED gaat uit FouteMeting = 0 while pin_b4 == 1 loop pin_b1=0 InputBuffer[H_pointer] = InputBuffer[H_Pointer] + 1 delay_1ms(1) end loop if InputBuffer[H_Pointer] < 50 then FouteMeting = 1 end if pin_b1=0 If FouteMeting == 0 then -- measure low time: LED gaat aan while ((pin_b4 == 0) & (word(InputBuffer[H_Pointer+1]) <= 1400)) loop pin_b1=1 InputBuffer[H_Pointer+1] = InputBuffer[H_Pointer+1] + 1 delay_1ms(1) end loop -- End of Word? (EOW) indien laag meer dan 5 maal de unit time If InputBuffer[H_Pointer + 1] >= (7 * word(AvgUnitTime)) then EoW = 1 EoL = 1 end if -- End of Letter? (EoL) indien laagtijd meer dan 3 maal de unit time if inputbuffer[H_Pointer + 1] >= (3 * word(AvgUnitTime)) then EoL = 1 end if

Binnen doorlopende loop (loop forever): Wachten op hoog signaal, Meet de tijdsduur per mSec In “Inputbuffer” op de positie van het ontvangen teken (even) Daarna tijdsduur laag signaal (oneven) meten. Bepaal of het gaat om: • End of Letter (E0L) en/of • End of Word (EoW) zo niet wachten op volgende teken Voor het visuele aspect wordt het Ledje uit en aan gezet bij hoog/laag signaal. Als het hoog signaal korter is dan realistische tijd dan stoorpuls!

Let op: wordt alleen uitgevoerd indien meting correct is (IF statement)

Page 32: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

LetterCode opbouwen

32

Lex Peters - PE1CVJ

In de byte (8 bits) “LetterCode” worden de morsetekens omgezet in 1 (kort) en 0 (lang). Om nu duidelijk te maken dat het om lang gaat en niet om voorloop nullen, begint de waarde altijd met een 1. Na elk teken wordt dat teken (bit) links “in de byte geschoven” waardoor de 1 altijd het begin aangeeft. Een letter of leesteken kan maar maximaal 6 morse tekens bevatten dus de byte zal meer dan 7 relevante bits bevatten dus maximaal waarde 127 krijgen. Als de letter geheel ontvangen is kan de letter representatie uit de tabel worden opgehaalden weergegeven via de procedure ‘ShowLetter’

-- Al 6 morse tekens bereikt? H_pointer begint bij 0 en loopt per 2 op if H_Pointer == 10 then EoL = 1 end if LetterCode = LetterCode << 1 TimeRatio = word(InputBuffer[H_pointer]) / word(AvgUnitTime) If TimeRatio < 2 then DashDot = 1 NrTimeUnits = NrTimeUnits + 1 Else DashDot = 0 NrTimeUnits = NrTimeUnits + 3 end if SumHighTimes = Word(SumHighTimes) + word(InputBuffer[H_Pointer]) -- increment inputbuffer pointer (= 2 maal morse teken counter) -- on forehand H_Pointer = H_pointer + 2 if EoL == 1 then Showletter

Page 33: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Bepalen WPM

33

Lex Peters - PE1CVJ

-- Bepalen WPM, schonen en display WPM ----------------------- WPM = word(60000 / (50 * word(WordValue))) for 3 using Teller_t loop lcd_char_Line_pos(" ",0,(5 + Teller_t)) end loop lcd_num_line_pos(wpm,0,5) -- Display binary the morse lettercode found --------------------- BBx = 48 + bb7 lcd_char_line_pos(BBx,1,0) BBx = 48 + BB6 lcd_char_line_pos(BBx,1,1) BBx = 48 + BB5 lcd_char_line_pos(BBx,1,2) BBx = 48 + BB4 lcd_char_line_pos(BBx,1,3) BBx = 48 + BB3 lcd_char_line_pos(BBx,1,4) BBx = 48 + BB2 lcd_char_line_pos(BBx,1,5) BBx = 48 + BB1 lcd_char_line_pos(BBx,1,6) BBx = 48 + BB0 lcd_char_line_pos(BBx,1,7) ClearInputBuffer

De gemiddelde tijdseenheid kort (t) in mSec is bepaald en daarmee kan worden bepaald wat de woordsnelheid per minuut is (WPM, zie formule voorgaande sheets) Deze wordt vervolgens op positie 5 van eerste regel (aangeduid als 0) op het display weergegeven. Als extra wordt de gedecodeerde morse letter ook als byte binair weergeven om te kunnen controleren of e.e.a. goed werkt. Deze routine wordt nog omgebouwd om de gedecodeerde letter grafisch weer te geven in punten en strepen. Omdat we met een nieuwe letter gaan beginnen wordt de InputBuffer weer leeg gemaakt.

Page 34: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Procedures

34

Lex Peters - PE1CVJ

procedure ShowLetter is if LetterPos < 20 then lcd_char_line_pos(LtrDisp[LetterCode],3,LetterPos) TxtLine[LetterPos] = LtrDisp[LetterCode] LetterPos = LetterPos + 1 Else lcd_clear_line(2) Teller_q = 0 for 20 using Teller_q loop lcd_char_line_pos(TxtLine[Teller_q],2,Teller_q) end loop Teller_q = 0 for 20 using Teller_q loop TxtLine[Teller_q] = " " end loop lcd_clear_line(3) LetterPos = 0 lcd_char_line_pos(LtrDisp[LetterCode],3,LetterPos) TxtLine[LetterPos] = LtrDisp[LetterCode] LetterPos = LetterPos + 1 end if end procedure procedure ClearInputBuffer is Teller_q = 0 for 12 using Teller_q loop InputBuffer[Teller_q] = 0 end loop end procedure

Instructies die vaak herhaald worden kun je in een z.g. procedure zetten die je willekeurig kunt aanroepen. Procedure ShowLetter plaatst de letter op het display en in de line buffer. De letter zelf wordt op basis van de waarde van de variable LetterCode opgehaald uit de Constante tabel LtrDispl Als de Linebuffer vol is wordt de hele regel 4 naar regel 3 geplaatst en wordt weer verder gegaan op een lege regel 4 (4*20 display) Regels 1 en 2 (0 en 1 in het programma) worden gebruikt voor meet informatie gedurende de ontwikkeling. Procedure ClearInputBuffer maakt de collectie tabel InputBuffer leeg die de gemeten tijdwaarden vastlegt (hoog en laag) per morse teken.

Page 35: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Een overzicht van relevante PIC info

35

Lex Peters - PE1CVJ

Page 36: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

PIC Leveranciers / gebruikersgroep Lex Peters - PE1CVJ

36

Microchip is de fabrikant van de PIC Microprocessor. Je kunt op deze site

alle datasheets vinden. Pas wel op de grootte voor je gaat printen:

sommigens zijn enkel honderden bladzijden. Vanaf deze site kan ook de

complete gratis assembler suite worden gedownload van Microchip:

MPLAB. http://www.microchip.com/

Van Ooijen Technische Informatica

Wouter van Ooijen is de initiator van JAL. Hij heeft een eigen web winkel

opgezet en verkoopt daar o.a. PIC processoren maar ook de de bekende

WISP 648 PIC programmer, gebouwd en als bouwpakket.

http://www.voti.nl/

http://www.voti.nl/wisp648/

De JAL gebruikersgroep is eigenlijk de belangrijkste bron van informatie

en vernieuwing (http://code.google.com/p/jallib/). Er is een manual beschikbaar en

op deze site zijn ook veel bibliotheken gepubliseerd. Het manual kan ook

worden gedownload via deze site evenals een grote hoeveelheid

voorbeeld prograamma’s. JAL valt onder de open source agreement

waarvan de voorwaarden ook via deze site zijn te bekijken. Iedereen kan

lid worden van de community en een account aanvragen.

De firma MikroElektronika heeft een erg leuke website met online een

zeer overzichtelijke beschouwing over de werking van microprocessors in

het algemeen en de PIC in het byzonder. http://www.mikroe.com/eng/chapters/view/12/appendix-b-examples/

Page 37: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

JAL Boeken en software Lex Peters - PE1CVJ

37

Absoluut 2 erg leuke en duidelijk geschreven boeken over het gebruik van PIC Microprocessoren in de praktijk. Er worden een 50-tal schakelingen / projectjes beschreven die tot een inzicht leiden in de werking van zowel de PIC maar vooral ook in hoe je deze moet programmeren in JAL.

Het boek gaat hierbij m.n. uit van de:

• 16F877A

• 18F4455

Alsmede het gebruik van de gratis JAL compiler en libraries.

Er zijn onderdelen pakketten bij VOTI.NL te koop die de benodigde onderdelen voor de experimenten bevatten.

Boeken zijn bij o.a. Elektor te bestellen (klik op de links of op de boeken) http://www.elektor.nl/products/books/microcontrollers/pic-microcontrollers.92178.lynkx

http://www.elektor.nl/products/books/microcontrollers/50-pic-microcontroller-projecten.1320803.lynkx

Op de Elektor site staat een link naar de gratis JAL software die weliswaar bij het boek wordt aangeboden maar vrij kan worden gedownload. Naast een Editor, een compiler en een programmer bevat het een zeer uitgebreide bibliotheek, alle programmaatjes in JAL die in projecten van het boek worden gebruikt en een groot aantal andere handige hulpmiddelen. http://www.elektor.nl/extra/b-50-pic-microcontroller-projecten-voor-beginners.1329852.lynkx

Klik voor een directe download van de complete JAL suite van Bert van Dam op het JAL logo. http://www.elektor.nl/Uploads/2010/7/PICdev2.zip

JAL

Page 38: De PIC Microcontroller - pi4asv.nl · De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 1 Lex Peters - PE1CVJ Dick Bronsdijk PA3HBS Lex Peters PE1CVJ Ben

Andere handige links Lex Peters - PE1CVJ

38

David Tait’s PIC archief: www.nomad.ee/PIC/

voor experimenteerboard DEV-08265 en een hoop ander informatie.

www.sparkfun.com

IC-PROG voor seriële programmer software en een hoop ander informatie.

www.ic-prog.com

De site van PI4ZLB voor serieele programmer hardware en een hoop leuke zelfbouw projecten met PICs. Kijk bij de projecten sectie. www.pi4zlb.nl

Veel documentatie en projecten op de site van Peter Halickey.

www.qsl.net/om3cph/counter/counter.html

Breadout Heeft opsteekprintje voor 18 pens PIC'S met ICSP www.breadout.nl

Canakit, voor USB programmerkit.

www.canakit.com/usb-pic-programmer.html