Microcontroller e sistemi di automazione
Perche` in particolare PIC16C84 e PIC16C71?
Essenzialmente per il basso costo, e per alcune pecugliarita`,
molto interessanti come:
- EPROM programma/dati cancellabile elettricamente,nel PIC16C84.
- 4 Analog imputs, nel PIC16C71.
- piena pins compatibilita` tra 16C84 e 16C71, come sotto mostrato.
TABLE 3-3: PIC16C84/71 PINOUT DESCRIPTION
Pin Name DIP SOIC I/O/P Buffer
No. No. Type Type Description
OSC1/CLKIN 1 16 16 I ST/CMOS3 Oscillator crystal/external clock
input/external clock source input.
OSC2/CLKOUT 15 15 O Oscillator crystal output. Connects
to crystal or resonator in crystal
oscillator mode. In RC mode OSC2
pin outputs CLKOUT which has 1/4
the frequency of OSC1, and denotes
the instruction cycle rate.
MCLR 4 4 I/P ST Master clear (reset) input/prog-
raming voltage input. This pin is
an active low reset to thedevice.
PORTA is a bi-directional I/O port .il_
RA0 17 17 I/O TTL (Analog input 0 on PIC16C71)
RA1 18 18 I/O TTL (Analog input 1 o nPIC16C71)
RA2 1 1 I/O TTL (Analog input 2 on PIC16C71)
RA3 2 2 I/O TTL (Analog input 3 on PIC16C71)
RA4/TOCK1 3 3 I/O ST Can also be selected to be the
clock input to the TMRO timer/-
counter Output is open collector
type.
PORTB is a bi-diredctional I/O port.
PORTB can be software programmed
for internal weak pull-up on
all inputs.
RB0/INT 6 6 I/O TTL/ST1 RB0/INT can also be selected as an
external interrupt pin.
RB1 7 7 I/O TTL
RB2 8 8 I/O TTL
RB3 9 9 I/O TTL
RB4 10 10 I/O TTL Interrupt on change pin.
RB5 11 11 I/O TTL Interrupt on change pin.
RB6 12 12 I/O TTL/ST2 Internupt on change pin.
Serial programming clock.
RB7 13 13 I/O TTL/ST2 Interrupt on change pin.
Serial programming data.
Vss 5 5 P Ground reference for logic and
I/O pins.
Voo 14 14 P Positive supply for logic and
I/Opins.
Legend: I= input O= ouput, I/O= inpuut/output, P= power
= Not used, TTL= TTL input, ST= Schmitt Trigger input
Note 1: This buffer is a Schmitt Trigger input when configured as the
external interrupt.
2: This buffer is a Schmitt Trigger input when used in serial
programming mode.
3: This buffer is a Schmitt Trigger input when configured, in RC
oscillator mode and a CMOS input otherwise.
Architettura dei microcontrollers (PIC16C84 in dettaglio).
In breve, ALU si connette con un bas dati, alla EPROM per ricevere
le istruzioni, e contemporaneamente con un'altro bas dati opera
sulla RAM, e sui registri funzione o d uso generale.
Con FILE REGISTERS si indica la zona da quest'ultimi occupata in RAM,
essendo disposti su due banchi,accessibili alternativamente settando
un flag, a 0 per la bank 0, a 1 per la bank 1.
Le operazioni aritmetico/logiche e di movimento, sono eseguite tramite il
registro fisico W, e le porte di I/O esprimono un livello logico 0/1
sui bits del registro PORTA, oppure PORTB.
Per una panoramica completa sull'architettura dei microcontrollers
(PIC16C84), fare riferimento alla manualistica in formato PDF su:
iniziando col sfogliare 30081E.PDF.
Programmare un microcontroller PIC16Cxxx.
Esiste in commercio un kit della MICROCHIP corredato con:
manuali esaurienti, un programmatore PICSTART interfacciato con
la seriale, RS-232, del computer, assieme al pacchetto, di gestione,
software MPS16B, contenente un macroassembler, perfettamente
aderente a tutte le specifiche dei vari PIC16Cxxx, da un valido
simulatore di processo software/hardware, e dal PICSTART, che permette
di leggere/ignettare il codice macchina sullo specifico PIC16Cxxx.
Attraverso un set di 35 istruzioni assembler, universali per i
PIC16Cxxx, e varie macroistruzioni si implementa l'applicazione
desiderata, tenendo presente che solo la EEPROM del 16C84 e` cancellabile
facilmente tramite la PICSTART.
Riporto di seguito, il set di istruzioni universali, disposte
in modo da permettere un accesso ed un esame rapido.
PIC16Cxxx emnemonic opcode
Hexcod ememonic_arg n[FLAG Hexcod ....... Descrizione
07 ADDWF_f,d 12[CDZ 3Ex ADDLW_k [CDZ ADDs W and
f/k to W.
05 ANDW_f,d 2[Z 39 ANDLW_k [Z ANDs W and
f/k to W.
10bb BCF_f,b 12[none 14bb BSF_f,b 12[none BITs clear f/set f.
18bb BTFSC_f,b 3(none 1Cbb BTFSS_f,b 3(none BITs test f,
skip if clear\set.
20kkk CALL_k { Call subroutine.
01 8fff CLRF_f 2[Z 01 0xxx CLRW [Z 00 64 CLRWDT [TOPO
Clear f/W/watchdog timer.
09 COMF_f,d 12[Z Complement f.
03 DECF_f,d 12[Z 0B DECFSZ_f,d 123(none Decrement f/,
skip if 0.
28kkk GOTO_k {none Goto address.
0A INCF_f,d 12[Z 0F INCFsz_f,d 123(none Increment f/,
skip if 0.
04 IORWF_f,d 12[Z 38 IORLW_k [Z Inclusive OR W
and f/k to W.
08 MOVF_f,d 12[Z 00 8fff MOvWF_f [none 30xx MOVLW_k [none
Move f/W to f/k to W.
00 0xx0 0 NOP [none No operation.
00 09 RETFIE {none 34xx RETLW_k {none 00 08 RETURN {none
Return from interrupt/with k in W/form subroutine.
0D RLF_f,d 12[C 0C RRF_f,d 12[C Rotate left/right
f through carry.
00 63 SLEEP [TOPO Go into standby mode.
02 SUBWF_f,d 12[CDZ 3Cx SUBLW_k [CDZ Subtract W from f/k
from W.
0E SWAPF_f,d 12[none Swap nibbles in f.
06 XORWF_f,d 12[Z 3C XORLW_k [Z Exclusive OR W
and f/k to W.
n = NOTE:
1. When an I/O register is modified as a function of itself ( i.e.,
MOVF PORTB, 1), the value used will be that value present on the pins
themselves. For example, if the data latch is '1' for a pin
configured as input and is driven low by an external device, the data
will be written back with a "0".
2:If this instruction is executed on the TMRO register (and, where applicable,
d=1), the prescaler will be cleared if assigned to the TMRO.
3: If Program Counter (PC) is modified or a conditional test is true, the
instruction requires two cycles. The second cycle is executed as a NOP.
b d x f k = 1 bit = 4 bits = 7/8 bits.
for example: BCF 0x06,0x05 = 10bb
10 + b1 b0(Hex. 2)
Hex. code is 12 86.
[ = 1 cycle ( = 1 (2) cycles { = 2 cycles.
k = litteral f = register file d = direction b = bit from 0 to 7.
Se d(irezione) = 0 il risultato Š posto nel registro W, altrimenti
se d Š 1 (defauult) viene posto in F file-register.
Il macroassembler MPASM.EXE/.TXT, MPSIM.EXE/.TXT, e schemi elettrici
per un programmatore, sono disponibili nei vari siti MCHIP.
Interfacciamento del PIC16C71 col computer.
Nel pacchetto AN555.ZIP vi e` la realizzazione, attraverso il MAX 4232,
dell'interfaccia hardware e software, per il PIC16C71.
Il programma di comunicazione, installato sul 16C71, risulta molto
versatile, per le seguenti caratteristiche:
- adattamento al CLOCK in uso sul microcontroller.
- baudrate di comunicazione, regolabile a piacere.
- polling sul pin di ricezione seriale, ottenuto utilizzando il timer.
- lettura dei 4 analog input, su richiesta del PC.
- un carattere proveniente dalla seriale del computer, rappresenta
la richiesta.
Ora abbinando alla comunicazione, cosi` implementata, una diversa
applicazione,e` possibile da PC testarne il funzionamento.
Quindi il tutto puo` essere visto come un banco di lavoro, dove
sviluppare la nostra specifica sperimentazione sul PIC16C84/71.
Oppure ancora divenire, un semplice modo, ma efficace,
per controllare eventi eprocessi esterni al PC.
Il progetto PicNet, una realta`.
Su www.softheart.com/St/home.htm e` stata pubblicata la
realizzazione di un progetto basato su di una rete, sviluppata con l'ausiglio
del MAX 485, per gestire l'illuminazione di una casa.
Utilizzando un doppino si collegano i nodi, all'interfaccia sul
computer, che puo` regolare/controllare, a distanza, i vari punti luce.
Ogni nodo e` costituito da un MAX 485 connesso alla rete e a un
microcontroller, al quale verra` bypassata la comunicazione.
Il PIC16C84 gestisce l'hardware, attraverso un suo programma
applicativo, con l'obiettivo di operare la regolazione/controllo
proveniente dal l'interruttore relativo al punto luce, o dal PC.
Quindi risulta evidente come il progetto PicNet, affronti, risolvendo,
una problematica e casistica complessa, oltre a sviluppare un
proprio protocollo di comunicazione , basato su pacchetti di dati.
Una rete di microcontroller rappresenta, sicuramente, una
fonte di discussione.