Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 20 novembre 10, 18:22   #81 (permalink)  Top
User
 
L'avatar di elicottero78
 
Data registr.: 14-05-2005
Residenza: bergamo
Messaggi: 1.278
se metto 1 su rb0 il trm0 rimane fermo,avanza il conteggio del tempo nella casella sotto
Icone allegate
info linguaggio c x pic-elicottero78.jpg  
__________________
NUOVO DRONE TAGLIATO AL LASER CO2 https://www.youtube.com/watch?v=cBgCVNyPH5c&t=7s
GRUPPO LASER https://www.facebook.com/groups/1880460478909243/
elicottero78 non è collegato   Rispondi citando
Vecchio 20 novembre 10, 20:43   #82 (permalink)  Top
User
 
L'avatar di MSchiepp
 
Data registr.: 21-01-2004
Residenza: Milano
Messaggi: 989
Citazione:
Originalmente inviato da elicottero78 Visualizza messaggio
se metto 1 su rb0 il trm0 rimane fermo,avanza il conteggio del tempo nella casella sotto
Nell'esempio che hai postato RB0 è azero, e quindi il programma non esce mai dal primo loop, TMR0 rimane a zero e il tempo che si incrementa ti dice quanto tempo è passato da reset.

Non conosco che sistema stai usando, ma devi trovare il modo per simulare stimoli esterni sulle porte che sono dichiarate in input e che quindi non puoi modificare cambiando il valore della porta.

In MPLAB c'è la funzione Debug-> stimulus con cui puoi simulare impulsi o segnali in ingresso al micro.

Michele
__________________
__________________________________________________
The worst day flying is better than the best day working.
MSchiepp non è collegato   Rispondi citando
Vecchio 22 novembre 10, 12:42   #83 (permalink)  Top
User
 
L'avatar di elicottero78
 
Data registr.: 14-05-2005
Residenza: bergamo
Messaggi: 1.278
ciao,scusami ancora un momento,ho un dubbio che la mia scheda cinese abbia qualche problema,non riesco a effettuare nessun interrupt,quindi è meglio se parto da piccole prove x capire il motivo


secondo te questo codice che effettua un interrupt quando schiaccio rb0...è corretto?

void interrupt(){
if((OPTION_REG.INTEDG == 1) && (INTCON.F1 == 1))
{
portb.f4=1;
}

if(OPTION_REG.INTEDG = 0)
{
INTCON.INTF=0;
}
}

void main() {
trisa=0;
trisb=0b00000001;
porta=0;
portb=0;
OPTION_REG.INTEDG = 1;
INTCON.INTE=1;
INTCON.GIE=1;
while(1){
portb.f3=1;
delay_ms(1000);
portb.f3=0;
delay_ms(1000);
}
}

grazie
__________________
NUOVO DRONE TAGLIATO AL LASER CO2 https://www.youtube.com/watch?v=cBgCVNyPH5c&t=7s
GRUPPO LASER https://www.facebook.com/groups/1880460478909243/
elicottero78 non è collegato   Rispondi citando
Vecchio 22 novembre 10, 20:00   #84 (permalink)  Top
User
 
L'avatar di MSchiepp
 
Data registr.: 21-01-2004
Residenza: Milano
Messaggi: 989
Citazione:
Originalmente inviato da elicottero78 Visualizza messaggio
secondo te questo codice che effettua un interrupt quando schiaccio rb0...è corretto?
No! E neanche secondo il PIC!
Fai un po' di confusione:

il bit INTEDG serve solo per specificare se l'interrupt deve essere sul fronte di salita o su quello di discesa; una volta settato non serve andarlo a vedere, perchè rimane come l'hai settato tu!
Nella routine di interrupt si testa il bit che indica se c'è stato quell'interrupt e il fatto che quell'interrupt sia effettivamente abilitato; neltuo caso non è necessario perchè è l'unico interrupt attivo, ma è buona norma farlo per quando avrai più interrup da distinguere. alla fine della routine il flag che ha generato l'interrupt DEVE essere cancellato sempre.

Nel main prima di abilitare l'interrpt globale, è buona norma azzerare i flag di interrupt.

La routine di interrupt sarà quindi:

void interrupt(){
if(INTCON.F4 && INTCON.F1){
portb.f4=1;
}

INTCON.INTF = 0;
}

void main() {
trisa=0;
trisb=0b00000001;
porta=0;
portb=0;
OPTION_REG.INTEDG = 1;
INTCON.INTE=1;
INTCON.INTF = 0;
INTCON.GIE=1;
while(1){
portb.f3=1;
delay_ms(1000);
portb.f3=0;
delay_ms(1000);
}
}

Michele
__________________
__________________________________________________
The worst day flying is better than the best day working.
MSchiepp non è collegato   Rispondi citando
Vecchio 22 novembre 10, 23:19   #85 (permalink)  Top
User
 
L'avatar di elicottero78
 
Data registr.: 14-05-2005
Residenza: bergamo
Messaggi: 1.278
grazie mille,se il programma che mi hai modificato è ok,allora ho qualche problema,xchè a me oltre portb 3 non funziona piu nulla.quando premo portb 0 non succede nulla
__________________
NUOVO DRONE TAGLIATO AL LASER CO2 https://www.youtube.com/watch?v=cBgCVNyPH5c&t=7s
GRUPPO LASER https://www.facebook.com/groups/1880460478909243/
elicottero78 non è collegato   Rispondi citando
Vecchio 22 novembre 10, 23:50   #86 (permalink)  Top
User
 
L'avatar di elicottero78
 
Data registr.: 14-05-2005
Residenza: bergamo
Messaggi: 1.278
che povero imbecille che sono,ho risolto,x attivare l interrupt ho collegato il pin rb0 ai 5v.cliccando il tasto di rbo,invece non succedeva nulla.x ora grazie,adesso cerco di capire meglio.
__________________
NUOVO DRONE TAGLIATO AL LASER CO2 https://www.youtube.com/watch?v=cBgCVNyPH5c&t=7s
GRUPPO LASER https://www.facebook.com/groups/1880460478909243/
elicottero78 non è collegato   Rispondi citando
Vecchio 23 novembre 10, 07:21   #87 (permalink)  Top
User
 
L'avatar di MSchiepp
 
Data registr.: 21-01-2004
Residenza: Milano
Messaggi: 989
Nel mio esempio ho usato i nomi dei bit per il regisrto INTCON: probabilmente devi modificare mettendo il numero del bit.

Michele
__________________
__________________________________________________
The worst day flying is better than the best day working.
MSchiepp non è collegato   Rispondi citando
Vecchio 24 novembre 10, 00:13   #88 (permalink)  Top
User
 
L'avatar di elicottero78
 
Data registr.: 14-05-2005
Residenza: bergamo
Messaggi: 1.278
ciao,mettendo il numero del bit si risolve il problema.infatti cliccando il bottone rb0 si accende l interrupt.
ma ho provato a modificare l interrupt,facendo un xor sul led rb4,ho poi collegato il segnale della ricevente su rb0,ma non mi succede nulla,il led rb0 e leggermente acceso a causa del pwm del segnale,ma rb4 non da segni di vita,solo se do i 5 volt funziona......
__________________
NUOVO DRONE TAGLIATO AL LASER CO2 https://www.youtube.com/watch?v=cBgCVNyPH5c&t=7s
GRUPPO LASER https://www.facebook.com/groups/1880460478909243/
elicottero78 non è collegato   Rispondi citando
Vecchio 26 novembre 10, 00:53   #89 (permalink)  Top
User
 
L'avatar di elicottero78
 
Data registr.: 14-05-2005
Residenza: bergamo
Messaggi: 1.278
ciao,sono passato al pic 16f628a,tramite copia e incolla qua e la e qualche mia modifica sono riuscito a fare qualcosa che legge il segnale della ricevente........solo sto cercando di capire il programma,ma non mi trovo con il trm0,viene resettato fuori dal l interrupt,ma non capisco in che modo viene attivato e poi riessettato.mi potete dare una dritta x favore?

ho fatto un video e messo su youtube.

YouTube - prova lettura segnale dalla ricevente -pic 16f628a-


char tempo;
void interrupt(){
if((OPTION_REG.INTEDG == 1) && (INTCON.F1 == 1))
{
TMR0 = 0;
INTCON.GIE=0; //spenti interrupt
OPTION_REG.INTEDG=0; //fronte di discesa
INTCON.F1=0; //reset del flag
INTCON.GIE=1; //riabilitati interrupt
}
if((OPTION_REG.INTEDG == 0) && (INTCON.F1 == 1))
{
tempo=TMR0; //prento il timer

INTCON.GIE=0; //spenti interrupt
OPTION_REG.INTEDG=1; //imposto controllo sul fronte di salita
INTCON.F1=0; //reset del flag
INTCON.GIE=1; //riabilitati interrupt

if(tempo > 50 && tempo <70)
{
portb.f1=1;
}else{
portb.f1=0;
}

if(tempo > 70 && tempo <80)
{
portb.f2=1;
}else{
portb.f2=0;
}

if(tempo > 80 && tempo <90)
{
portb.f3=1;
}else{
portb.f3=0;
}

if(tempo > 90 && tempo <100)
{
portb.f4=1;
}else{
portb.f4=0;
}

if(tempo > 100 && tempo <110)
{
portb.f5=1;
}else{
portb.f5=0;
}

if(tempo > 110 && tempo <120)
{
portb.f6=1;
}else{
portb.f6=0;
}

if(tempo > 120 && tempo <130)
{
portb.f7=1;
}else{
portb.f7=0;
}

}
}
void main() {
trisa=0;
trisb=0b00000001;
porta=0;
portb=0;
OPTION_REG.T0CS = 0; //imposto l'utilizzo del clock
OPTION_REG.PSA = 0; //imposto il tipo di prescaler da utilizzare
OPTION_REG.PS0 = 1; //
OPTION_REG.PS1 = 1; //imposto il prescaler a 16
OPTION_REG.PS2 = 0; //
INTCON.T0IF = 0; //azzero interrupt timer

OPTION_REG.INTEDG = 1; //imposto controllo sul fronte di salita

INTCON.F1 = 0; //reset flag
INTCON = 0b00010000; //impostato unico interrupt rb0
INTCON.GIE = 1;
}
__________________
NUOVO DRONE TAGLIATO AL LASER CO2 https://www.youtube.com/watch?v=cBgCVNyPH5c&t=7s
GRUPPO LASER https://www.facebook.com/groups/1880460478909243/
elicottero78 non è collegato   Rispondi citando
Vecchio 26 novembre 10, 10:22   #90 (permalink)  Top
Rivenditore - B.C.M. Power & Tools
 
L'avatar di claudio476
 
Data registr.: 28-09-2004
Residenza: Veroli (Fr)
Messaggi: 2.722
Citazione:
Originalmente inviato da elicottero78 Visualizza messaggio
ma non mi trovo con il trm0,viene resettato fuori dal l interrupt,ma non capisco in che modo viene attivato e poi riessettato.mi potete dare una dritta x favore?
[/url]


char tempo;
void interrupt(){
if((OPTION_REG.INTEDG == 1) && (INTCON.F1 == 1))
{
segnale appena andato alto
TMR0 = 0;
azzeramento timer
INTCON.GIE=0; //spenti interrupt
OPTION_REG.INTEDG=0; //fronte di discesa
prossimo interrupt quando il segnale va basso
INTCON.F1=0; //reset del flag
INTCON.GIE=1; //riabilitati interrupt
}
if((OPTION_REG.INTEDG == 0) && (INTCON.F1 == 1))
{
sengale ora è basso
tempo=TMR0; //prento il timer
lettura
INTCON.GIE=0; //spenti interrupt
OPTION_REG.INTEDG=1; //imposto controllo sul fronte di salita
prossimo interrupt quando il segnale risale, ovvero ricomincia da sopra
INTCON.F1=0; //reset del flag
INTCON.GIE=1; //riabilitati interrupt
credo il ciclo vada così, giusto? ho vinto qualche cosa?

unica cosa, credo che non sia buono mettere le istruzioni per governare i led nella routine di interrupt, mettili nel main in un ciclo infinito, così le due cose viaggiano separate senza appesantire la sezione di interrupt.
__________________
www.quattrociocchi.it (aeromodellismo,fotografie,energie,varie ed eventuali..)
[Fusione Fredda, come spiegarla a mia nonna]

claudio476 non è collegato   Rispondi citando
Rispondi

Bookmarks




Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


Discussioni simili
Discussione Autore discussione Forum Commenti Ultimo Messaggio
modificare linguaggio menù mc3030 ravenlinux2000 Radiocomandi 0 24 aprile 07 20:03
info francescospina Elimodellismo in Generale 0 26 ottobre 06 11:41
Linguaggio E Versioni Simulatore Reflex Xtr ctenos Simulatori 1 30 novembre 05 16:02



Tutti gli orari sono GMT +2. Adesso sono le 04:34.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2026