Vai al contenuto
PLC Forum


Chiarimenti Su Programmazione Pic


aliasin81

Messaggi consigliati

Salve a tutti spero che questa sia la parte dedicata dal forum per questo tipo di discussione.Ho il seguente problema:

Mi cimento con un pò di elettronica ed ora sto imparando ad utilizzare anche i pic , sto progettando un piccolo termometro digitale con pic a 8 bit con convertitore interno a 10 bit

calcolato il circuito di condizionamento es 0v=-50c e 5v=80c quindi con range di 130 faccio 130/1024=0.12 poi moltiplico per la conversione (adc*0.12)-50=xxC ho la temperatura

ed ora qui il mio problema come posso utilizzare i 10 bit dall'adc tramite i 2 registri ADRESH e ADRESL come se fosse un registro a 16 bit per effetture i calcoli per poi visualizzare tutto su display lcd so che si puo emulare con il pic a 8 bit con matematica a 16 bit,.in rete non sono riuscito a trovare niente calcolando che io programmo in assebly con mplab ide.

grazie della cortese risposta

Link al commento
Condividi su altri siti


Non sei proprio un nuovo utente, quindi dovresti sapere che questa non è la sezione adatta.

Questa volta spsosto io la discussione nella sezione specifica per i microcontrollori; però c'erca di fare più attenzione, se apri la discussione nella sezione corretta è più facile ottenere risposste coerenti.

Per quanto concerne il tuo problema.

Non specifichi il tipo di processore usato, però presumo che is un 8 bits.

In questo caso i dati son sempre su 8 bits. per effettuare i calcoli con interi devi far riferimento alle librerie di aritmentica che usi.

Io solitamente lacoro in "C", quindi non ho di questi problemi, perchè se li smazza il compilatore. ;)

Link al commento
Condividi su altri siti

Grazie Livio della tua risposta il fatto e che sono un auto didatta ed io ho imparato ad usare i pic con assebler e tutte queste funzioni di librerie non le conosco soprattutto in C anche perchè usando MPLB IDE ancora devo arrivarci a queste librerie da inserire nel prog. E' per questo che ho bisogno di aiuto se magari qualcuno riesce ad illuminarmi almeno sui procedimenti matematici ho logici da fare in assembler gia sarebbe tanto. Come descritto il mio problema è convertire i 10 bit di ADRESH e ADRESL come un unico byte per poi visualizzare la in temperatura che altrimenti c'è il rischio che il pic è a 8 bit le temperature superiore a 25.5 o al di sotto dello zero non possono essere visualizzate.

Io so che si può fare ma non mi è chiaro il procedimento per eseguirlo.....

accetto suggerimenti

grazie ancora

Link al commento
Condividi su altri siti

Accacca ti ha linkato una Nota applicativa Microchip che tratta l'uso delle libreire aritmentiche.

Non c'è molto da spiegare se vuoi eseguire dei conti devi perforza usare le funzioni aritmentiche. Le istruzioni di base del PIC non prevedono moltiplicazioni e divisioni tra interi di 2 bytes, quindi o ti costruisci le funzioni o usi quelle che già essitono nelle librerie Microchip.

Come interfacciarle te lo spiega la lubreria stessa con le suo note applicative.

Se invece ti basta un unico byte, invece di convertire la lettura da 10 bits a 8 bits puoi farla direttamen te in 8. Se non ricordo male setti ADCON1 come '00001110' così hai una lettura su 8 bits giustificati a sx. Poi basta eseguire movf ADRESH, W per avere la lettura in accumulatore.

Link al commento
Condividi su altri siti

  • 2 weeks later...

Salve di nuovo a tutti dopo aver visto il link che mi è stato mandato gentilmente da accacca a mio mal grado devo dire che pur troppo non sono stato inlluminato :toobad: ma perchè per quanto mi sforzi o abbia cercato nel web non sono riuscito a trovare la mia stele di rosetta : avrei bisogno degli esempi matematici o grafici su come gestire operazioni matematiche "addizione, sottrazione, moltiplicazione e divisione" tra due registri a 8 bit per l'esigenza di rappresentare numeri superiori a 255 , fare operazioni con numeri a 16bit avendo 2 registri a 8 bit es.750*56 =42000 ecc ecc

byte alto è byte basso come si fondono negli algoritmi per poi dare il risultato, se mi è chiaro il funzionamento posso crearmi la funzione in assebler se copio e basta non risolvo i miei problemi.......devo capire..... :worthy: . .

thank you

Link al commento
Condividi su altri siti

Non esoste una stele di rosetta.

Purtroppo o sai programmare o impari a farlo.

Per fare un'operazione con interi da 16, diponendo di registri da 8, significa che devi usare 2 registri.

Faccio un esempio. Mettiamo che tu debba soppare 750 a 328. avrai a disposizione i seguenti registri (solo per esempio) addendo1 200 e 201, addendo2 202 e 203, somma 2040e 205.

poni 0xEE in 200 (oarte bassa) e 2 in (201) Ora 200 e201 contengono 750 in esadecimale, idem per 328 in esadecimale. Quindi avrai 202 = 0x48 e 203 = 1.

poi esegui:

MOVFW 200

ADDW 202, 204 (somma accumulatore con 202 e risultato in 204)

ADDCF 201 (aggiungo eventuale riporto alla parte alta)

MOVFW 201

ADDW 202,205

Ora in 204 e 205 hai il risultato della somma.

Spero di non aver fatto errori perchè saranno 20 anni almeno che non eseguo una somma in assembler.

per la moltiplicazione o impari a farla in asembler, oppure usi la libreria della Micrichip o di altri.

Ovviamente lavorando con linguaggi ad alto livello come il "C" tutto questo lo fa il compilatore.

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

Ciao livio per quanto riguarda il mio problema e solo quello di far svolgere operazioni matematiche al pic superiori a 255 utilizzando due registri,se ne dovessi usare solo 1 non avrei tanti problemi facendo calcoli semplici vedrò cosa fare a questo punto..........

ti domando io il c++ diciamo che lo conosco ma non ci ho mai programmato e paradosalmete sotto certi aspetti capisco di più l'assembler ma il prog mplab ide si può usare C sicuramente si, magari hai qualche esempio da mandarmi per vedere come C si muove tra i registri del pic credo che sia più facile usare il C per i pic che per il pc credo......

ps ho visto che in assembler si può usare if ed altri funzioni di C ma sul manuale che ho non spiga molto se puoi grazie..........se vuoi ti posso allegare il file ma non so come si fa...........ciao

Link al commento
Condividi su altri siti

Se vuoi imparare a programmare in C con MPLAB IDE ti consiglio di scaricare MPLAB X e il compilatore xc8 per i pic a 8bit.

All'inizio sembra più complicato del vecchio MPLAB ma poi risulta molto comodo da usare.

Per quanto riguarda l'if, l'else, ecc. dell'assembler non sono istruzioni come quelle del C ma direttive, come #if, per scegliere quali righe di codice compilare.

Ciao.

Link al commento
Condividi su altri siti

Ciao giacomo56 mi dai l'idea di qualcuno che la sa lunga su questo argomento :worthy: se uso hi tech asi c compiler di mplab ide e la stessa cosa? e se ci sono esempi comprensibili per confrontare come compilare un prog in C per pic.

E per quanto riguarda quella spiegazione di #if e company per l'assembler sai dirmi qualcosa in più te ne sarei grato grazie :smile:

Link al commento
Condividi su altri siti

se uso hi tech asi c compiler di mplab

Va bene se è la versione compatibile per MPlab e se supporta il dispositivo che stai usando.

di #if e company per l'assembler s...

Sono direttive per l'assemblatore.

Con questa direttiva puoi assemblare un tratto di codice se una certa definizione è vera, altrimenti quel tratto di codice non viene assemblato. In questo modo puoi scrivere un programma che si adatta ad alcune varianti hw, varianti che andrai a specificare.

Devi leggere il manuale MPlab, c'è un intero capitolo dedicato a queste direttive; non è possibile condensare in poche righe un intero capitolo di manuale.

Link al commento
Condividi su altri siti

Grazie livio do un occhiata in giro e in caso ti faccio sapere grazie

p:s io ho un file pdf che spiega alcune di queste definizioni (in inglese) ma da come scritto li, e detto da te non c'è paragone lei e molto più chiaro..... :thumb_yello:

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...