Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Aiuto con registri PIC

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] Aiuto con registri PIC

Messaggioda Foto UtenteZazzu » 22 feb 2017, 19:02

Buonasera a tutti, da un po' di tempo mi ero messo in testa di imparare a programmare i PIC, così l'altro giorno ho ordinatoil pickit 3 della microchip e nel mentre che aspettavo che arrivasse mi sono dedicato alla lettura di qualche guida. Dopo aver letto un ottima guida introduttiva alla programmazione del PIC16f84 ho deciso di cimentarmi nella scrittura del mio primo programma, non per il 16f84, che non ho ha disposizione, ma bensì per il PIC10F200, che ho acquistato insieme al pickit. Ebbene la mia uforìa è durata praticamente da pagina 1 a pagina 13 del datasheet http://ww1.microchip.com/downloads/en/DeviceDoc/40001239F.pdf. Infatti mi aspettavo di trovare 2 registri, uno PORT e uno TRIS, ma andando a vedere la tabella compare solo un generico registro GPIO. A questo punto la mia domanda è: come imposto un pin come input o output se ho a disposizione solamente un registro, che da quello che ho capito dovrebbe essere l'equivalente di PORT, ovvero il registro che mi permette di leggere o scrivere sui pin?
Probabilmente la chiave sta in questa affermazione:
The output driver control register is loaded with the contents of the W register by executing the TRIS f instruction.

A questo punto l'idea che mi sono fatto è che il registro GPIO in pratica non sia altro che il registro PORT, mentre per poter modificare il registro TRIS devo per forza utilizzare il comando TRIS f.
Chiedo però conferma a voi e in caso fosse così vorrei capire perché non mi viene fornito anche l'indirizzo fisico del registro W per poter andare a scriverlo normalmente.
Ringrazio tutti e vi auguro una buona serata.
Avatar utente
Foto UtenteZazzu
10 2
 
Messaggi: 34
Iscritto il: 6 lug 2016, 15:24

2
voti

[2] Re: Aiuto con registri PIC

Messaggioda Foto UtenteBrianz » 22 feb 2017, 19:29

Il problema essenziale, quando si affronta qualcosa di nuovo, è quello di affrontarlo con chiarezza.

1.- 16F84 è un chip extra obsoleto. Il fatto che esistano in rete tutorial deriva dal fatto che essendo così vecchio, c'è stato il tempo di scrivere molto.
Ma, in generale, chi ha scritto lo ha fatto magari con profusione di esempi, ma in realtà senza spiegare un bel niente di come sono strutturati i PIC

2.- infatti 16F84 è classificato da Microchip come Midrange, mentre 10F200 è nella famiglia dei Baseline. Tra le due ci sono serie differenze, tra le quali:
- il registro di direzione TRISIO nei Baseline NON è mappato in memoria ed è raggiungibile solo in scrittura con l'istruzione speciale TRIS.
Nei Midrange, invece, il registro TRIS è in memoria ed è accessibile con le normali. istruzioni
Per cui, volendo accendere un LED collegato a GP2 occorrerà
Codice: Seleziona tutto
       clrf    GPIO            ; preset GPIO latch a 0
; disabilita la funzione T0CKI da GP2
        movlw   b'11011111'
        OPTION                  ; al registro OPTION_REG
; TRISGPIO        --111011     GP2 out
        movlw   b'11111011'
        TRIS     GPIO            ; al registro direzione
; accende LED
        bsf      GPIO,GP2


Per farlo su un Midrange, ad esempio 16F684 con RA2
Codice: Seleziona tutto
; operazioni in bank 0
; inizializzazioni dell' I/O al reset
     clrf    PORTA         ; latch azzerati per i LED spenti
; escludi comparatore per avere I/O digitali
     movlw    0x07
     banksel  CM1CON0
     movwf   CM1CON0
; escludi T0CKI per avere RA2
     banksel OPTION_REG
     bcf      OPTION_REG,T0CS
; direzione pin tutti out
     banksel TRISA
     bcf      TRISA,2
; escludi AD
     banksel ANSEL
     clrf      ANSEL
ledon:
     banksel PORTA
     bsf       PORTA,2


3. - Microchip designa GPIO gli array di I/O dei chip a 6 e 8 pin, mentre designa come PORT quelli dei chip maggiori.

4.- in questi PIC il WREG NON è mappato in memoria e non si può "leggere". Si può usare solo per spostare dati o elaborarli.

Altri info si posso trovare a
http://www.microcontroller.it/

con un corso sui Baseline in Assembly
Avatar utente
Foto UtenteBrianz
5.828 5 10
CRU - Account cancellato su Richiesta utente
 
Messaggi: 858
Iscritto il: 24 mar 2016, 11:27

0
voti

[3] Re: Aiuto con registri PIC

Messaggioda Foto UtenteZazzu » 22 feb 2017, 19:39

Grazie Foto UtenteBrianz, non potevi essere più esaustivo.
E grazie anche per il link, decisamente semplifica molto l'approccio! :ok:
Avatar utente
Foto UtenteZazzu
10 2
 
Messaggi: 34
Iscritto il: 6 lug 2016, 15:24

0
voti

[4] Re: Aiuto con registri PIC

Messaggioda ucr » 10 mar 2017, 21:44

Giusto per curiosità voglio dire che delle 35 istruzioni del PIC 16F84(A), 3 sono deprecate e tra queste rientra TRIS, che formalmente non esiste più.In ogni caso, prima di cominciare a divertirsi con questi simpatici giocattoli, a prescindere dai propri obiettivi e dalla MCU scelta, bisogna ovviamente avere delle nozioni di elettronica digitale e poi occorre prendersi la briga di leggere bene, anche se può sembrare noioso: datasheet, manuale dell'assembler, manuale del compilatore *, standard ANSI/C *, variazioni sullo standard ANSI/C (di solito indicate nel manuale del compilatore)*, standard di codifica come MISRA/C, CERT, MIL-STD ...., NASA etc se si vuole esagerare (anche se il MISRA/C che è il più blando andrebbe adottato sempre e comunque).
PS: non devi necessariamente comprare una MCU per provare a scrivere qualcosa se usi MPLAB; ti basta usare il simulatore integrato! Poi se decidi di procedere a realizzare qualcosa di concreto puoi sempre acquistare il microcontrollore che ti interessa. Se ti vuoi chiarire i dubbi sulle differenze tra PIC10 e PIC16 prova a scrivere qualcosa per entrambe le famiglie e prova col simulatore.


*se si usa il C, cosa sconsigliata per MCU con memoria (entrambe dell'architettura di Harvard) minore di 4K.
ucr
327 2 4 5
---
 


Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti