| | #81 (permalink) Top |
| User 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
__________________ NUOVO DRONE TAGLIATO AL LASER CO2 https://www.youtube.com/watch?v=cBgCVNyPH5c&t=7s GRUPPO LASER https://www.facebook.com/groups/1880460478909243/ |
| | |
| | #82 (permalink) Top | |
| User Data registr.: 21-01-2004 Residenza: Milano
Messaggi: 989
| Citazione:
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. | |
| | |
| | #83 (permalink) Top |
| User 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/ |
| | |
| | #84 (permalink) Top | |
| User Data registr.: 21-01-2004 Residenza: Milano
Messaggi: 989
| Citazione:
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. | |
| | |
| | #85 (permalink) Top |
| User 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/ |
| | |
| | #86 (permalink) Top |
| User 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/ |
| | |
| | #87 (permalink) Top |
| User 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. |
| | |
| | #88 (permalink) Top |
| User 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/ |
| | |
| | #89 (permalink) Top |
| User 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/ |
| | |
| | #90 (permalink) Top | |
| Rivenditore - B.C.M. Power & Tools Data registr.: 28-09-2004 Residenza: Veroli (Fr)
Messaggi: 2.722
| Citazione:
![]() 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] | |
| | |
![]() |
| Bookmarks |
| |
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 |