Newsgroup: it.hobby.elettronica.digitale
Titolo: PIC Power-up trouble

Ciao a tutti,
sono un hobbista fai da te (no Alpi... ! hai! hai! hai!): ho imparato a
programmare le PIC, mi sono costruito un programmatore universale
semplicissimo di mia ideazione (che però funziona egregiamente!), ma dopo
tanta fatica non riesco a far la cosa più semplice cioè non riesco a far
partire la PIC. Mi sono letto le varie AN della Microchip relative al
problema del "Powering-up" ed ho messo in pratica alcuni suggerimenti
relativi alla stabilizzazione del cristallo, della tensione di ingresso e
del ritardo sul segnale di reset (MCLR), ma non ho concluso molto.
Ora, considerando lo schema più semplice (che ho allegato) e un software
caricato molto semplice anzi demenziale (ma corretto!) che accende solo il
LED e si 'inluppa' fino all'infinito, c'è qualcuno che mi sa dare una
risposta alle seguenti domande:
1. perchè dopo circa 4-5 decimi di sec. smette di funzionare? (i componenti
sono buoni!)?
2. la PIC va forse fuori sincronia rispetto al quarzo? (io devo lasciare
ataccato un filo a mò di antenna su CLKIN per aver quei 4 decimi di
funzionamento! ma anche cambiando il valore dei condensatori la PIC non si
stabilizza)
3. Ma se così on dovrebbe bloccarsi nello stato col led acceso? (Io rilevo
una brusca caduta di tensione ai pin che dovrebbero essere nello stato High,
cioè da +4,5V a +0,85V lavorando con Vcc = +4,5V)
4. perchè un tester con funzioni di frequenzimetro non rivela alcuna
oscillazione ai capi del cristallo? Ha un'impedenza troppo bassa? (se i
puntali sono collegati la PIC non da alcun segno di vita, neanche nei primi
4 decimi di sec.)
Visto che ci sono ... potete togliermi una curiosità? Che differenza c'è tra
un ingresso I/O di tipo TTL ed uno Schmitt Trigger?
Ciao e grazie per il tempo che mi avete dedicato.
Agus

Scusate ma lo schema non me lo fa allegare, cmq uso una PI16F877 con un
cristallo a 20 MHz sostenuto da 2 condensatori ceramici da 15 pF e un LED
collegato tra RB0 e GND. MCLR è direttamente collegato a Vcc, tutti gli
altri pin della PIC sono scollegati.
Ciao
Agus

 MCLR è direttamente collegato a Vcc,
Urrrghh! SENZA RESISTENZA?!!;)
Magari posta anche il codice.... non e' che hai il wdt attivato?
ciao
Claudio F

Non mi viene in mente nulla di intelligente quindi ti faccio alcune domande
sceme magari per puro culo ci azzecco :)
Domanda scema 1: ma se il pic non ti funziona con un programma cosě semplice
come fai a sapere che il programmatore funziona?
Domanda scema 2: l'altro capo dei condensatori l'hai attacato a VGND vero?
Domanda scema 3: Ha messo la resistenza al led?
Domanda scema 4: Vcc = 4.5 lo ottieni con tre pile da 1.5 V? In tal caso ...
sono cariche?
Domanda scema 5: sul chip c'č scritto ce puň arrivare a 20 Mhz?
bye
crbit

 
http://www.enetsystems.com/~lorenzo/fidocad.html
Lo sapevo, fino a pochi giorni fa era ok...
http://www.enetsystems.com/~lorenzo/fidocad.asp
Claudio F

 un ingresso I/O di tipo TTL ed uno Schmitt Trigger?
Ttl ha 2 stadi , 0 volt e 5 volt.
Ciao , luna.

 ha scritto nel messaggio
news:gWL2b.145219$cl3.4...@news2.tin.it...

Grazie per il Link, lo sto scaricando proprio ora ... e per avermi risposto.
Beh!  In realtà ho semplificato molto la precedente mail ed ho omesso tutta
la sperimentazione che gli andava dietro, comunque ho provato quasi tutte le
combinazioni incrociate tra le seguenti voci suddivise per tipologia logica,
ma il risultato è stato lo stesso, così ho descritto solo la più semplice:
cristalli:                                       8 e 20 MHz
condensatori per il cristallo:         da 1pF a 100pF in coppie uguali e
asimmetriche (hai detto che col 22 pF funziona, io ho provato il 27 pF ma
non va ... chissà!)
resistenze per i LED:                   nulla e 10K
resistenza tra Vdd e MCLR:        nulla e 10K
configurazione della PIC:             osc = RC, LP, XT, HS; wdt = on, off;
lvp = off
Nel frattempo ho scoperto che se attacco un filo (con un coccodrillo ad es.)
sulla linea di CLKIN e tengo in mano l'altro capo, il tutto
"pseudofunziona", cioè il LED si accende e rimane acceso indefinitamente, ma
il programma non gira, infatti se aggiungo altri 2 LEDs tra RB1 e RB2 e GND
e li faccio accendere a rotazione si accende solo il LED di RB0 che rimane
ancora acceso indefinitamente tranne che per qualche istantaneo lampeggio
periodico.
Riporto, a seguire, solo il software che uso per pilotare i 3 LEDs visto che
è quello che poi avrà l'ultima parola.
****************************************************************************
**************************************
; Programma di prova per la gestione di 3 Led rossi
; ========== Dichiarazione dei SIMBOLI USATI
==================================
; ========== FINE Dichiarazione dei SIMBOLI USATI
=============================
; ========== Dichiarazione dei REGISTRI
=======================================
STATUS_TEMP  equ 21h   ;STATUS storage per il push/pop dei registri
TO_COUNT  equ 22h   ;contatore time-out
T1_COUNT  equ 23h   ;contatore time-out
T2_COUNT  equ 24h   ;contatore time-out
; ========== FINE Dichiarazione dei REGISTRI
==================================
; ========== MACRO
============================================================
; ========== FINE MACRO
======================================================
; ========== DIRETTIVE AL COMPILATORE
========================================
 list      p=16f876                  ;list directive to define processor
 #include <p16f876.inc>      ;processor specific variable definitions
 __CONFIG _RC_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_ON & _LVP_OFF &
_WRT_ENABLE_ON & _DEBUG_OFF & _CPD_OFF & _CP_OFF
        ; '__CONFIG' directive is used to embed configuration data within
.asm file.
        ; The lables following the directive are located in the respective
.inc file.
; ========== FINE DIRETTIVE AL COMPILATORE
====================================
; ////////// FILE MEMORY
//////////////////////////////////////////////////////
 ORG      0x000           ;processor reset vector
 clrf     PCLATH          ;ensure page bits are cleared
   goto     MAIN           ;go to beginning of program
; ========== Servizi di INTERRUPT
=============================================
 org   0004h   ;inserire eventuali routines di INT qui sotto
; ========== FINE Servizi di INTERRUPT
========================================
; ========== MAIN part
========================================================
MAIN:
 call   Init_Device
main_loop:
 BSF   PORTB,0   ;accendo il LED 7
 call  Delay   ;aspetto
 BCF   PORTB,0   ;spengo il LED 7
 BSF   PORTB,1   ;accendo il LED 6
 call  Delay   ;aspetto
 BCF   PORTB,1   ;spengo il LED 6
 BSF   PORTB,2   ;accendo il LED 5
 call  Delay   ;aspetto
 BCF   PORTB,2   ;spengo il LED 5
 goto   main_loop
; ========== FINE MAIN part
===================================================
; ========== ROUTINES del programma
===========================================
Init_Device ;-------------------- inizializza il plotter ------------------
 BCF   STATUS,RP1
 BSF   STATUS,RP0  ;banco 1
 MOVLW  b'00000000'
 MOVWF  TRISB   ;RB7-RB0 as output
 BCF   STATUS,RP1
 BCF   STATUS,RP0  ;banco 0
 MOVLW  b'00000000'
 MOVWF  PORTB
return   ; -------------------------------------------------------------
; ========== FINE ROUTINES del programma
======================================
Delay ; -------------- genera un ritardo
 ;2 cicli occorrono alla CALL ed altri 2 alla RETURN
 MOVLW  0X06   ;6*256*256*8/8MHz = 0,458752 sec. di ritardo + 6 cicli
 MOVWF  T2_COUNT
Time2Out?
 CLRF  T1_COUNT  ;azzero contatore TimeOut
Time1Out?
 CLRF  TO_COUNT  ;azzero contatore TimeOut
TimeOut?
 INCFSZ  TO_COUNT
 goto   TimeOut?
 INCFSZ  T1_COUNT
 goto   Time1Out?
 DECFSZ  T2_COUNT
 goto   Time2Out?
return   ; -------------------------------------------------------------
; ////////// FINE FILE MEMORY
/////////////////////////////////////////////////
; ========== FINE PROGRAMMA
===================================================
end
****************************************************************************
**************************************
Purtroppo le tabulazioni non sono state riportate bene, cmq il senso non
cambia.
Ciao, alla prossima.
Agus


Grazie anche a te Crbit per avermi risposto,
parte delle risposte alle tue domande le ho meglio dettagliate nella
risposta a Claudio F, qui nello stesso thread, scusa se non le ripeto, ma mi
pare che altrimenti diventi troppo noioso e lungo per tutti gli altri.
R1. Credo che il mio programmatore funzioni perchè rileggendo il programma
direttamente dalla PIC (dopo aver spento addirittura il PC ... a volte mi fa
cose strane!) ottengo gli stessi dati del file .HEX che gli ho scritto sopra
in precedenza. In realtà non so se vi siano delle insidie che possano
invalidare questa prova.
R2. Scusa la mia ignoranza ma VGND è un termine che ho visto solo poche
volte ed ho sempre pensato che fosse un sinonimo di GND. Se con esso
s'intende il potenziale della corrente di uscita dell'alimentazione, la
risposta è Si.
R3. Ho provato sia con che senza resistenza. La corrente max fornita dal pin
della PIC (25 mA) e il breve periodo di accensione del LED (visto che il
circuito non funziona!) garantiscono una prova senza rischi.
R3. L'alimentazione è fornita tramite un alimentatore multi-switch
stabilizzato.
R4. Il datasheet della PIC16F876 dice che 20 MHz sono la massima frequenza
supportata dalla PIC, ma io ho provato anche a 8 MHz nel tentativo di usare
il mio tester con funzioni di frequenzimetro (fino a 10 MHz) per rilevare se
il cristallo funzionava, ma non ho avuto nessun riscontro, forse l'impedenza
del tester non è sufficientemente elevata.
Ok ... speriamo bene! Ciao.
Agus

<m0...@ee.aa> ha scritto nel messaggio
news:IaR2b.43580$zN5.1...@news1.tin.it...

Ciao Luna,
grazie anche a te per la risposta.
Il programma era una vera stupidata ed ho pensato che non fosse utile a
nessuno quindi non l'ho allegato, cmq nella risposta a Claudio F ne ho
inserito uno molto simile (e altrettanto inutile, tranne che per fare delle
mini prove come sto facendo io).
Il tester per la verità arriva fino a 10 MHz e l'ho provato su circuito con
un quarzo da 8 MHz, ma senza buon fine.
In realtà entrambi (TTL e Schmitt Trigger) hanno le due soglie (inferiore e
superiore) che delimitano le bande di oscillazione della tensione per la
definizione dei 2 livelli logici Hi e Low, ma debbono avere anche qualche
differenza che li caratterizza, li distingue e che io non conosco ;)
Ciao
Agus

 differenza che li caratterizza, li distingue e che io non conosco ;)
Ma non ha senso la domanda =) Non c'e' una correlazione tra ttl e schmitt
Ttl e' uno standard che ha due livelli prestabiliti , 0 e 5 volt , il
trigger di schmitt e' un comparatore che serve a creare
un'isteresi tra ingresso e uscita i livelli li scegli tu secondo
l'applicazione , possono essere anche 100 e 500 volt , intendevi questo ?

 è quello che poi avrà l'ultima parola.
Sembra ok, a parte 16F876 invece di 16F877, la forma mnemonica dei bit di
configurazione che non ho provato... piuttosto mi sembra un po' tanto strano
il delay.... se vuoi provare anche questa mia routine:
;---------------------------------------------------------------
; Ritardo di 12 + 9*(n-1) cicli.
; A 8Mhz 1 ciclo = 0,5 microsecondi n=65536 T=0,2949135 sec
;---------------------------------------------------------------
Delay
         clrf   T0_COUNT
         clrf   T1_COUNT
Delay2
         decf   T0_COUNT,f     ;dec parte bassa
         incf   T0_COUNT,w     ;incr. per controllare se torna a 0
         btfsc  STATUS,Z       ;skip se non tornato a zero
         decf   T1_COUNT,f     ;se tornato a zero decrementa parte alta
         movf   T0_COUNT,w     ;carica parte bassa
         iorwf  T1_COUNT,w     ;mette in or con parte alta
         btfss  STATUS,Z       ;se tutto zero termina
         goto   Delay2         ;altrimenti next
         return
Claudio F

 risposta è Si.
si si per me GND = VGND = VSS  per me sono praticamente sinonimi.
Comunque non mi arrovellerei il cervello sulle dimensioni dei condensatori:
io sto facendo le prove su una bread board (le basette bianche con i buchi)
e ho notato (per caso) che il cicuito funziona lo stesso anche senza i
condensatori (probabilmente sono sufficienti le capacità parassite) quindi
credo che ci sia un buona tolleranza da quel punto di vista.
Penultima cosa non so se hai scelto quel particolare pic per una particolare
ragione, ma magari per i primi esperimenti è più facile un 16f84 o un 16f628
(che però richiede già un paio di accorgimenti in più).
Ultima cosa TRIGGER DI SHMITT:
Porta normale: hai tensione V_LOW_MAX    che è la tensione sotto la quale il
segnale viene interpretato come uno zero, V_HI_MIN tensione sopra la quale
si legge un uno. V_HI_MIN > V_LOW_MAX se il segnale è compreso tra le due
soglie il risultato della lettura è sostanzialmente casuale.
Porta con TRIGGER: i limiti funzionano in modo un po' diverso: se parti da
segnale = 0 per poter passare a 1 deve superare V_HI_MIN, finchè non lo
supera la lettura rimane a 0. Se  il segnale è 1 e deve passare a 0 deve
scendere sotto V_LOW_MAX finchè rimane sopra la lettura è 1.
In pratica cambia il comportamento lungo la dinamica del segnale: in una
porta normale, se il segnale è compreso tra i due limiti, genera una uscita
sconosciuta; se c'è il trigger questo non avviene. Il trigger è molto comodo
ad esempio per squadrare e ripulire segnali lenti o rumororsi quali, ad
esempio, quelli provenienti da un pulsante.
bye
crbit

 ha scritto nel messaggio
news:KxY2b.148384$cl3.4...@news2.tin.it...

Ciao Claudio, grazie per i suggerimenti.
Devo dire che il vero problema risiede nel far risuonare il cristallo
assieme alla PIC, non nel software per via di WDT o altro, nè nelle
resistenze dei leds, nè nel segnale MCLR che subisce l'azione di una
tensione mal stabilizzata. Di questo ne sono certo: ho già provato tutte le
soluzioni 'classiche' da datasheet spingendomi anche oltre le soglie che di
solito si consigliano, per esserne certo. La soluzione sarà come al solito
una 'cavolata' come l'uovo di Colombo, sotto agli occhi di tutti ma non
ancora inserito tra le soluzioni ufficiali. Il mio tester non rivela alcuna
vibrazione ai capi del cristallo se non quando tengo in mano quel famoso
filo di cui parlavo l'altra volta, ma anche in questo caso la frequenza
misurata è sotto il KHz, ben al di sotto della frequenza dichiarata per il
cristallo (8 MHz). Il problema, quindi,  si aggira da queste parti: o c'è
una dispersione di corrente in qualche punto e la PIC non riesce a fornire
al cristallo la tensione necessaria ad eccitarlo (qualcuno sa che tensione
si dovrebbe misurare ai capi del cristallo?) od occorrono altri componenti
oltre ai condensatori per sostenere e filtrare meglio l'oscillazione del
cristallo o ancora occorrono dei condensatori con valori o di tipo
particolare e diverso dallo standard, con tolleranze minime.
Ho utilizzato il termine "pseudofunziona" come battuta, è chiaro che non
funziona, però nonostante ciò se si usa solo un led su RB0 il risultato che
si ottiene osservando dall'esterno è corretto, ecco il perchè di 'pseudo'.
Per quanto riguarda le direttive al compilatore, io uso 16F876 perchè questa
è la PIC che voglio usare (non la 16F877). Inoltre a 8 Mhz 1 ciclo = 0,125
microsecondi che per n=65536 mi da T=0,073728375sec; il valore che riporti
di T=0,2949135sec  è riferibile ad un quarzo di 2 MHz.
La routine Delay è interessante, ma a parità di numero di istruzioni, mi
sembra che la mia dia una maggiore flessibilità nell'impostare un ritardo
qualsiasi, oltretutto entro un range di tempo più ampio (anche scambiando
semplicemente l'ordine di alcune istruzioni).

<m0...@ee.aa> ha scritto nel messaggio
news:uVU2b.43874$zN5.1...@news1.tin.it...

Ciao Moon,
come ho già detto ho provato sia con WDT on che off, ma non cambia nulla,
quindi non è lui il problema (o non è il solo problema), cmq lo terrò off.
Il tester funziona, è il cristallo che è pigro!
Perchè dici che non c'è correlazione tra TTL e ST? Se parti dal punto che io
non conosco i due tipi di ingresso ma mi baso solo su alcune loro analogie
visibili dall'esterno, di similitudini ce ne sono diverse. Teniamo buono
l'esempio dei 100 e 500 V per l'ingresso ST:
    - entrambi hanno due soglie (o bande) entro cui definire gli stati
logici
                                                            TTL     |     ST
                soglia max inferiore                0.2V   |    105V (ad es.
in realtà il vero valore non lo so, ma dipenderà dall'isteresi)
                soglia min superiore               4.75V |    480V (ad es.
in realtà il vero valore non lo so, ma dipenderà dall'isteresi)
    - entrambi hanno due stati logici definibili dalle soglie precedenti ed
un'area di indefinibilità intermedia tra le due soglie
                                                            TTL     |     ST
                stato LOW                    0 - 0.2V     |    0 - 105V
                zona indefinita            0.21 - 4.74V  |    106 - 479V
                stato HI                        4.75 - 5V    |    480 - 500V
Da quello che mi hai scritto posso desumere che le differenze tra i due
ingressi stiano nei potenziali degli stati logici (standardizzati per il TTL
e 'personalizzabili' per l'ST) e in una sorta di memoria di tipo isterico
(presente nell'ingresso ST) del valore di tensione in ingresso con cui il
sistema paragona il nuovo valore in ingresso per verificarne le variazioni
verso l'alto o verso il basso. Se è così allora l'ingresso ST possiede delle
soglie variabili da imput ad imput per la definizione degli stati logici, e
che magari sono fisse solo come % del valore di ingresso. Ho capito qualcosa
o mi sono fatto solo un bel volo pindarico!
Ciao
Agus

Ciao Crbit,
grazie mille per le spiegazioni chiare ed esaurienti, le terrò ben
custodite!
Ho scelto la PIC 16f876 perchè devo costruire un timer che gestisca 4
display a led rossi ed alcuni pulsanti oltre ad un transistor di potenza o
un relè, per azionare il mio bromografo. Questo di adesso è solo un piccolo
test, il bello è a seguire! Purtroppo è ancora il mio primo lavoretto ...
ecco il perchè di tutti questi problemi atipici.
Mi hai fatto venire un dubbio: non è che la mia PIC sia in qualche modo
danneggiata? Conosco un posto dove riparano bilance elettroniche, proverò a
farmi programmare da loro questa PIC ed una simile nuova, per vedere se il
problema risiede nel mio programmatore o nella PIC rotta.
Le resistenze sui led servono solo a non far scaldare troppo il led e ad
abbassare i consumi. I pin della PIC in Output possono fornire 20-25 mA max
di corrente regolata: se li collego direttamente a terra non si bruciano
mica (basta che la PIC abbia una normale dispersione di calore), figuriamoci
se c'è anche un bel led in mezzo! Sto usando 10K perchè in casa avevo solo
queste! La luminosità è più bassa ma almeno risparmio energia ;)
Se il mio programmatore saltasse anche qualche locazione di memoria prima di
registrare il programma HEX non succederebbe nulla tranne che aspettare
alcuni cicli di clock in più prima dell'avvio, cmq credo che non lo faccia.
Ti saprò dire dopo le verifiche!
Ciao
Agus

Ciao a tutti gli interessati,
un po' grazie alla pulce che Crbit mi ha messo nell'orecchio, un po' perchè
non riuscivo più a riprogrammarla !P , ho deciso di comprare una PIC nuova e
... udite udite ... sono riuscito a farla funzionare come volevo (quasi!)
utilizzando il semplice schema base a 3 leds sulle porte RB7-5 ed una
resistenza in comune collegata a terra (sia 10K che 1K hanno funzionato
bene), solo che ho dovuto utilizzare la configurazione RC con una resistenza
da 3,3K tra CLKIN e Vcc e un condensatore da 22pF tra CLKIN e GND; CLKOUT è
rimasto flottante. Ho misurato una frequenza massima di poco inferiore a
2MHz che però è ben lontana dai 4MHz abbondanti del datasheet (vedi PIC
16C84), cmq i miei leds si accendevano a rotazione con un intervallo +-
corrispondente a quello calcolato per la frequenza misurata. Il brutto però
deve ancora venire!!!
Gasato, riprogrammo la PIC (il mio programmatore a questo punto ha superato
la prova del nove, sei daccordo Crbit?) per utilizzare la configurazione HS
ed un cristallo da 8MHz; riassemblo il tutto e ... ritorna fuori la stessa
condizione della PIC vecchia, con un solo led +- sempre acceso tranne che
per qualche sfarfallio periodico che avrebbe dovuto coincidere con la
commutazione del led acceso.  In questa configurazione (HS) ho misurato una
frequenza massima di 900 Hz circa, molto lontana dagli 8 MHz!
In generale ho notato che i problemi di funzionamento della PIC si hanno
quando la frequenza di funzionamento è inferiore a 200 KHz circa, con
comportamenti sempre più vicini a quelli programmati nel software man mano
che sale la frequenza raggiunta. A questo punto, ricordando i miei pensieri
iniziali sulla risonanza tra il cristallo ed il circuito interno della PIC,
a maggior ragione, credo definitivamente che il problema risiede nel far
funzionare al meglio il cristallo.
Ma voi non avete mai avuto problemi di questo genere?
Come li avete risolti?
Io ormai ho provato tutte le coppie di condensatori in commercio da 1pF fino
a 100pF da accoppiare al cristallo, ma se non tocco quel benedetto filo
collegato a CLKIN il cristallo non si decide a muoversi dei leds non se ne
accende neppure uno! Purtroppo non conosco la marca dei cristalli che uso e
mi sta venendo il dubbio che siano cristalli trasversali e non paralleli. Ho
provato anche ad usare una resistenza in serie tra CLKOUT ed il cristallo ma
nulla di nuovo. La mia prossima mossa credo sia quella di utilizzare un
generatore d'impulsi esterno per vedere che succede ... mah!
Ciao,
Agus

 pindarico!
E' possibile che le soglie di un ingresso ST siano diverse da quelle standard
TTL, inoltre, in linea di principio e' anche possibile che siano regolabili, ma
normalmente questo non avviene (parlo di "ingressi ST" intendendo ingressi
che hanno il trigger di Schmiddt integrato, ovviamente se lo metti tu esternamente
puoi fare di tutto e di piu').
La differenza piu' importante tra ingressi "standard" e ST e' il fatto che gli
ingressi TTL standard non hanno isteresi, ma esiste una zona "indeterminata"
compresa tra 0,8 V e 2 V che non e' classificata ne' livello alto ne' livello
basso. Se il segnale si mantiene per troppo tempo nella "zona indeterminata"
il circuito comincia a funzionare male. Quindi i segnali logici che applichi ad
un ingresso TTL standard devono avere tranzioni rapide, per rimanere il minor
tempo possibile tra 0,8 V e 2 V. Un ingresso con trigger di Schmiddt,
invece, gazie all'isteresi non ha "zone indeterminate": ogni valore di tensione e'
ammissibile, e il passaggio da livello alto a basso avviene comunque molto
velocemente anche se il segnale di ingresso varia lentamente. Questo ti permette
di pilotare un ingresso ST anche con segnali che hanno variazioni lente o che
sono "sporchi" a causa del rumore, e questa possibilita' e' lo scopo principale
per cui si costruiscono ingressi ST.  Altra differenza e' che spesso gli ingressi
ST tollerano tensioni massime piu' alte (ma non e' scontato, e comunque si parla
di qualche volt, non di certo centinaia).
Ciao,
Daniele

Ciao Daniele,
Grazie per la spiegazione ... 10+ !!! Ora è tutto chiaro.
Ciao
Agus

 Ti saprò dire dopo le verifiche!
Non è corretto scusa! Mica sai che istruzione c'è nelle locazioni
prima (ammesso che il tuo programmatore sbagli)!! Può darsi che ci sia
un NOP e allora ti va anche bene, ma se c'è una istruzione di salto
scusa??? Mica puoi saperlo...
Fai così, segui anche i consigli che ti hanno dato gli altri:
- Procurati un programmatore collaudato! Se guardi l'MLPAB-ICD User's
Guide (
http://www.microchip.com/download/tools/picmicro/icds/mplabicd/51184d.pdf
)
della microchip ci trovi pure gli schemi per realizzare l'ICD
(InCircuit Debugger, ottimo per programmare e debuggare!!). Comunque
magari inizia con uno dei tanti schemini che trovi su internet
(propic2clone va benissimo).
- Monta il tuo circuito di test su una bread-board (se non lo fai
già). Ti viene più pratico poi modificarlo.
- Usa sempre tutti i componenti necessari. Le AN della Microchip vanno
bene come punto di partenza ma dai un'occhiata anche ai tanti circuiti
che trovi in rete, un buon punto di partenza lo trovi su
www.picpoint.it
Ciao
fuzzy_logic

 Fai così, segui anche i consigli che ti hanno dato gli altri:
Lo so sono un pò testardo e può sembrare che non mi curo di ciò che mi si
suggerisce, ma in realtà è proprio l'opposto: io sono sempre molto grato a
chi impiega il suo tempo cercando di aiutarmi, come state facendo voi tutti,
ed è per questo che leggo sempre ogni parola che mi scrivete, la valuto ed
impiego il mio di tempo per rispondervi personalmente, anche se mi ripetete
le stesse cose da tempo e non valutate bene i miei feed-backs. Io vi
rispetto molto e rispetto le vostre idee e ripongo altrettanta fiducia nella
vostra buona volontà. In fondo non ci conosciamo: potreste essere dei
ragazzini che smanettano coi loro giochini o degli scienziati della Nasa. E'
per questo che si deve dare a tutti il massimo rispetto cercando di pensare
che chi ci scrive potrebbe saperne più di noi, e se dice qualcosa che ci
sembra strana, è forse perchè la nostra superficialità non ci ha permesso di
valutarla dal punto di vista giusto, ed è forse proprio quella frase strana
che potrebbe nascondere qualcosa di nuovo ed interessante da imparare. Di
solito si commette un grave errore di preconcetto quando si leggono le mail
di un Newsgroup, pensando, anche inconsciamente, che chi scrive ne sappia
meno di chi risponde e si stabiliscono i ruoli della comunicazione in
termini di chi 'sale in cattedra' e di chi 'prende appunti'. Bene, l'errore
è che questi ruoli non sono fissi e possono invertirsi, così dobbiamo
considerare chi 'prende appunti' come un 'cattedrato momentaneamente in
ferie', almeno fino a quando non siamo certi che 'non ha mai vinto il
concorso'!
Vi prego, non srivetemi più riguardo a resistenze o al mio programmatore,
abbiate fiducia, quando servono uso tutte le resistenze come da manuale ed
il programmatore funziona bene, almeno quanto quello che trovate il giro per
internet.
Se vi va di aiutarmi, il mio problema è quello di far risuonare un cristallo
alla sua frequenaza dichiarata, cosa che normalmente necessita una sola
coppia di condensatori ceramici da 15-39pF per cristalli da 8-20MHz, ma che
nel mio caso sembra non aver successo. Tutto quanto concerne il perchè
questo possa accadere è in tema e ben accetto, il resto ... beh! lo sapete,
è una ripetizione.
Ciao,
Agus

Non sara' che "IL" PIc su e' invcazzato perche' la chiama "LA" PIC?

un ingresso I/O di tipo TTL ed uno Schmitt Trigger?
TTL è il nome della famiglia logica (Transistor-Transistor-Logic), Schmitt
Trigger è il nome di una configurazione circuitale di ingresso che consente di
avere due tensioni di soglia ben definite:
- tensione di soglia relativa alla transizione da 0 a 1 (ad es. 3V)
- tensione di soglia relativa alla transizione da 1 a 0 (ad es. 1.5V).
L'ingresso Schmitt Trigger non presenta quell'intervallo di incertezza (ad es.
tra 0.8 e 2V) tipico delle porte logiche non Schmitt Trigger, all'interno del
quale non è garantito lo stato logico assunto dall'ingresso.

microsecondi 
No, 1 ciclo macchina del pic equivale a 4 cicli di clock, quindi 500ns a 8MHz.

Hai commesso un errore nella definizione delle configuration word:
Se usi un quarzo fino a 8 MHz devi impostare _XT_OSC
Se usi un quarzo piů veloce devi impostare _HS_OSC
Se usi una rete RC devi impostare _RC_OSC...
tu hai impostato quest'ultima ma ci hai applicato un quarzo...
Ciao
Lucio


 .inc file.
Se usi un quarzo da 20 mhz devi usare la configurazione _HS_OSC invece 
di _RC_OSC che serve se usi una resistenza per definire la frequenza
ciao


:) Si, Può avere anche una crisi di identità!
Lo so è un "Programmable Interface Controller" ovvero un microprocessore,
quindi è un 'lui', ma 'la PIC' mi suona meglio, forse perchè  sembra ' la
PICcola' o semplicemente perchè un tocco di femminilità ingentilisce la sua
fredda logica o magari perchè è davvero una lei con un nome maschile! ...
Spero che non se ne abbia a male!
Grazie per la precisazione divertente, ciao
Agus

 ha scritto nel messaggio
news:KZD3b.13667$d66.3...@news2.tin.it...

Grazie Giuss,
quello che dici è perfetto, solo che le impostazioni suggerite nel datasheet
non portavano a nulla così ho provato varie configurazioni (tutte!) per
vedere se funzionava in modo diverso.
Ciao
Agus

"Lucio F." <lu...@fantatoXXXweb.it> ha scritto nel messaggio
news:KOC3b.23675$w8....@news.edisontel.com...

Ciao Lucio,
hai perfettamente ragione, in effetti quello č ciň che riporta il datasheet,
solo che la configurazione corretta non funzionava ed ho provato tutti gli
incroci, per vedere se andava meglio. Ora, č possibile che habbia inviato il
file .HEX relativo ad una di queste prove anzichč quello che di norma si
addice al cristallo da 8 MHz (o 20 MHz) che voglio usare.
Grazie,
Agus

 ha scritto nel messaggio
news:lfvskv496djhki29e...@4ax.com...

Ciao Luigi,
grazie per la tua precisa e competente risposta. Proprio ieri leggendo il
DS39502A della Microchip sugli Oscillatori, a pagina 11 in fondo, mi sono
accorto di quello che dici tu: è forviante includere l'entrata CLKIN nella
misura della frequenza, almeno che non si corregga la capacità che si
apporta coi puntali del tester (cosa molto difficile da fare se si vuol un
risultato preciso). Molto meglio, come suggerisci anche tu, utilizzare
l'uscita CLKOUT.
La differenza tra 'ciclo di clock' e 'ciclo di istruzione' non mi era mai
saltata all'occhio: avevo notato che il datasheet per le PIC 16F87x
riportava
        DC - 20 MHz clock imput
        DC - 200 ns istruction cycle
ma ad un primo, sommario, quanto mai impreciso colpo d'occhio avevo
associato 20 e 200 e mi ero detto "questione di zeri ... più o meno dovremmo
esserci ... il rapporto di clock è 1:1". Niente di più errato! Se faccio i
conti, 1/200ns = 5 MHz (non 20 MHz!) dando un rapporto 1:4, come sostieni
tu.
Grazie per il ragguaglio, mi sara utile per una più precisa determinazione
del tempo reale trascorso in certe mie routine, per evitare l'uso degli
interrupt e dei timers.
Alla prossima, ciao
Agus

 Lo so è un "Programmable Interface Controller" ovvero un microprocessore,
Per curiosita', dove hai letto che PIC significa questo?
ciao

 vedere se funzionava in modo diverso.
Butto li' un'altra idea.... non e' che hai realizzato il prototipo su 
breadboard e i collegamenti del quarzo e condensatori sono troppo lunghi?
ciao

<QUESTO STA DIVENTANDO UN NEVERENDING TOPIC!>
Ciao Andrea a che punto sei?
Magari facci un bel riassunto sulle prove effettuate e i risultati ottenuti.
Dato che apparentemente hai fatto tutte le prove di questo mondo, la causa
del mancato funzionamente deve essere una stupidaggine quindi mi sono fatto
venire in mente un'altra possibile causa di non funzionamento idiota.
Una volta mi è capitato di perdere alcune ore su un circuito per colpa della
bread board: aveva un contatto rotto e non me ne ero accorto perchè da sopra
non si vedeva niente.
 Prova a spostare il Pic in un'altro punto della Bread Board.
bye
crbit

breadboard e i collegamenti del quarzo e condensatori sono troppo lunghi?
A proposito, utilizzo correntemente le breadboard, ma cerco di montare il
quarzo e i condensatori più vicini possibile al micro. Nel caso di Andrea
potrebbe anche essere il quarzo particolarmente... duro d'orecchio!!!
A meno che non ci sia, per una delle leggi di Murphy, un errore di cablaggio o
un falso contatto nascosto.



Potrebbe essere anche Programmable Integrated Controller    :-)


Ciao Nferrarese,
grazie per il suggerimento, in effetti così si diminuisce la capacità
intrinseca al circuito di connessione e forse il cristallo risulta meglio
stabilizzato sulla frequenza di risonanza principale . Purtroppo però, stò
usando una brand-board (o come diavolo si chiama, non me lo ricordo mai!) e
più vicino di così non posso andare: ho provato anche a metterlo nello
stesso buco dei pin della PIC.
Ciao,
Agus

 ha scritto nel messaggio
news:VhH3b.15492$d66.3...@news2.tin.it...

Ragazzi mi prendete un po' in castagna ... sono sicuro di averlo letto in
uno dei primi tutorial sulle PIC che ho trovato su internet tramite Google,
ma non mi ricordo proprio su quale ... se mi viene in mente ve lo posto.
Ciao
Agus

Ciao a tutti,
finalmente ne sono, o fare meglio dire ne siamo venuti a capo!
Il bandolo della matassa sta tutto in queste poche righe del 'DS39025D-page
3-168', che riporto qui di seguito e che può essere utile a tutti coloro che
si vogliono creare un loro programma che gestisce il loro programmatore di
PIC:
2.3.2.1 LOAD CONFIGURATION
After receiving this command, the program counter
(PC) will be set to 0x2000. By then applying 16 cycles
to the clock pin, the chip will load 14-bits in a "data
word," as described above, to be programmed into the
configuration memory.
Ho utilizzato queste indicazioni, naturalmente, per programmare il software
che utilizza il mio programmatore per caricare il file .HEX nella PIC. Beh!
QUESTA INDICAZIONE E' ERRATA!!!! Dopo aver inviato il comando 'Load
Configuration' alla PIC in fase di programmazione (cioè dopo essere entrati
in Program Mode) è vero che si deve inviare una word in formato 0-14bits-0
alla PIC, ma lei (o lui!) non la carica in nessuna locazione del range
2000h-2007h e tanto meno quindi nella 'configuration memory' come dice. In
realtà qualcosa se ne fa (ad esempio viene utilizzata nella procedura per
togliere il 'Code Protection'), ma non so ancora dire di preciso cosa. Di
certo, ora so che per caricare la 'Configuration Word' o impostare un 'ID
number', si deve:
- inviare il comando LOAD CONGIGURATION;
- trasmettere una WORD del tipo 0-14bits-0 di utilità non ancora ben
definita;
- ripetere l'invio del comando INCREMENT ADDRESS fino al raggiungimento
della locazione voluta;
- inviare il comando LOAD DATA FOR PROGRAM MEMORY;
- inviare il comando BEGIN ERASE PROGRAMMING CYCLE.
Se la locazione di memoria scelta è la 2007h allora e solo allora si è certi
di aver impostato la 'Configuration Word' giusta (almeno dopo aver riletto
la locazione per farne una verifica). In Pratica il LOAD CONFIGURATION serve
solo per entrare nella seconda matà della Program Memory, o quasi. Cmq, il
Flow Chart della stessa 'DS39025D' a pagina 3-171 è corretto ... e dire che
all'epoca ci avevo anche guardato!!
In conclusione, facendo un minimo di riassunto, andava tutto bene sia i vari
circuiti sia il programma da caricare, purtroppo un bug nel software di
gestione del programmatore non faceva impostare la giusta 'Configuration
Word', cosicchè il cristallo non riusciva ad essere eccitato per via di una
inesistente amplificazione del circuito interno della PIC. Per tale motivo
il cristallo sottraeva energia anche dalle altre parti interne della PIC
falsandone persino i potenziali dei vari pin I/O. In modo RC invece il tutto
funzionava perchè la 'Configuration Word' di fabbrica è impostata sul
funzionamento RC e quindi tutto tornava (almeno per la seconda PIC 16F876.
La prima  PIC 16F876 che ho usato era difettosa o probabilmente l'avevo
danneggiata nel corso delle innumerevoli prove fatte, cosicchè non
funzionava neanche in RC). Mi sembra che ora ogni pezzetto del puzle sia
andato a posto, no!?.
Voglio davvero ringraziarvi tutti di cuore, per il supporto che mi avete
dato e per i mal di testa che forse abbiamo condiviso (spero che non mi
arrivino troppi accidenti!), però in fondo abbiamo imparato anche alcune
cose nuove (almeno io!) e forse, forse è stato anche divertente ... lo
rifacciamo!?!?! ;)
Ciao,
Agus
                             --------     The end     --------

Non è il tutorial che dicevo però anche qui PIC  viene definita come
acronimo di Progammable Interface Controller
http://www.doc.ic.ac.uk/~ih/teaching/radclock/97/
 però, a dir in vero, in giro ho visto anche definizioni come Programmable
Interrupt Controller, che non sembra per niente male!
Ciao
Agus

> finalmente ne sono, o farei meglio dire ne siamo venuti a capo!
<CLAP> <CLAP> <CLAP> <CLAP> <CLAP>
<SQUILLI DI TROMBA>
<DONNE CHE SI STRAPPANO I VESTITI>
<FUOCHI D'ARTIFICIO>
<URLA>
<TIFO DA STADIO>
<NEVE AD AGOSTO>
<DONNE CHE SI RIMETTONO I VESTITI PERCHE' HANNO FREDDO>
bye
crbit


Mi sembra strano perche' i PIC sono dei microcontroller, e non sono dei 
controller di interfaccia o di interrupt.... mah....
ciao

 un falso contatto nascosto.
Anche io a volte ho usato le breadboard, poi mi sono costruito qualche 
circuito stampato apposta per montarci il PIC e il quarzo e per fare 
esperimenti.
Purtroppo le breadboard a volte fanno "scherzi" e ti fanno impazzire 
alla ricerca di un contatto fasullo
ciao

 ha scritto nel messaggio
news:7yS3b.358$nw1....@news1.tin.it...


 _WRT_ENABLE_ON & _DEBUG_OFF & _CPD_OFF & _CP_OFF
C'è un errore: nelle direttive dichiari di usare un oscillatore RC ma monti
un quarzo...
devi mettere _XT_OSC per quarzi fino a 8 mega (mi semba) e _HS_OSC per
quarzi più veloci.
Per il resto mi sembra che dovrebbe funzionare ok ma non ho capito il delay.
Ciao,
Lucio