PDA

View Full Version : pic16f876 che sia colpa del programma?


khri81
19-07-2004, 09:23
ciao ho il solito problema, tutti i miei pic 16f876 che programmo nn partono appena inseriti, ma occorre reinserirli più volte nello zoccolo prima che partano. allora problemi hardware lo escludo ho controllato e ricontrollato ma gli schemi hardware sono identici a tutti gli altri a cui funzionano. allora mi è sorto un dubbio, che sia colpa dei programmi? ve ne posto uno e voi mi dite se c'è qualcosa che nn va.
PS. i programmi funzionano perfettamente quando i pic si decidono a partire, ma prima che il pic parte occorre una preghiera...

#include<pic1687x.h>
#include"delay.c"

//scomposizione in cifre
int *scomponi(int num, int *decimale, int nvolte)
{int cont=0;

while(cont < nvolte)
{
decimale[cont]=num%10;
num=num/10;
cont++;
}
return(decimale);
}

main()
{int *pizze, *piade, npizze=0, npiade=0;

TRISA = 0; //uscite
TRISB = 1; //ingressi
TRISC = 0; //uscite

while(1)
{
//scomposizione numero pizze
pizze=scomponi(npizze, pizze, 2);

//visualizza numero pizze e numero piade
//unita pizze
PORTA=pizze[0]+'0';
PORTC=0b00000001;
DelayMs(1);

//decine pizze
PORTA=pizze[1]+'0';
PORTC=0b00000010;
DelayMs(1);

//scomposizione piade
piade=scomponi(npiade, piade, 2);

//unita piade
PORTA=piade[0]+'0';
PORTC=0b00000100;
DelayMs(1);

//decine piade
PORTA=piade[1]+'0';
PORTC=0b00001000;
DelayMs(1);

//gestione input
//numero pizze
switch (PORTB)
{
case 1:
if (npizze > 0)
{
npizze--;
DelayMs(100);
}
break;

case 2:
if (npizze < 30)
{
npizze++;
DelayMs(100);
}
else
{
npizze=0;
}
break;

case 4: //numero piade
if (npiade > 0)
{
npiade--;
DelayMs(100);
}
break;

case 8:
if (npiade < 30)
{
npiade++;
DelayMs(100);
}
else
{
npiade=0;
}
break;
}

if ((npiade == 0) && (npizze == 0))
{
PORTC=0b00011111; //disabilita le macchinette dei soldi
}
}
}

-jakal-
19-07-2004, 11:32
be... dando un'occhiata veloce pare essere ok... unica cosa, io uso sempre main(void) al posto di main().
però da come descrivi il problema ti ripeto che sembrerebbe un problema hardware

khri81
19-07-2004, 12:13
grazie mille x tutte le risp che mi dai, xò io sto diventando scemo, a livello hardware ho controllato sia io che un mio amico elettronico, anche facendo una semplice basettina con 1 led e un pulsante, quindi una semplicità circuitale tale x cui anche un bambino di 3 mesi saprebbe farlo, il pic nn ne vuole sapere di funzionare! e io nn capisco il xchè.
xò ho notato una cosa se scrivo un prog semplice parte subito, se ci metto il prog che ti ho fatto vedere, o cmq prog di complessità pari a quello che ti ho postato i pic fanno fatica a partire, ma quando vanno vanno alla perfezione.
nn è che sbaglio qualche impostazione nel prog, anche usando le funzioni e i puntatori i pic vanno bene lo stesso o se la prendono? io sono un programmatore e di programmi ne ho fatti a tonnellate, usando il c il basic, l'assembly, ma i pic è la prima volta che li uso, nn vorrei che le sue limitate capacità diano problemi.

-jakal-
19-07-2004, 12:40
...mmm...... dovrei provare il software che hai scritto ma non ho proprio il tempo di ritirare fuori tutto il materiale dei pic che ho.....

hai provato a dare un impulso di reset al pic dopo averlo alimentato?

khri81
19-07-2004, 13:05
si ma nn parto ugualmente. :(

khri81
19-07-2004, 13:09
potrebbe essere colpa del programmatore che uso x prog i pic? ma x quale motivo i 16f84 partono all'istante e i 16f876 nn ne vogliono sapere di partire subito?

-jakal-
19-07-2004, 13:16
che programmatore usi? e che compilatore usi?

...cmq non credo dipenda da questi, se poi il pic parte.

khri81
19-07-2004, 13:35
allora il programmatore che uso è lo stesso che uso x programmare i 16f84, con una piccola modificare riesco a prog anche i 16f876 che dipenda da questo? cmq dimenticavo di dire che a volte il pic parte subito, mentre nella maggior parte dei casi nn parte e devo fare il solito attacca stacca.

-jakal-
19-07-2004, 13:38
mmm.....

fammi capire una cosa, se tu programmi il pic con un software che fa solo accendere un led alla pressione di un bottone (esempio semplice tanto per fare un test), il pic funziona subito al primo colpo? sempre?

khri81
19-07-2004, 13:52
no anche facendo un prog test, con un semplice led e pulsane nn si accende subito!

-jakal-
19-07-2004, 13:55
mi potresti postare il listato del software che hai usato per fare il test?

khri81
19-07-2004, 14:17
eccolo:

#include<pic.h>
#include"delay.c"

main(void)
{
TRISB = 1;
TRISC = 0;

PORTB = 0;
PORTC = 0;

for(;;)
{
if (PORTB==8) //rb4
{
PORTC=1;
DelayMs(20);
}
}
}


questo parte subito!!! mentre l'altro che ti avevo postato all'inizio parte dopo aver staccato e riattaccato il pic più volte.

cosa ci può essere di diverso? può essere colpa del circuito o del programma? può dipendere dal quarzo? noi usiamo quello da 4 mhz, che dipenda da quello?

-jakal-
19-07-2004, 14:31
per il quarzo usa quello da 20MHz.

...mi pare molto strano cmq che possa non andare bene il programmatore (al massimo avrei avuto dei dubbi sul compilatore), visto che poi parte e va senza problemi.

fai la prova con il quarzo da 20.... io intanto vedo di rifletterci un po su

khri81
19-07-2004, 14:55
con quello da 20 nn riusciamo a farlo andare...

cmq il prog di prova che ho fatto con il quarzo da 4 va subito!

quale compilatore mi consigli di usare? noi usiamo icprog x prog il pic e x fare i programmi usiamo htlpic.
vanno bene o me ne consigli altri?

khri81
19-07-2004, 15:01
secondo me è colpa dei puntatori che uso, xchè un programma che ho trovato su internet che accende i display va subito e sempre!!!!

-jakal-
19-07-2004, 15:14
con quello da 20 non funziona il pic??? ...e pensare che è progettato per andare con quel quarzo....

Per il compilatore direi che va benissimo! (hai la versione completa?)

perchè dici che siano i puntatori?
.....mi riguardo con più attenzione il programma intanto...

khri81
19-07-2004, 15:27
ho la conferma, sono i puntatori!!!!!!!
allora ho tolta la funzione che usavo con i puntatori, e ci ho messo delle variabili normali, parte subito all'istante!!!
stesso prog ma con la funz che usa i puntatori nn va!

-jakal-
19-07-2004, 15:29
bene... solo che in teoria non dovresti avere problemi con i puntatori.....

ma il tuo compilatore è la versione completa o quella free?

....e poi riprovalo con il quarzo da 20 perchè deve andare.



....posta il listato con le variabili al posto dei puntatori...

khri81
19-07-2004, 16:36
finalmente ho scoperto qual'è il problema!
nn sono i puntatori, ma sono le funzioni, se le metto dentro le include i pic partono subito!!! :D

se invece le inserisco insieme al programma i pic nn vanno!

Matro
28-08-2004, 22:32
Originariamente inviato da khri81
finalmente ho scoperto qual'è il problema!
nn sono i puntatori, ma sono le funzioni, se le metto dentro le include i pic partono subito!!! :D

se invece le inserisco insieme al programma i pic nn vanno!

Strana sta cosa, perché alla fine gli include sono sempre spezzoni di programma che vanno nella memoria programma...

Boh, comunque ecco il motivo per imparare l'assembler :D

Luc@s
28-08-2004, 23:03
Originariamente inviato da Matro
Boh, comunque ecco il motivo per imparare l'assembler :D


Concordo, approvo, sottoscrivo ;)