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


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 25 ottobre 10, 13:07   #61 (permalink)  Top
Rivenditore - B.C.M. Power & Tools
 
L'avatar di claudio476
 
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]

claudio476 non è collegato   Rispondi citando
Vecchio 25 ottobre 10, 13:24   #62 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Citazione:
Originalmente inviato da claudio476 Visualizza messaggio
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..
Comunque il ~ esiste anche in C#, con lo stesso significato...
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 25 ottobre 10, 21:40   #63 (permalink)  Top
User
 
L'avatar di ElNonino
 
Data registr.: 06-05-2007
Residenza: Tre Ville (Preore)
Messaggi: 3.604
Invia un messaggio via MSN a ElNonino
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 -------------						
								

}

//------------------------------------------------------------
Con alcuni PIC inoltre se si vuole invertire lo stato di una uscita è meglio leggere il registro LATCHx e scrivere in PORTx

__________________
Peace & Love
Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein)
ElNonino non è collegato   Rispondi citando
Vecchio 09 novembre 10, 23:26   #64 (permalink)  Top
User
 
L'avatar di elicottero78
 
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/
elicottero78 non è collegato   Rispondi citando
Vecchio 09 novembre 10, 23:42   #65 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Citazione:
Originalmente inviato da elicottero78 Visualizza messaggio
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);
}
Io ho trovato questo sulla intToStr (ma è usata solo dal Mikroc?):
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 )
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 09 novembre 10, 23:46   #66 (permalink)  Top
User
 
L'avatar di elicottero78
 
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/
elicottero78 non è collegato   Rispondi citando
Vecchio 10 novembre 10, 18:31   #67 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Citazione:
Originalmente inviato da elicottero78 Visualizza messaggio
grazie x la risposta,ma
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);
}
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 10 novembre 10, 23:25   #68 (permalink)  Top
User
 
L'avatar di elicottero78
 
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/
elicottero78 non è collegato   Rispondi citando
Vecchio 11 novembre 10, 08:27   #69 (permalink)  Top
User
 
L'avatar di illez
 
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...
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 11 novembre 10, 12:54   #70 (permalink)  Top
User
 
L'avatar di elicottero78
 
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/
elicottero78 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 14:27.


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
www.baronerosso.it - www.toymagazine.it