| | #61 (permalink) Top |
| Rivenditore - B.C.M. Power & Tools Data registr.: 28-09-2004 Residenza: Veroli (Fr)
Messaggi: 2.722
|
Beh... semplicemente ignoravo l'esistenza del tilde come operatore! ![]() Nel senso che, sono programmatore Asp.Net e nel C# non l'ho mai visto, poi ho iniziato a dedicarmi ai PIC prima con mickroBasic e poi con il C, quindi ho un po di lacune da colmare.. ![]() ps. posso dire quindi che è controproducente iniziare a programmare in basic per poi intraprendere la strada del C, meglio studiare direttamente il C, anche se apparentemente più ostico, alla lunga si risparmiano fatiche che tanto se si vuole programmare bene un PIC almeno il C è d'obbligo.. mia opinione!
__________________ www.quattrociocchi.it (aeromodellismo,fotografie,energie,varie ed eventuali..) [Fusione Fredda, come spiegarla a mia nonna] |
| | |
| | #63 (permalink) Top |
| User |
Un altro possibile metodo per controllare a bit (byte) una porta od una variabile con il C18 Microchip (funziona in genere con qualsiasi micro) Codice: //define C18 p18f2320.h
//---------------------------------------
extern volatile near unsigned char PORTB;
extern volatile near union
{
struct
{
unsigned RB0:1;
unsigned RB1:1;
unsigned RB2:1;
unsigned RB3:1;
unsigned RB4:1;
unsigned RB5:1;
unsigned RB6:1;
unsigned RB7:1;
};
struct
{
unsigned AN4:1;
unsigned AN5:1;
unsigned :1;
unsigned CCP1:1;
unsigned AN6:1;
unsigned PGM:1;
unsigned PGC:1;
unsigned PGD:1;
};
struct
{
unsigned INT0:1;
unsigned INT1:1;
unsigned INT2:1;
unsigned :1;
unsigned KBI0:1;
unsigned KBI1:1;
unsigned KBI2:1;
unsigned KBI3:1;
};
struct
{
unsigned :1;
unsigned CK:1;
unsigned P1B:1;
unsigned P1A:1;
unsigned DT:1;
unsigned :1;
unsigned P1C:1;
unsigned P1D:1;
};
struct
{
unsigned :4;
unsigned RX:1;
unsigned :1;
unsigned T1OSO:1;
unsigned T1OSI:1;
};
struct
{
unsigned :6;
unsigned T13CKI:1;
};
} PORTBbits;
//------------------------------------------------------------
// Define personalizzato
#define OUTEVA PORTBbits.RB0 // Uscita Comando Iniettore A
#define OUTEVB PORTBbits.RB1 // Uscita Comando Iniettore B
#define OUTEVC PORTBbits.RB2 // Uscita Comando Iniettore C
#define OUTEVD PORTBbits.RB3 // Uscita Comando Iniettore D
//------------------------------------------------------------
// Program sample
void SetEvOn(void)
{
switch (InjRot)
{
case 0: if(InjReg.BONEVA) OUTEVA = 1;
if(InjReg.BONEVB) OUTEVB = 1;
if(InjReg.BONEVC) OUTEVC = 1;
if(InjReg.BONEVD) OUTEVD = 1;
break;
omissis -------------
}
//------------------------------------------------------------
__________________ Peace & Love Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein) |
| | |
| | #64 (permalink) Top |
| User Data registr.: 14-05-2005 Residenza: bergamo
Messaggi: 1.278
|
ciao a tutti,pian pianino,imparo sempre qualcosa di nuovo con il linguaggio c e la compilazione dei pic,ma siamo ancora lontani dalla perfezione. pian painino provo nuovi programmi,li modifico e cerco di capirli meglio e provarli in 100 modi diversi ora sono ritornato sul lcd 16x2 so gia come far visualizzare le parole sul display,ma ora volevo creare uno stupido programma che ogni secondo mi aumenti di una unita la variabile evento e che me la mostri sul display,ma ho provato in mille modi differenti,riesco a vedere la parola CONTEGGIO=, vedo anche il cursore che dovrebbe mostrarmi i numeri in aumento,ma non succede nulla, DOVE SBAGLIO? uso pic 16f84a e mikroc ciao e grazie sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB6_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB6_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; int evento; char txt; void main() { Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); evento=0; while(1); { delay_ms(1000); evento=evento+1; } intToStr(evento, txt); LCD_Out(1,1,"CONTEGGIO="); Lcd_Out(1,12, txt); }
__________________ NUOVO DRONE TAGLIATO AL LASER CO2 https://www.youtube.com/watch?v=cBgCVNyPH5c&t=7s GRUPPO LASER https://www.facebook.com/groups/1880460478909243/ |
| | |
| | #65 (permalink) Top | |
| User Data registr.: 06-08-2007 Residenza: Empoli
Messaggi: 1.813
| Citazione:
):Description : Function creates an output string out of a signed number (numerical value of int type). Output string has fixed width of 6 characters; remaining positions on the left (if any) are filled with blanks. Requires : The output string should be at least 7 characters in size. Mi pare che txt non sia una stringa ma sia un char; inoltre aggiorni il display FUORI dal while (1) (cioè non lo aggiornerai MAI )
__________________ ....... | |
| | |
| | #66 (permalink) Top |
| User Data registr.: 14-05-2005 Residenza: bergamo
Messaggi: 1.278
|
grazie x la risposta,ma
__________________ NUOVO DRONE TAGLIATO AL LASER CO2 https://www.youtube.com/watch?v=cBgCVNyPH5c&t=7s GRUPPO LASER https://www.facebook.com/groups/1880460478909243/ |
| | |
| | #67 (permalink) Top |
| User Data registr.: 06-08-2007 Residenza: Empoli
Messaggi: 1.813
| Cosa non è chiaro? Invece di: char txt; devi scrivere: char txt[7]; La funzione trasforma un numero in una stringa di caratteri. Come faccio a traformare un numero, ad esempio 12, ed inserirlo in una variabile di tipo char come hai scritto tu? Un char è UN carattere, il numero 12 evidentemente ne ha 2; in realtà una volta trasformato in stringa ne ha 3: il carattere 1, il carattere 2 e il valore 0 che indica la fine della stringa. Se scrivi char txt[7] crei una stringa di 7 caratteri: 6 cifre numeriche terminata con uno zero. Il display tu lo aggiorni (si fa per dire ) fuori dal while, while(1); { delay_ms(1000); evento=evento+1; } // fine del while(1) intToStr(evento, txt); // <-- QUI NON CI ARRIVA MAI!!! LCD_Out(1,1,"CONTEGGIO="); Lcd_Out(1,12, txt); La condizione while(1) è sempre vera e non arriverai mai ad eseguire l'aggiornamento del display. E' chiaro ora? le righe le porti dentro, così: while(1); { delay_ms(1000); evento=evento+1; // qui puoi anche scrivere: evento++; intToStr(evento, txt); LCD_Out(1,1,"CONTEGGIO="); Lcd_Out(1,12, txt); }
__________________ ....... |
| | |
| | #68 (permalink) Top |
| User Data registr.: 14-05-2005 Residenza: bergamo
Messaggi: 1.278
|
ciao,scusa il ritardo,ma la bimba,stasera non aveva sonno. grazie mille x il tuo aiuto,ho dovuto creare anche la funzione anti repit,xchè appena premevo il tasto,la conta andava velocemente,ora tutto ok. //CONTA PEZZI 16F84A mikroc sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D4 at RB6_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D7 at RB3_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB6_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; char txt[3]; short conta; void main() { trisb.f0=1; Lcd_Init(); Lcd_Cmd(_LCD_CLEAR); Lcd_Cmd(_LCD_CURSOR_OFF); LCD_Out(1,1,"CONTEGGIO="); conta= 0; while(1) { if(portb.f0=1) { while(portb.f0=1) {}; conta++; } byteToStr (conta, txt); Lcd_Out(1,11, txt); } }
__________________ NUOVO DRONE TAGLIATO AL LASER CO2 https://www.youtube.com/watch?v=cBgCVNyPH5c&t=7s GRUPPO LASER https://www.facebook.com/groups/1880460478909243/ |
| | |
| | #69 (permalink) Top |
| User Data registr.: 06-08-2007 Residenza: Empoli
Messaggi: 1.813
|
Sino a quanto può arrivare la variabile conta? E' definita come short ma non sonon sicuro nel Mikroc quanti byte occupi uno short. Tieni presente che, salvo indicare la var come UNSIGNED, questa può variare da un minimo negativo ad un massimo positivo. Vedo che non controlli mai se raggiunge un massimo quindi preparati a qualcosa di... strano ![]() Altra cosa: la stringa deve essere lunga come il massimo numero di cifre + 1 che sarà occupata dallo zero di fine stringa. Nel tuo caso, 3 mi sembra poco: sino al numero 99 va bene, ma a 100 lo zero di fine stringa non ci sta...
__________________ ....... |
| | |
| | #70 (permalink) Top |
| User Data registr.: 14-05-2005 Residenza: bergamo
Messaggi: 1.278
|
ciao,la conta arriva a 255,nella stringa ho provato a scrivere 7 ma anche con 3 è lo stesso....io non so se è mikroc che corregge qualcosa o mi va di culo. non considerare il mio programma o futuri come programmmi finiti x un unico scopo,ma li tengo come programmi base,da tener via come esempi e se in futuro serviranno x un preciso scopo allora verranno modificati.io da questo programma ho gia fatto svartiate modifiche....del tipo..appena arrivi a 20 ritorna a 0..oppure,appena arrivi a 10 accendi un led....ecc.ora questo programma lo conservo e vado avanti a studiarmi qualcosa di nuovo. x ora ho fatto -pwm a 10 velocità.. 0= 0% 10= 100% -conta secondi su lcd.. ogni secondo viene visuallizato sul lcd.....questo programma lo tirerò fuori piu avanti x fare un cronografo e in futuro un orologio regolabile tramite tasti...ma in futuro,prima studio,ci potrei fare anche un detonatore ![]() -conta pezzi considera che ogni programma base è gia stato modificato varie volte x provare varie funzioni che x ora non mi servono,voglio proseguire lo "studio" con interrup,analogico digitale,epron e mi piacerebbe anche l uso della seriale......ma piano piano.una bel passatempo serale che magari mi servirà in un futuro....quello che di sicuro devo imparare a creare è leggere il segnale dalla ricevente di un modello x creare un interuttore o giochi di luce gestiti durante il volo dalla radio.
__________________ NUOVO DRONE TAGLIATO AL LASER CO2 https://www.youtube.com/watch?v=cBgCVNyPH5c&t=7s GRUPPO LASER https://www.facebook.com/groups/1880460478909243/ |
| | |
![]() |
| 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 |