Vai al contenuto
PLC Forum


Pic 16f84 Non Ne Vuole Sapere - programmino di esempio non gira


scalzomen

Messaggi consigliati

Salve a tutti ragazzi.

Mi sto imbattendo da qualche giorno sul mondo dei PIC e mi sto leggendo un po di documenti e tutorial su internet per iniziare a capire qualcosa.

Mi sono costruito un programmatorino che dopo vari problemi (legati in particolare a windows 7) sembra funzionare, anche se con IC-PROG ottengo sempre l'errore all'indirizzo 0000h, mentre con WinPIC funziona a dovere.

Sto quindi provando a inviare al PIC il famoso programmino che fa lampeggiare un led, praticamente il primo in tutti i tutorial, che riporto di seguito essendo breve:

Purtroppo il led sul circuitino di prova non vuol saperne di accendersi...qualcuno mi sa aiutare a capire dove può stare il problema..se nel codice o in qualche errore hardware...magari di programmazione?

Il circuito dovrebbe essere fatto bene...è una scemenza..

Modificato: da scalzomen
Link al commento
Condividi su altri siti


Prima di configurare TRISB, azzera la porta:

bcf STATUS,RP0

clrf PORTB

bsf STATUS,RP0

movlw

movwf TRISB

Ovviamente vale anche per PORTA.

Se non funziona, prova a scollegare il LED lasciando il pin libero e controlla con oscilloscopio.

Ciao.

Link al commento
Condividi su altri siti

Ciao..e grazie per la risposta ma non va neanche così...comunque con oscilloscopio non posso controllare perché non ce l'ho.

Mi sta venendo in mente una cosa...non è che è sbagliata la riga ORG 0x0C che ha un indrizzo esadecimale mentre con radix sono assegnati decimali?

Ma un tale errore non dovrebbe aversi in fase di compilazione?

Link al commento
Condividi su altri siti

Purtroppo non hai un dispositvo che ti permette di debuggare a step, quindi ti tocca farli " a mano".

Fai un programmino semplice, il minimo indispensabile, che accende il LED e lo lascia sempre acceso. Ogni volta che resetti il LED si accende. Poi aggiungi un ingresso il cui stato è copiato da LED, così "ti fai la mano".

Link al commento
Condividi su altri siti

Sono stato stupido io, dovevo capire che usi asm assoluto e non rilocabile.

Modifica queste righe:

ORG 0x0C

Count RES 2

con queste:

CBLOCK 0x0c

Count

Count1

ENDC

Vedrai che funziona.

Una precisazione:

nel loop di attesa, sostituisci

"clrf Count+1" con "clrf Count1"

"decfsz Count+1,1" con "decfsz Count1,1"

L'assembler della Microchip segnala error o warning; non ricordo bene.

Ciao.

Link al commento
Condividi su altri siti

veramente l'assembler mpasmwin non segnalava nulla......infatti l'ho pure scritto sopra...perciò mi pare strano...

che differenza c'è tra le due cose che hai scritto?

me lo chiedeva se non sbaglio l' MPLAB IDE quando ho provato con lui...

[at] Livio: ti riferisci all'assenza di un debugger fisico?

Link al commento
Condividi su altri siti

La compilazione da errore a causa di org 0x0c.

Usa cblock come ti ha detto kappa47 e se non va ancora fai come ti ha suggerito Livio.

Ciao.

Link al commento
Condividi su altri siti

premetto che copiando (sto facendo pratica) un programma simile da un altro tutorial sono riuscito a farlo funzionare...

volevo farvi notare che è dal primo post che vi dico che in compilazione non ho errore alcuno...semplicemente il programmino lo compilo, lo invio ma non funziona.

Grazie per i suggerimenti

Link al commento
Condividi su altri siti

A me da questa linea d'errore:

Error[118] C:\USERS\GIACOMO\PROVA\PROVA.ASM 52 : Overwriting previous address contents (000C)

Language tool versions: MPASMWIN.exe v5.34, mplink.exe v4.34

Il manuale di MPASM dice che ORG serve a riservare spazio nella memoria di programma e non in RAM ed il messaggio d'errore sembra confermarlo.

La guida di Tanzilli, da cui è tratto il file, dice che serve anche per i dati della RAM ma il manuale non lo dice.

Dove stà l'inghippo?

Sembra che le nuove versioni di MPASM non supportano più l'uso di ORG + RES.

Ciao.

Modificato: da giacomo56
Link al commento
Condividi su altri siti

Spero di essere chiaro e di non "salire in cattedra" in queste (poche) righe.

Un programma assoluto è un programma che stabilisci tu da dove "parte" con la direttiva "org" (origin).

Se devi mettere insieme più parti di programma per completare il tuo progetto, come ad esempio subroutine sviluppate da te o da altri (le librerie sono più macchinose da inserire in un programma assoluto) è tua responsabilità stabilire da dove queste subroutine partono.

Risulta evidente che devi sempre controllare dove finisce il programma precedente per stabilire la nuova "org" della parte che aggiungi.

Ti lascio immaginare il casino che ne esce se fai delle modifiche: devi ricalcolare tutto.

In sostanza, un programma assoluto è un programma che gestisci solo tu e che inizia e finisce in un solo "modulo".

Un programma rilocabile è un programma che non ha bisogno di "org" (anzi non devi propio usarla).

Puoi dividere il tuo progetto in più parti (routine matematiche, interfacce verso dispositivi creati da te, ecc.) chiamati moduli.

Per mettere insieme il tutto hai bisogno di un programma chiamato "link" che stabilisce lui tutti gli "org".

Con MPLAB la cosa è automatica se scegli l'asm. rilocabile.

Un programma rilocabile è indispensabile se al progetto partecipano più persone.

La direttiva "res" fa avanzare il puntatore di memoria dalla sua posizione attuale più quella indicata da "res".

Se la direttiva "res" ha una etichetta (label), in un programma assoluto, l’asm. assume che sia in memoria di programma; invece in un programma rilocabile, può essere sia in memoria di programma o di dati.

Strano che l’asm Microchip non segnali errore.

Link al commento
Condividi su altri siti

Innanzitutto vi ringrazio per le delucidazioni...è che io sto partendo proprio da zero con i PIC e il tutorial di Tanzilli forse non mi sta aiutando proprio a dovere...a proposito avete qualche suggerimento su una fonte abbordabile?

quanto a giacomo...forse dipende dalla versione perché io uso la 5.11 e non mi da errore alcuno ecco perché non ci capivamo...infatti adesso ho provato con l'mpasmwin incluso in mplab ide e mi da quell'errore...

[at]kappa47...con me puoi salire tranquillamente in attedra...anzi è quell oche ci vuole...

ho capito la differenza tra absoulte e rilocable...quindi diciamo che utilizzando l'mplabide se scelgo rilocable non deve essere presente nessuna org...giusto? per per questi programmini di esempio è corretto scegliere assoluto o no?

Link al commento
Condividi su altri siti

Questa è una piccola imprecisione. CHi è vecchio come me ha sicuramente usato la tecnica di linkare più moduli assoluti, anzi era pratica comune tenere aree ben definite dove inserire i moduli "sacri" (quelli pluriutilizzati e che sicuramente erano 0 bugs tongue.gif ).

Con l'aumnento delle risorse disponibili, anche a livello di sviluppo, si è con ravenuto che è più conveniente usare un programma di "locator" ed usare moduli rilocabili.

A volte conviene inserire piccoli moduli, con funzioni specifiche, in determinate aree di memoria. In questo caso si inserisece un segmento assoluto con la direttiva "ORG", e poi si ritorna al rilocabile.

Se tu usassi, come programmatore, un ICD della microchip avresti a disposizione uno strumento che ti permette di stabilire break points ed avanzare passo-passo; con lettura dei registri e delle aree di memoria. Così è molto più facile capire gli inghippi.

Link al commento
Condividi su altri siti

In genere con queste modifiche funziona. Ad ogni modo mi ricordo che bastavano piccolezze perchè il programma non funzionasse correttamente.

Il programma che hai scritto dovrebbe funzionare correttamente così com'è.

Ricontrolla i Fuse se sono stati settati correttamente (eventualmente configurali manualmente).

Anche se è la stessa cosa scrivi la direttiva CONFIG in questo modo:

_CONFIG _XT_OSC & _CP_OFF & _WDT_OFF e posizionala prima della direttiva ERRORLEVEL:

PROCESSOR 16F84

RADIX DEC

_CONFIG _XT_OSC & _CP_OFF & _WDT_OFF

ERRORLEVEL -302

...

...

...

Controlla infine il PIC che stai usando, ossia se è un 16F84 o un 16F84A.

Sembrano piccolezze ma sono errori che ho riscontrato le prime volte che ho iniziato a programmare i PIC in assembler.

Saluti

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...