scalzomen Inserito: 1 luglio 2010 Segnala Inserito: 1 luglio 2010 (modificato) 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: 1 luglio 2010 da scalzomen
kappa47 Inserita: 3 luglio 2010 Segnala Inserita: 3 luglio 2010 Prima di configurare TRISB, azzera la porta:bcf STATUS,RP0clrf PORTBbsf STATUS,RP0movlwmovwf TRISB…Ovviamente vale anche per PORTA.Se non funziona, prova a scollegare il LED lasciando il pin libero e controlla con oscilloscopio.Ciao.
scalzomen Inserita: 3 luglio 2010 Autore Segnala Inserita: 3 luglio 2010 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?
Livio Orsini Inserita: 3 luglio 2010 Segnala Inserita: 3 luglio 2010 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".
kappa47 Inserita: 3 luglio 2010 Segnala Inserita: 3 luglio 2010 Sono stato stupido io, dovevo capire che usi asm assoluto e non rilocabile.Modifica queste righe: ORG 0x0C Count RES 2con queste: CBLOCK 0x0c Count Count1 ENDCVedrai 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.
scalzomen Inserita: 3 luglio 2010 Autore Segnala Inserita: 3 luglio 2010 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?
giacomo56 Inserita: 4 luglio 2010 Segnala Inserita: 4 luglio 2010 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.
scalzomen Inserita: 4 luglio 2010 Autore Segnala Inserita: 4 luglio 2010 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
giacomo56 Inserita: 4 luglio 2010 Segnala Inserita: 4 luglio 2010 (modificato) 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.34Il 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: 4 luglio 2010 da giacomo56
kappa47 Inserita: 5 luglio 2010 Segnala Inserita: 5 luglio 2010 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.
scalzomen Inserita: 5 luglio 2010 Autore Segnala Inserita: 5 luglio 2010 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?
Livio Orsini Inserita: 5 luglio 2010 Segnala Inserita: 5 luglio 2010 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 ).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.
Edge Inserita: 5 luglio 2010 Segnala Inserita: 5 luglio 2010 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 16F84RADIX 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
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora