elsabz Inserito: 4 agosto 2006 Segnala Share Inserito: 4 agosto 2006 Ciao a tutti,tempo fa ho realizzato una applicazione con il PIC 16F877A. Ho creato con successo un programma in linguaggio C con il compilatore PICClite della HITECH-Software, integrato in MPLAB 7 con ICD2. Adesso mi trovo nella condizione di dover prendere una decisione per poter ampliare il progetto. In pratica vorrei provare il compilatore CCS, visto che i costi sono decisamente inferiori rispetto alla versione licenziata della HITECH-Software (125,00 EURO contro 1000,00 EURO). Quello che vorrei sapere è se il codice sviluppato con PICCLITE è portabile con facilità in CCS. Sicuramente il linguaggio C ha una elevata portabilità, quello che mi preoccupa sono le cose critiche. Detto questo vorrei porre alcune domande in merito:1.) il file heder pic.h che ho incluso nel progetto con PICCLITE c'è anche con il CCS uno uguale o simile?2.) l'interrupt nel PCCLITE lo ho gestito con la funzione di sistema void interrupt inter(void), nel CCS come avviene questo?3.) Come mai il compilatore CCS costa cosi tanto in meno? Ci sarà un motivo!?!Grazie in anticipo a chi volesse cortesemente rispondermi!SalutiSergio Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 4 agosto 2006 Segnala Share Inserita: 4 agosto 2006 Ciao elsabz, con CCS devi inserire il file .h che ti viene fornito in libreria.la gestione degli interrupts è simile, cambia solo un poco la forma. Comunque trovi tutto nell'ottimo help on line del Compilatore.Le differenze di prezzo stanno prima di tutto nelle politiche commerciali. CCS si rivolge ad un target diverso di Hitech. Poi c'è anche un'ottimizzazione forse migliore in Hitech, ma non sempre. Link al commento Condividi su altri siti More sharing options...
elsabz Inserita: 4 agosto 2006 Autore Segnala Share Inserita: 4 agosto 2006 Ciao Livio,si ho visto che c'è tutto sul sito della CCS. Ho anche già provato ad installare la versione demo del compilatore PCM for 14bit MCUs e ho iniziato la migrazione. Subito ho notato che gli identificatori che usa PICCLITE (pic.h) sono diversi da CCS, il cui file header è nella libreria come hai detto tu (16F877A.h). Mi sembra che le differenze sono abbastanza consistenti, ma penso che ne valga la pena visto il gran risparmio. Ad esempio con PICCLITE per impostare un TRISA basta scrivere TRISA=0b00011111; , mentre con CCS bisogna scrivere SET_TRIS_A(0b00011111); . Adesso sto cercando di capire come settare PORTA. Un'altra questione che mi sono posto e come si fa nel CCS ad accedere ad una variabile del bank1. Nel PICCLITE bastava dichiarare bank1 int pippo;, nel CCS non so ancora magari se qualcuno me lo può suggerire gliene sarei grato.CiaoSergio Link al commento Condividi su altri siti More sharing options...
elsabz Inserita: 4 agosto 2006 Autore Segnala Share Inserita: 4 agosto 2006 Oggi il forum mi sembra strano! Mi chiede continuamente la userid e password pur essendo già loggato, non riesco a capire cosa succede!A parte questo, trovo anche strano il compilatore CCS, non riesco a comprendere come posso settare il registro ADCON1, con PICCLITE basta scrivere ADCON1 = 0b00000110;, con CCS come si fà?Nel manuale ho trovato la funzione SETUP_ADC_PORTS() ma non riesco a capire come posso fare per settare il valore del registro come lo voglio!GrazieSergio Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 4 agosto 2006 Segnala Share Inserita: 4 agosto 2006 Vai nell'help e confronta le "built in functions", guarda anche i files di esempio che vengono citati. Se proprio sei in difficoltà ti posto un esempio (appena riesco a reperirlo nei meandri degli archivi) Link al commento Condividi su altri siti More sharing options...
elsabz Inserita: 4 agosto 2006 Autore Segnala Share Inserita: 4 agosto 2006 Forse ho trovato la soluzione:premesso che gli identificatori che con PICCLITE erano riconosciuti con CCS non lo sono, ho dedotto che mi devo creare tali identificatori. Quindi se scrivo#byte ADCON1 = 0x9F dico al preprocessore che ADCON1 è una variabile byte il cui indirizzo è 9Fh. 9Fh è l'indirizzo del registro ADCON1, questo valore l'ho preso dal datasheet del PIC16F877A. Poi nel programma scrivo ADCON1 = 0b00000110;cosi il compilatore lo digerisce!Poi non so se funziona perchè non ho qua un PIC per provare!Qualcuno me lo può confermare?CiaoGrazie Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 4 agosto 2006 Segnala Share Inserita: 4 agosto 2006 Ciao SergioTi allego il codice CCS di un programmino di prova. Funziona con 876 e 877 (testato con entrambi). Scarta la parte display e conversioni e tieni solo la parte A/D_C ////////////////////////////////////////////////////////////////////////// //// 876_ad_disp.C //// //// //// //// Questo programma legge un canale A/D, esegue la media //// //// su 5 letture e lo visualizza su un display a 3 cifre //// ////////////////////////////////////////////////////////////////////////// /*************************************************************** * Funzione per convertire un esadecimale binario <= 1000 in un * numero in BCD su tre decadi. In questo caso le centinaia * possono arrivare fino a 15 (F) quindi il numero esadecimale * <= 1599 ***************************************************************/ long binbcd(long bcd) { long a, b, d; int i; int unit, dec, cent; port_b = 0x30; port_c = 0x80; if (bcd > 99) { cent = (int)(bcd/100); b = (long)(cent)*100; a = bcd - b; } else { a = bcd; cent = 0; } if(a>9) { dec =(int)(a)/10; d = (long)(dec)*10; unit =(int)(a-d); } else { unit = a; dec = 0; } i = unit; i = i | 0x10; port_b = i; i = dec; i = i | 0x20; port_b = 0x30; port_b = i; i = cent; port_b = 0x30; i = i | 0x30; output_low(PIN_C7); port_b = i; delay_us(10); output_high(PIN_C7); } /******************************************************************* * *******************************************************************/ #include <16F876.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #use delay(clock=20000000) #USE standard_io(C) #USE fast_io(B) #USE fast_io(A) long lrd_AD(5); int istato_a = 0; int iold_stato_a = 0; int icnt_conv = 0: /******************************************************************* * *******************************************************************/ main() { int1 loopDoneFlag; int i; long sum, conv; setup_timer_1(T1_INTERNAL); // Set up timer to instruction clk setup_counters(RTCC_INTERNAL,RTCC_DIV_4); setup_timer_1(T1_INTERNAL); set_timer1(0xC350); //Caricato 50.000 ==> 50.000 * 4 * 125nsec = 25msec enable_interrupts(GLOBAL); enable_interrupts(int_timer1); set_tris_b(0x00); // RB = output set_tris_c(0x80); //RC7 = output set_tris_a(0b11111111); // RA1 = input setup_port_a( ALL_ANALOG ); setup_adc( ADC_CLOCK_INTERNAL ); set_adc_channel( 0 ); cnt_conv = 0; sum = 0; while (TRUE) { if (icnt_conv = 5) { icnt_conv = 0; sum = 0; for(i=0;i<5;++i) { delay_ms(10); sum+=lrd_AD(i); } conv = (sum/5); } } } Link al commento Condividi su altri siti More sharing options...
elsabz Inserita: 4 agosto 2006 Autore Segnala Share Inserita: 4 agosto 2006 Ciao Livio,grazie per aver postato il codice, in ogni modo sono riuscito a far girare una parte del programma che avevo fatto con il PICCLITE. In pratica quello che ho scritto nel mio post precedente è confermato e quindi con le direttive del preprocessore, sono riuscito a rendere portabile il mio codice senza fare grandi modifiche.Ora dovrò modificare e testare la parte interrupt e penso di non aver problemi, visto che ho anche degli esempi.Una cosa me mi domando è come fà il compilatore PCM CCS a gestire i banchi di memoria (bank0,1,2,3)? Forse lo fà automaticamente? Con il PICCLITE bisognava dichiarare le variabili con bank1 o 2,3 anteposto!CiaoSergio Link al commento Condividi su altri siti More sharing options...
elsabz Inserita: 9 agosto 2006 Autore Segnala Share Inserita: 9 agosto 2006 Ciao,ho un altro problema, dovendo fare del debug con MPLAB 7.22 e CCS PCM demo, mi sono accorto che non funziona. Quando programmo il target con MPLAB mi da il seguente errore: ICD0083: Target not in debug mode, unable to perform operation Qualcuno sa aiutarmi?CiaoSergio Link al commento Condividi su altri siti More sharing options...
elsabz Inserita: 9 agosto 2006 Autore Segnala Share Inserita: 9 agosto 2006 Ciao,sono alla disperazione massima Non ne vengo fuori, non mi lascia fare questo benedetto debug!Eppure l'ho sempre fatto con HITECH PICCLITE!La programmazione avviene correttamente il debug no!L'hardware è identico, uso MPLAB V7.40, e ho ICD 2, l'unica cosa che ho cambiato è il compilatore, come da oggetto della presente discussione.Ho cercato di documentarmi sulla problematica e ho scoperto alcune cose:- la predefinizione "#device ICD=TRUE" sembra essere fondamentale per eseguire il debug - dopo che si compila con questa direttiva i bit di configurazione vengono settati in posizione di default, pertanto con la direttiva "#fuses XT,NOWDT,NOPROTECT,PUT,BROWNOUT,NOLVP" riesco a rimetterli a posto, in ogni modo il problema persite!Vi prego aiutatemi! Link al commento Condividi su altri siti More sharing options...
elsabz Inserita: 9 agosto 2006 Autore Segnala Share Inserita: 9 agosto 2006 Non so come mai, ma adesso sono riuscito a fare il debug!Ho aperto il progetto fatto con PICCLITE e ho fatto il debug per verificare se funzionava ancora. Poi quando ho visto che funzionava, ho aperto il progetto compilato con CCS e quindi sono rimasto molto sopreso nel vedere che il debug funzionava! In ogni modo sarei curioso di sapere perchè è accaduto questo, pertanto se qualcuno lo sa si faccia avanti, nel caso che lo scoprirò da solo ve lo farò sapere.CiaoSergio Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 10 agosto 2006 Segnala Share Inserita: 10 agosto 2006 Può succedere. Probabilmente c'è qualche bugs nel compilatore e, a volte, s'impalla. Solitamente è sufficiente chiudere tutto, togliere l'alimentazione al target ed iniziare da capo. Con la mia versione di CCS questo problema è praticamente scomparso, mentre con la vecchia versione che usavo capitava frequentemente. Link al commento Condividi su altri siti More sharing options...
elsabz Inserita: 22 agosto 2006 Autore Segnala Share Inserita: 22 agosto 2006 Ciao,ho completato le mie prove con il compilatore CCS e ho concluso che non lo utilizzero a causa dei tanti problemi riscontrati. Non ho capito come mai ma non riuscivo a fare il debug (ICD0083: Target not in debug mode, unable to perform operation), questo mi ha fatto perdere tanto tempo e aimè ho tirato tante bestemmie .Sconsolato e afflitto da questi problemi, tramite un amico, mi sono procurato il compilatore PICC della HI-TECH, quello non limitato ed ho riscontrato che il problema di debug non c'era più .Ora funziona tutto a dovere, riesco a lavorare molto bene rispetto prima!Comunque grazie a Livo per i consigli!CiaoSergio Link al commento Condividi su altri siti More sharing options...
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