Newsgroup: it.hobby.elettronica.digitale
Titolo: Stranezza del 16F628-20P

Ciao a tutti, sto sperimentando da poco questo pic. Lo programmo
usando MikroC, ma ottengo dei comportamenti "strani".
Questo è il codice che ho scritto sul pic:
int main()
{
   TRISB=0;
   for (;;){
      PORTB=0b00000001; Delay_ms(1000);
      PORTB=0b00000010; Delay_ms(1000);
      PORTB=0b00000100; Delay_ms(1000);
      PORTB=0b00001000; Delay_ms(1000);
      PORTB=0b00010000; Delay_ms(1000);
      }
   return 0;
}
Ho collegato il pin 14 a +5V, il pin 5 a massa, e il pin 4 a +5V
tramite resistenza da 4700 ohm.
A ogni pin dal 6 al 10 (RB0->RB4) ho collegato una resistenza da 220
ohm e un led, a massa.
Mi aspetto quindi che i led si alternino ogni secondo, cioè che dopo 1
sec si accende quello successivo.
Ma invece questo non succede!
Io vedo che:
Si accende il led della RB0; passa 1 secondo; si accende il led della
RB1; passa 1 secondo; si accende il led della RB2; passa molto meno di
mezzo secondo; si riaccende il led della RB0 e ricomincia.
Come mai?!? Che cosa ho sbagliato?
Ah durante la programmazione, ho impostato il code protect a Off, e ho
attivato WDT, MCLR, LPV, BODEN
Grazie

 ha scritto nel messaggio 
news:1173121503....@v33g2000cwv.googlegroups.com...
Ciao a tutti, sto sperimentando da poco questo pic. Lo programmo
usando MikroC
********
senza sognarsi di leggere il datasheet, immagino... disabilita il watchdog.
-- 
simone.bern
Mr. Heisemberg is not the only one who can affect a measurement by looking 
at it (Robert A. Pease)
zsimone...@zliberoz.it
 (Rimuovere i caratteri di zorro per rispondere 
via mail)

 watchdog.
Se funziona come il compilatore della Melabs (PicbasicPro) e lo stesso 
compilatore che inserisce l'apposito comando in assembler per ricaricare il 
watchdog. 

 via mail)
ti ringrazio... ora funziona! il datasheet lo sto leggendo, ma è molto
lungo e mi era sfuggita questa cosa sul WDT

lungo e mi era sfuggita questa cosa sul WDT
Scusami allora nel MIkroC dovrebbe esserci qualcosa che ti abilita il 
watchdog. 

"enzo" ha scritto

Aveva scritto:
"Ah durante la programmazione, ho impostato il code protect a Off, e ho
attivato WDT, MCLR, LPV, BODEN"
dicendo quindi che aveva abilitato il WDT durante la programmazione.

C'è un altro problemino....
Ho modificato il codice così:
PORTB=0;
  for (;;){
      PORTB=0b00000001; Delay_ms(1000);
      PORTB=0b00000010; Delay_ms(1000);
      PORTB=0b00000100; Delay_ms(1000);
      PORTB=0b00001000; Delay_ms(1000);
      PORTB=0b00010000; Delay_ms(1000);
      PORTB=0b00100000; Delay_ms(1000);
      PORTB=0b01000000; Delay_ms(1000);
      PORTB=0b10000000; Delay_ms(1000);
      }
Ho collegato 8 led ai pin 6/13, e teoricamente ogni led si dovrebbe
accendere per 1 secondo e poi passare al successivo. Ma il led
corrispondente a RB4 (pin 10) non si accende, per un secondo rimane
tutto spento. Ho già controllato i collegamenti, o meglio ho
controllato col tester il voltaggio sui vari pin, e mentre nei secondi
di accensione ogni pin passa da 0V a 5V e di nuovo a 0V, l'RB4 rimane
costantemente a 0V. Com'è possibile, c'è qualcosa da attivare/
disattivare ancora?!?
Grazie di nuovo...

 ha scritto nel messaggio 
news:iE8Hh.14479$J11.3...@twister1.libero.it...

Forse non mi sono spiegato bene, abilitare il fuse del watchdog non 
significa usare il watchdog nel programma, cioe' se ogni X righe di 
programma non metti l'istruzione per ricaricare il watchdog questo essendo 
abilitato con l'apposito fuse provochera' il reset del micro, nel 
compilatore della melabs di default viene generato codice con i dati del 
watchdog se proprio non si vuole nel programma si usa l'istruzione DEFINE 
NO_CLRWDT 1.
Ma hai chiaro il concetto di watchdog? 

Grazie di nuovo...
Se si fosse trattato di RA4 sarebbe normale (uscita di tipo Open Drain), ma 
per RB4 sembra che sia  guasta, hai provato con un altro PIC? 

"enzo" ha scritto

Chiarissimo, usato decine di volte.
Non conosco il compilatore MikroC, nè quello della Melabs, ho solo detto che
il WDT lo aveva abilitato (direi senza saperlo) in fase di programmazione
del micro con riferimento alla tua ipotesi: "Scusami allora nel MIkroC



Sarebbe interessante capire cosa va esattamente il compilatore MIkroC, cioe' 
come fargli generare le istruzioni del watchdog 

Bene, ho capito che così il WatchDog e per il momento non ne ho
bisogno...
Sto provando a fare cose molto semplici, ma mi si presentano dei
stranissimi problemi!
Per esempio, ho scritto questo codice stupidissimo:
void main()
{
  TRISB=0;
  PORTB=0xFF;
  while(1);
}
E ho collegato le porte B a un display a 7 segmenti con 8 resistenze
da 220 ohm a ogni pin. Accendo il circuito, e il display mostra un bel
"8" luminoso, ma dopo un pò comincia a lampeggiare con una frequenza
sempre più alta finchè il display SEMBRA spento, ma in realtà si vede
che un pò i led sono accesi. Se spengo il circuito e lo riaccendo, di
nuovo la stessa situazione: 8 bello fisso, poi lampeggia e poi sembra
spento.
Ma ste cose capitano solo a me??????????