Newsgroup: it.hobby.elettronica.digitale
Titolo: help 16F877A

Buon giorno a tutti !
in luglio ho dovuto interrompere un thread sul PIC 17F877A ma ora vorrei 
tentare una conclusione.
Tre chip acqistati via internet come nuovi non ne vogliono sapere di 
oscillare .Uso un quarzo sicuramente funzionante (verificato con altri 
chip).
Ho tentato di trovare una spiegazione nel manuale Microchip ma senza 
successo se non i diversi modi in cui puo' oscillare il pic: con un quarzo, 
con un oscillatore esterno, con rete RC ecc.
Domanda:
Si puo' intervenire dall'esterno per settare il funzionamento 
dell'oscillatore interno (es. ICprog prevede varie scelte ma non ottengo 
nessun risultato...).
In sostanza : puo' esserci un blocco da qualche parte che possa essere 
rimosso dall'esterno con un comando adeguato?
Dopo le risposte al quesito, se negative,  decidero' con dispiacere se 
buttare nella spazzatura i componenti.
Grazie anticipate
Stevez

 ha scritto nel messaggio 
news:48b1ed58$0$1094$4faf...@reader1.news.tin.it...

scusate il p.s., il quarzo e' un normale 4Mhz 

 chip).
Hai messo il pin 1 (mclr) al + ?
-- 
Do you like me for my brain or my baud?
News 2002 [v 2.08] / StopDialer / PopDuster - 
http://www.socket2000.com
Akapulce portal: 
http://www.akapulce.net


....certamente si perche' inserisco il chip in una scheda su cui gia' 
funziona un16F877a.
Come detto, cerco di capire se si puo' agire sull'attivazione 
dell'oscillatore interno. Preciso che ho anche tentato di iniettare un 
segnale da un oscillatore esterno (del tipo integrato usati nei pc)  sia sul 
pin 13 che sul 14 senza successo. Il rilevamento dell'oscillazione e' fatto 
con l'antico metodo del....frequenzimetro.
Grazie comunque per la tua precisazione.
Stevez 

 chip).
Qual è lo schema elettrico? Com'è fatto il layout? La parte di un
quarzo è critica.

 ha scritto nel messaggio
news:48b27936$0$18147$4faf...@reader3.news.tin.it...

L'unica cosa che devi fare è impostare il bit di configurazione relativo su
XT.
Ovviamente devi anche assicurarti della presenza delle capacità da 22..33pF
sui pin del quarzo stesso e rivolte verso gnd.
Senza di queste l'innesco dell'oscillazione è fortuito e casuale (potrebbe
anche variare da chip a chip)
Dalle tua affermazioni temo di capire che stai tentando di testare un
microcontrollore, senza prima avergli caricato sopra nessun firmware,
ovvero gli dai l'alimentazione e con un frequenzimetro vai a vedere sui pin
dell'oscillatore  se vedi qualcosa.
Rischi di smorzare l'oscillazione del quarzo, inoltre chi ti dice che non ci
siano casualmente delle istruzioni che ti mandano in standby il dispositivo
?
Non è meglio se carichi un semplice programma (lampeggio di un led, toggle
di un pin o altro), comprensivo della programamzione dei bit di
configurazione e vedi se il programma gira ?
Iniettare un clock esterno è certamente possibile, ma devi disabilitare le
parti interne ed inoltre deve essere fatta solo sul pin clock-in.
Non capisco cosa intendi per oscillatore del tipo usato nei pc...
In ogni caso mi sembra che i tuoi metodi siano un pò troppo empirici e
rischiosi ;-)
Roberto P.

 ha scritto nel 
messaggio news:g8tvpp$7eh$1...@tdi.cu.mi.it...

...Ciao Roberto,
convengo, i miei metodi sono un po' (troppo) empirici. Sono consapevole che 
caricare un quarzo, che oscilla ,con qualcosa di esterno puo' bloccare 
l'oscillazione. Tuttavia raramente mi e'  accaduto perche' pongo molta 
attenzione all'accoppiamento col carico eventuale (frequenzimetro).. 
L'oscillatore esterno utilizzato per le perove e' uno di quelli utilizzati 
sulle schede madri dei pc, quegli scatolini (passo DIL) con l'oscillatore 
integrato.
Nelle prove ho pure utilizzato solo il quarzo (4 Mhz) con le due 
capacita'(22pF) verso gnd.
Sul PIC ho caricato un programma raccolto su internet (un vobbulatore di 
frequenza) dato per certamente... funzionante, ma  non ha funzionato nulla . 
Naturalmente gli in/out  ed i pin per il displai lcd sono collegati 
correttamente....
Sulla stessa scheda faccio girare un programma su un pic 877a fornitomi da 
un collega  e funziona perfettamente. Ecco perche' mi accanisco sui miei 
"nuovi" pic che manifestano lo stesso problema (mancanza di oscillazione) 
col programma del vobbulatore. Forse dovrei cercare qualcosa di piu' 
semplice come dici tu anche un solo lampeggio di led in formato .hex  (non 
sono attrezzato per fare di piu' se non caricare files .hex su pic).
Questa e' in breve (si fa' per dire...) la situazione.
Grazie per la risposta
Stevez 

 sono attrezzato per fare di piu' se non caricare files .hex su pic).
E qui definisci la carenza finale... non sei attrezzato per 
qualcosa di piu' che non caricare un programma formato HEX 
sul micro; ti manca di sapere come fare a settare i vari 
"fuses" che sono poi una delle condizioni per le quali il 
micro puo' non funzionare.
I "fuses" sono delle particolari locazioni di memoria 
preposte al set delle caratteristiche di funzionamento del 
microcontrollore; se fai un errore nella programmazione di 
una di queste memorie, e' possibile che il microcontrollore 
si metta in una condizione di attesa e vi rimanga per un 
tempo indefinito.
Molto probabilmente i tuoi micro non sono difettosi, e' solo 
una conseguenza di un errore dovuto al modo di funzionamento 
da te settato nella programmazione!
Cerca se riesci a trovare un programma nel quale siano anche 
inseriti i valori dei "fuses"; e' molto probabile che a quel 
punto funzioni tutto.
Per fare questo, basta che tu guardi, nel programma che usi 
per la programmazione, il set dei "fuses" prima e dopo il 
caricamento del file .Hex.
Se dopo aver caricato il programma .hex i valori sono 
cambiati e rispecchiano le caratteristiche di funzionamento 
previste, prova a alimentare il circuito e avrai la sorpresa 
di vederlo funzionare...
ciao
Angelo


 sono attrezzato per fare di piu' se non caricare files .hex su pic).
Continuo a non capire perchč se hai un programma funzionante che gira su 
altri processori uguali, vuoi provare con un altro programma del quale non 
sei sicuro del funzionamento.
Carica lo stesso sw anche sui pic 'dubbi': se gira, bene, altrimenti butti i 
chip difettosi.
Al limite puoi anche leggere il fw da un pic 'buono' ed utilizzarlo per 
programmare quelli dubbi.
Devi solo essere sicuro che il programmatore che utilizzi sia impostato 
anche per leggere e scrivere anche i configuration bits.
Se il fw č scritto correttamente ed i configuration bits anche, mi sa che 
devi rassegnarti a buttarli.
Roberto P. 

 Roberto P.

 bloccarlo.
Una sonda di un oscilloscopio sia impostata x1 o x10 consente di vedere 
benissimo la forma d'onda 4MHz senza smorzarla.
Altra cosa è invece che stevez stia utilizzando un frequenzimetro, con una 
sonda non specificata e con il quale se l'ampiezza non raggiunge un minimo 
valore non 'aggancia' e quindi non riesce ad effettuare la misura.
[...]
Roberto P. 

 Roberto P.

 ha scritto nel messaggio 
news:48b1ed58$0$1094$4faf...@reader1.news.tin.it...

gentilissimi amici,
ringrazio tutti per le interessanti risposte che se pur incomplete o incerte 
sono comunque correlate alla scarsa precisione delle mie informazioni. Qui 
non e' facile scendere in troppi particolari se non con un thread 
chilometrico, cosa che detesto e che trovo poco rispettosa per chi segue il 
ng.
Comunque ho afferrato il senso delle vostre cortesi indicazioni e vedro' 
cosa fare.  Il pic che funziona e' protetto e (non ho provato) temo che 
tentando di leggerlo o si danneggi il contenuto o non si legga nulla. Quindi 
cerchero' di provara altre vie.
Il tempo...ah gia' il tempo....credo che per raggiungere un risultato utile 
uno degli elementi a disposizione sia il tempo...in questo caso il costo non 
mi interessa....
Grazie ancora ma speravo anche che uscisse almeno un micro-file per fare 
prove.
Saluti
Stevez 

 prove.
Ti conviene montarlo su una bredboard con il minimo indispensabile 
(condensatori e quarzo) inserendo un programmino per far lampeggiare 
un led su una uscita. COme ti è già stato detto è molto importante 
l'impostazione dei fuses, come quello per il watchdog, per il power 
on, per l'oscillatore, etc... etc...
-- 
Printed on 100% recyclable phosphor.


 -- 
...grazie anche a te,
mi sto gia' muovendo in tal senso pero' desideravo una ulteriore 
precisazione : i fuses li imposto nel programmatore (attualmente icprog + 
propic2 clone) o devo scrivere i comandi nel programmino per il led?
Grazie e ciao
Stevez 

 Stevez
ultimamente ho realizzato un piccolo timer con un pic della famiglia
16f8xx e mentre verificavo con l'oscilloscopio che uscissero i vari
segnali che servivano pilotare i display mi è venuto lo schiribizzo di
vedere il clock: appena ho poggiato il puntale il pic si è fermato ed il
timer ha smesso di contare.. ovviamente sull'oscilloscopio non si vedeva
nessun segnale.
Il tutto ha ripreso il regolare funzionamento appena ho tolto la sonda!
Immagino quindi che la capacità della sonda fosse stata sufficiente per
mandare in crisi il quarzo e mi vien da pensare che tu abbia fatto la mia
stessa scoperta! :D
-- 
Davide C.
www.ingegnerando.it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 prove.
non ho letto tutto il thread, ad ogni modo basta chiedere! :D
http://www.ingegnerando.it/cazzatine/led_lampeggiante.hex
Questo è il mio primo programma per i pic.. :°-D  e fa lampeggiare un led
al pin B0 (pin 21). L'ho ricompilato per il tuo pic ed il tuo quarzo e
(salvo errori) dovrebbe funzionare.
PS: per risponderti ad un altra tua domanda.. i fuses vanno impostati nel
programma, non nel compilatore. 
Se ti può interessare ecco il listato:
#include <16F877.h>
#device adc=8
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or
B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#use delay(clock=4000000)
void main()
{
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   set_tris_b(0b00000000); //setto tutti i pin del PORT B come uscita
   output_b(0b00000000);   //presetto tutte le uscite a zero
   while(true)             //realizzo un ciclo While che si ripete
all'infinito
   {                       // la graffa segna l'inizio del ciclo
     output_high(PIN_B0);  // metto a 1 il pin B0
     delay_ms(500);        // aspetto 500ms
     output_low(PIN_B0);   // metto a 0 il pin B0
     delay_ms(500);        // aspetto altri 500ms
   }                       // fine del ciclo, arrivato a questo punto si
riparte dalla prima istruzione


 
Dipende anche dalla tipologia della sonda, una sonda /10 di buona 
qualita' presenta un carico minimo, 10 MOhm con pochi pF in parallelo.
Se la colleghi al lato " drive " dell' oscillatore vedi l' oscillazione, 
se la metti dal lato " ingresso " vedi un segnale molto basso e 
probabilmente spegni l' oscillatore.
Scusate la terminologia non appropriata ma mi pare che rende l' idea...
Mentre una sonda 1 a 1 presenta centinaia di pF che " Ammazzano " l' 
osillatore comunque tu lo colleghi.
Saluti Roberto

 puntale il pic si č fermato ed il timer ha smesso di contare.. 
Eh, se usi dei controller del tubo, che ci possiamo fare? ;-)

 Questo č il mio primo programma per i pic.. 
Quindi sei ancora in tempo per salvare la tua anima.

stevez ha scritto:

Consiglio spassionato (oltre a quello che ti hanno già postato)
USA UN PROGRAMMATORE ORIGINALE
ICD2 costa poco piu di 150 euro , è garantito a vita (se anche lo rompi 
tu, te lo cambiano in 2-3 giorni)
ed eviti eventuali problematiche di pic che a volte NON si programmano
Emanuele
-- 
YOUR ELECTRONICS OPEN SOURCE * 
http://dev.emcelettronica.com

 ha scritto nel messaggio 
news:g8v5b1$b7o$1...@news.newsland.it...

ciao Davide,
grazie per il programmino,  faro' sapere....
Naturalmente ringrazio tutti coloro che hanno dato voce al thread e mi hanno 
indirizzato con vari suggerimenti.
Grazie ancora
Stevez 



ciao Davide,
se mi leggi ancora puoi cortesemente dirmi se questa riga del tuo programma 
e' sintatticamente corretta ?
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
...la barretta fra.... INTERNAL|RTCC...non ha nessun valore....?
grazie ancota e scusa l'incompetenza....
Stevez

 ha scritto nel messaggio 
news:48b55fb3$0$18151$4faf...@reader3.news.tin.it...

Nell'eventualità che ahrfukkio non sia disponibilie, mi intrometto (scusate)
In C, la 'barretta' corrisponde all'operazione OR
Quindi il valore passato alla funzione setup_timer_0 è l'or fra i valori 
RTCC_INTERNAL e RTCC_DIV_1.
Roberto P. 

 ha scritto nel 
messaggio news:g942fj$fml$1...@tdi.cu.mi.it...

ok, grazie Roberto.
ciao
Stevez 

> Nell'eventualitą che ahrfukkio non sia disponibilie, mi intrometto (scusate)
si, infatti ero migrato un paio di giorni al mare.. :-D
grazie per la collaborazione ;-)



bene bene meglio al mare che.....qui...
grazie anche  a te...
Stevez
P.S.    pare proprio che non funzioni l'oscillatore...
ho provato tutti i modi di settaggio dei fuse copiando anche un originale 
che funziona e con questi miei pic non ottengo nulla....
quando collego l'alimentazione si vede nel display che c'e' qualche 
commutazione (penso dovuta al reset iniziale) poi tutto si ferma....
Alla prossima
ciao
Stevez 

(condensatori e quarzo) 
e un resistore da 10 k tra MCLR e vcc.