Alessandro Dj-alex Turco Inserito: 25 gennaio 2015 Segnala Inserito: 25 gennaio 2015 vedi foto allegata
Livio Orsini Inserita: 25 gennaio 2015 Segnala Inserita: 25 gennaio 2015 Scusa ma tu vuoi che qualcuni faccia il programma per conto tuo? Scordalo! Dal forum sicuramente riceverai tanto aiuto, ma ci devi mettere del tuo.
Alessandro Dj-alex Turco Inserita: 25 gennaio 2015 Autore Segnala Inserita: 25 gennaio 2015 No...non voglio che qualcuno faccia il programma al posto mio...cerco solo aiuto...io ho già progettato la parte hardware
Livio Orsini Inserita: 25 gennaio 2015 Segnala Inserita: 25 gennaio 2015 (modificato) Che tipo di aiuto ti serve? Che complilatore usi? Più informazioni dai più fcilmente sarai aiutato. Modificato: 25 gennaio 2015 da Livio Orsini
giacomo56 Inserita: 25 gennaio 2015 Segnala Inserita: 25 gennaio 2015 Ciao.Intanto per funzionare ha bisogno di un paio di resistori da 10K tra RA0 e RA1 e VDD perché la porta A non ha pull-up interni, un resistoresempre da 10K collegato al pin 4 altrimenti hai problemi col reset e in ultimo è sempre consigliabile un condensatore da 100 nF tra il pin VDD emassa.Per il software puoi iniziare a definire un array dove memorizzare il codice delle cifre, per esempio:char const cifra[] = {0xf3, 0xyy, 0xyy, 0xyy, 0xyy, 0xyy, 0xyy, 0xyy, 0xf7, 0xyy};0xf3 corrisponde allo '0', 0xf7 all'8', gli altri valori yy li puoi trovare tu.Nel codice scriverari: portb = cifra[0]; per accendere lo zero, portb = cifra[1]; per accendere l'uno e così via.Per leggere i tasti puoi fare un ciclo che controlla lo stato dei pulsanti ed esegue l'azione conseguente.Per evitare i rimbalzi meccanici dei tasti devi usare un codice anti rimbalzo, se fai una ricerca su internet trovi come farlo.
accacca Inserita: 25 gennaio 2015 Segnala Inserita: 25 gennaio 2015 (modificato) Se lo scopo è imparare a usar PIC a diavolerie simili può andare altrimenti credo che con un paio di integrati e qualche passivo può risolvere senza utilizzare un PIC. Modificato: 25 gennaio 2015 da accacca
Alessandro Dj-alex Turco Inserita: 25 gennaio 2015 Autore Segnala Inserita: 25 gennaio 2015 Ok Devo usare il pic Il circuito lo devo simulare con multisim La parte hardware è corretta Avrei bisogno solo di un esempio di codice programma in C
Livio Orsini Inserita: 26 gennaio 2015 Segnala Inserita: 26 gennaio 2015 Farti un esempio significa farti il programma, vist la banalità del programma. Il "C" va studiato. Non lo s'impara per scienza infusa e nemmeno per tentativi. Ti prendi un manuale, magari il classico Richtie, e lo studi. Se non fai così potrai mettere assieme solo qualche cosina, scimmiottando esempi senza sapere quello che stai facendo. Per imparare bisogna fare un minimo di fatica e spenderci un poco di tempo.
Alessandro Dj-alex Turco Inserita: 26 gennaio 2015 Autore Segnala Inserita: 26 gennaio 2015 Il problema è che io so usare benissimo arduino ma usa un C con comandi proprietari e non so come farlo con un PIC16F84Se vuoi faccio il programma con C arduino e poi qualcuno mi aiuta a farlo adattare per il PIC
Livio Orsini Inserita: 26 gennaio 2015 Segnala Inserita: 26 gennaio 2015 Il problema è che io so usare benissimo arduino ma usa un C.... Arduino per le librerie usa "C++" mentre per gli sketch è praticamente il "C" stndard. Poi esistono le "bult in functions" che sono funzioni speciali sviluppate su un determinato compilatore per un determinato processore. Anche per il PIC i vari complilatori adottano "bult in functions" che variano secondo compilatore usato. Poi c'è il problema del legame con lo Hw che, anche usando un liguaggio ad alto livello, è imprescindibile. Tu prova a scrivere il programma per arduino, poi vediamo di aiutarti alla trasposizione.
Alessandro Dj-alex Turco Inserita: 26 gennaio 2015 Autore Segnala Inserita: 26 gennaio 2015 // numero dei pin di arduino collegati ai segmenti const byte seg_A = 2; const byte seg_B = 3; const byte seg_C = 4; const byte seg_D = 5; const byte seg_E = 6; const byte seg_F = 7; const byte seg_G = 8; // array dei segmenti const byte segments[7] = { seg_A, seg_B, seg_C, seg_D, seg_E, seg_F, seg_G,}; // array byte in uscita per ogni valore (l'ultimo valore non è mai utilizzato) const byte numbers [7] = { 0b10101011, // n 0b11111001, // 1 0b10100100, // 2 0b10110000, // 3 0b10011001, // 4 0b10010010, // 5 0b10000010, // 6 }; // variab byte gear = 0;Deve contare da 0 a 9 avanti e indietro con i due pulsantiNon uso un compilatore lo devo simulare con multisim e usa hi-tech C
Alessandro Dj-alex Turco Inserita: 26 gennaio 2015 Autore Segnala Inserita: 26 gennaio 2015 ** come faccio ad adattare questo codice arduino per pic ** come faccio ha gestire i pulsanti avanti e indietro (senza farlo avanzare in automatico) // Conteggio 9 secondi con display 7 segmenti a catodo comune // definizione delle variabili a cui collegare ogni segmento del display // la lettera rappresenta il segmento del display il numero il pin // digitale di Arduino a cui è collegato il corrispondente pin del display const int a=7; const int b=6; const int c=4; const int d=2; const int e=1; const int f=9; const int g=10; void LedAcceso(int n) { switch(n) { case 0: digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, LOW); break; case 1: digitalWrite(a, LOW); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); break; case 2: digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, LOW); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, LOW); digitalWrite(g, HIGH); break; case 3: digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, HIGH); break; case 4: digitalWrite(a, LOW); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); break; case 5: digitalWrite(a, HIGH); digitalWrite(b, LOW); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); break; case 6: digitalWrite(a, HIGH); digitalWrite(b, LOW); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); break; case 7: digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, LOW); digitalWrite(e, LOW); digitalWrite(f, LOW); digitalWrite(g, LOW); break; case 8: digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, HIGH); digitalWrite(f, HIGH); digitalWrite(g, HIGH); break; case 9: digitalWrite(a, HIGH); digitalWrite(b, HIGH); digitalWrite(c, HIGH); digitalWrite(d, HIGH); digitalWrite(e, LOW); digitalWrite(f, HIGH); digitalWrite(g, HIGH); break; } }; void setup() { pinMode(a, OUTPUT); pinMode(b, OUTPUT); pinMode(c, OUTPUT); pinMode(d, OUTPUT); pinMode(e, OUTPUT); pinMode(f, OUTPUT); pinMode(g, OUTPUT); } void loop () { for (int i=0;i<10;i++) { LedAcceso(i); delay (1000); } }
simuffa Inserita: 26 gennaio 2015 Segnala Inserita: 26 gennaio 2015 (modificato) qui trovi il manuale dell' hi-tec C se ti interessa http://ww1.microchip.com/downloads/en/DeviceDoc/HTC_PIC_manual.pdf Modificato: 26 gennaio 2015 da simuffa
Alessandro Dj-alex Turco Inserita: 26 gennaio 2015 Autore Segnala Inserita: 26 gennaio 2015 Nel messaggio 13 è assebler / assembly ma devo farlo in C
simuffa Inserita: 26 gennaio 2015 Segnala Inserita: 26 gennaio 2015 (modificato) qui c'è un primo pezzo da cui puoi prendere spunto... unsigned char num; // numero da visualizzare //array con la codifica per i displayunsigned char DISPLAY[10] = {63, 6, 91, 79, 102, 109, 125, 7, 127, 111};void main(){ TRISA=0; TRISB=0; num=0;for(;; ){if(num==10) num=0; PORTB=DISPLAY[num]; num++; Delay_ms(1000); } } Modificato: 26 gennaio 2015 da simuffa
Livio Orsini Inserita: 26 gennaio 2015 Segnala Inserita: 26 gennaio 2015 come faccio ha gestire i pulsanti avanti e indietro (senza farlo avanzare in automatico) Nel medesimo modo come fai con arduino, con la facilitazione che gli ingressi e le uscite in "C" le puoi anche tratare singolarmente a bits
Alessandro Dj-alex Turco Inserita: 26 gennaio 2015 Autore Segnala Inserita: 26 gennaio 2015 (modificato) CIOE ESEMPIO gli ingressi e le uscite in "C" le puoi anche tratare singolarmente a bits #define BTN1 RA0 / #define BTN2 RA1 #define A RB0 #define B RB1 #define C RB2 #define D RB3 #define E RB4 #define F RB5 #define G RB6 Modificato: 26 gennaio 2015 da Alessandro Dj-alex Turco
Alessandro Dj-alex Turco Inserita: 26 gennaio 2015 Autore Segnala Inserita: 26 gennaio 2015 // #include <p16f84.h> #define BTN1 RA0 // pulsante PIU #define BTN2 RA1 // pulsante MENO #define a RB0 // led A_1 #define b RB1 // led B_2 #define c RB2 // led C_3 #define d RB3 // led D_4 #define e RB4 // led E_5 #define f RB5 // led F_6 #define g RB6 // led G_7 void LedAcceso(int n) { switch(n) { case 0: PORTAbits.RB0=1; PORTAbits.RB1=1; PORTAbits.RB2=1; PORTAbits.RB3=1; PORTAbits.RB4=1; PORTAbits.RB5=1; PORTAbits.RB6=0; break; case 1: PORTAbits.RB0=0; PORTAbits.RB1=1; PORTAbits.RB2=1; PORTAbits.RB3=0; PORTAbits.RB4=0; PORTAbits.RB5=0; PORTAbits.RB6=0; break; case 2: PORTAbits.RB0=1; PORTAbits.RB1=1; PORTAbits.RB2=0; PORTAbits.RB3=1; PORTAbits.RB4=1; PORTAbits.RB5=0; PORTAbits.RB6=1; break; case 3: PORTAbits.RB0=1; PORTAbits.RB1=1; PORTAbits.RB2=1; PORTAbits.RB3=1; PORTAbits.RB4=0; PORTAbits.RB5=0; PORTAbits.RB6=1; break; case 4: PORTAbits.RB0=0; PORTAbits.RB1=1; PORTAbits.RB2=1; PORTAbits.RB3=0; PORTAbits.RB4=0; PORTAbits.RB5=1; PORTAbits.RB6=1; break; case 5: PORTAbits.RB0=1; PORTAbits.RB1=0; PORTAbits.RB2=1; PORTAbits.RB3=1; PORTAbits.RB4=0; PORTAbits.RB5=1; PORTAbits.RB6=1; break; case 6: PORTAbits.RB0=1; PORTAbits.RB1=0; PORTAbits.RB2=1; PORTAbits.RB3=1; PORTAbits.RB4=1; PORTAbits.RB5=1; PORTAbits.RB6=1; break; case 7: PORTAbits.RB0=1; PORTAbits.RB1=1; PORTAbits.RB2=1; PORTAbits.RB3=0; PORTAbits.RB4=0; PORTAbits.RB5=0; PORTAbits.RB6=0; break; case 8: PORTAbits.RB0=1; PORTAbits.RB1=1; PORTAbits.RB2=1; PORTAbits.RB3=1; PORTAbits.RB4=1; PORTAbits.RB5=1; PORTAbits.RB6=1; break; case 9: PORTAbits.RB0=1; PORTAbits.RB1=1; PORTAbits.RB2=1; PORTAbits.RB3=1; PORTAbits.RB4=0; PORTAbits.RB5=1; PORTAbits.RB6=1; break; } }; void loop () { for (int n=0;n<10;n++) { LedAcceso(n); delay (1000); } } void main() { /* Insert your code here. */ } >>>>> NON VA DOVE HO SBAGLIATO
simuffa Inserita: 26 gennaio 2015 Segnala Inserita: 26 gennaio 2015 (modificato) il main è la prima funzione che parte.. e nel tuo non c'è nulla hai riscritto tutto questo per rifare semplicemente quello che ti ho messo nell'esempio? hai definito le variabili poi usi PortA? bastava che scrivessi a=1; ad esempio (dovevi usare portB comunque) Modificato: 26 gennaio 2015 da simuffa
Alessandro Dj-alex Turco Inserita: 26 gennaio 2015 Autore Segnala Inserita: 26 gennaio 2015 PERO QUELLO CHE HAI POSTATO NON VA
simuffa Inserita: 26 gennaio 2015 Segnala Inserita: 26 gennaio 2015 il programma non l'ho fatto io.. l'ho preso da internet e funziona.. nel messaggio 5 di giacomo56 alla 3 riga probabilmente c'è la soluzione
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora