spacer.png, 0 kB

Torna indietro   Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale > Robotica di base > Informatica > P. in C, C++

Rispondi
 
Strumenti discussione Modalità  visualizzazioe
  #1  
Vecchio 24-12-2014, 00.18.42
L'avatar di guiott
guiott guiott non è collegato
Robottaro sostenitore
 
Data registrazione: 23-04-2004
Residenza: Roma
Età : 63
Messaggi: 1,418
Potenza reputazione: 336
guiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua fama
Invia un messaggio via AIM a guiott Invia un messaggio via MSN a guiott Invia un messaggio via Yahoo a guiott Send a message via Skype™ to guiott
Predefinito MPLABX Code Generator

Ho scoperto solo ora questo:

credo che sia molto recente perché è certificato solo con le ultimissime versioni di MPLABX e XC8
è un plug-in di MPLABX che permette di generare facilmente il template di configurazione di un PIC a 8 bit.
In modo grafico selezioni le periferiche che vuoi, i parametri di inizializzazione del PIC: oscillatore, WDT e tutti gli altri fuse e lui ti genera il codice di partenza incluso il main.

Forse, se non sai già cosa significano tutte quelle cose non è molto chiaro il codice che produce ma, a partire da una conoscenza base, ti semplifica tutta quella palla noiosissima che richiede la fase di inizio ogni volta che usi un nuovo PIC.
Inoltre, sempre sapendo in modo generico come funziona il tutto, è anche molto didattico sulle modalità di scrittura del codice, inclusi i commenti in modalità Javadoc.
__________________
Guido
------
www.guiott.com
Rispondi citando
  #2  
Vecchio 24-12-2014, 01.46.07
L'avatar di landyandy
landyandy landyandy non è collegato
Robottaro sostenitore
 
Data registrazione: 07-02-2010
Residenza: Abruzzo - Teramo
Età : 44
Messaggi: 2,330
Potenza reputazione: 331
landyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua famalandyandy La sua reputazione è oltre la sua fama
Predefinito

Ottima segnalazione Guido però noi utenti di seconda categoria, utilizzatori di basic, abbiamo gia questa funzionalità implementata in maniera trasparente da anni , vorrei capire però, se siamo allo stesso livello di semplificazione ovvero, se io configuro un device tipo 16F84A il programma mi filtra in automatico i registri disponibili, inoltre ho la possibilità di creare degli alias di ogni registro.

Per esempio se voglio gestire il timer0, il programma mi propone questa config in automatico:

Symbol C = STATUS.0 ' Carry
Symbol Z = STATUS.2 ' Zero
Symbol NOT_PD = STATUS.3 ' Power Down flag
Symbol NOT_TO = STATUS.4 ' Time Out flag
Symbol RP0 = STATUS.5 ' Register bank select bit, used for direct addressing
Symbol RP1 = STATUS.6 ' Register bank select bit, used for direct addressing
Symbol IRP = STATUS.7 ' Register bank select bit, used for indirect addressing

oppure per la PortA mi propone questo:

Symbol RA0 = PORTA.0 ' Bi-directional I/O pin
Symbol RA1 = PORTA.1 ' Bi-directional I/O pin
Symbol RA2 = PORTA.2 ' Bi-directional I/O pin
Symbol RA3 = PORTA.3 ' Bi-directional I/O pin
Symbol RA4 = PORTA.4 ' Bi-directional I/O pin
Symbol T0CKI = PORTA.4 ' External clock input for TMR0



inoltre, se voglio usare una periferica tipo il PWM hardware scriverò:

Hpwm 1,127,1000 ' Send a 50% duty cycle Pwm signal at 1KHz

senza curarmi di nessun altra config.


oppure se voglio usare la usart scrivo:


Declare Hserial_Baud = 9600 ' Set baud rate to 9600


Declare Hserial_RCSTA = %10010000 ' Enable continuous receive



Declare Hserial_TXSTA = %00100000 ' Enable transmit and asynchronous mode



Declare Hserial_Clear = On ' Clear the buffer before receiving


Dim Var1 as Byte

Hserin 1000, Timeout, [Var1] ' Receive a byte serially into Var1





in pratica il concetto è lo stesso oppure debbo davvero iniziare a studiarmi sto C ???



saluti
landyandy

__________________
------------------------------------------------




-----------------------------------------------

Ultima modifica di landyandy : 24-12-2014 alle ore 01.48.15
Rispondi citando
  #3  
Vecchio 24-12-2014, 08.16.54
L'avatar di guiott
guiott guiott non è collegato
Robottaro sostenitore
 
Data registrazione: 23-04-2004
Residenza: Roma
Età : 63
Messaggi: 1,418
Potenza reputazione: 336
guiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua fama
Invia un messaggio via AIM a guiott Invia un messaggio via MSN a guiott Invia un messaggio via Yahoo a guiott Send a message via Skype™ to guiott
Predefinito

Ti crea un main nel quale ti suggerisce quello che c'è da fare

Codice:
void main(void)
{
    // initialize the device
    SYSTEM_Initialize();

    // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
    // Use the following macros to:

    // Enable the Global Interrupts
    //INTERRUPT_GlobalInterruptEnable();

    // Enable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptEnable();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();

    while (1)
    {
        // Add your application code
    }
}
La ISR

Codice:
void interrupt INTERRUPT_InterruptManager (void)
{
   // interrupt handler
    if(INTCONbits.TMR0IE == 1 && INTCONbits.TMR0IF == 1)
    {
        TMR0_ISR();
    }
    else
    {
        //Unhandled Interrupt
    }
}
inizializza gli I/O

Codice:
void PIN_MANAGER_Initialize(void)
{
    LATA = 0x00;
    TRISA = 0x3E;
    ANSELA = 0x16;
    WPUA = 0x00;

    LATB = 0x00;
    TRISB = 0xF0;
    ANSELB = 0xF0;
    WPUB = 0x00;

    LATC = 0x00;
    TRISC = 0xFF;
    ANSELC = 0xCF;
    WPUC = 0x00;

    OPTION_REGbits.nWPUEN = 0x01;

    APFCON0 = 0x00;

    APFCON1 = 0x00;
}
e crea le relative define sia per i mnemonici che per le macro di utilizzo

Codice:
#define INPUT   1
#define OUTPUT  0

#define HIGH    1
#define LOW     0

#define ANALOG      1
#define DIGITAL     0

#define PULL_UP_ENABLED      1
#define PULL_UP_DISABLED     0

// get/set IO_RA0 aliases
#define IO_RA0_TRIS               TRISA0
#define IO_RA0_LAT                LATA0
#define IO_RA0_PORT               RA0
#define IO_RA0_WPU                WPUA0
#define IO_RA0_ANS                ANSA0
#define IO_RA0_SetHigh()    do { LATA0 = 1; } while(0)
#define IO_RA0_SetLow()   do { LATA0 = 0; } while(0)
#define IO_RA0_Toggle()   do { LATA0 = ~LATA0; } while(0)
#define IO_RA0_GetValue()         RA0
#define IO_RA0_SetDigitalInput()    do { TRISA0 = 1; } while(0)
#define IO_RA0_SetDigitalOutput()   do { TRISA0 = 0; } while(0)

#define IO_RA0_SetPullup()    do { WPUA0 = 1; } while(0)
#define IO_RA0_ResetPullup()   do { WPUA0 = 0; } while(0)
#define IO_RA0_SetAnalogMode()   do { ANSA0 = 1; } while(0)
#define IO_RA0_SetDigitalMode()   do { ANSA0 = 0; } while(0)
Ti crea le funzioni per l'utilizzo normale, del tipo:

Codice:
void TMR0_Initialize(void);

uint8_t TMR0_ReadTimer(void);

void TMR0_WriteTimer(uint8_t timerVal);

void TMR0_Reload(void);

void TMR0_ISR(void);
Già solo la parte di inizializzazione del clock vale tutto il programma:

Codice:
void SYSTEM_Initialize(void)
{
    OSCILLATOR_Initialize();
    PIN_MANAGER_Initialize();
    TMR0_Initialize();
}

void OSCILLATOR_Initialize(void)
{
    // SPLLEN disabled; SCS FOSC; IRCF 500KHz_MF; 
    OSCCON = 0x38;
    // OSTS intosc; HFIOFR disabled; HFIOFS not0.5percent_acc; PLLR disabled; T1OSCR disabled; MFIOFR disabled; HFIOFL not2percent_acc; LFIOFR disabled; 
    OSCSTAT = 0x00;
    // TUN 0x0; 
    OSCTUNE = 0x00;
    // Set the secondary oscillator
    
}
Non ti sto a riportare tutto il codice. Fai una prova molto semplice: crea un progetto da zero, seleziona il PIC di tuo piacimento e poi lancia il tool di Code Generation e configura le tue periferiche. Ti trovi tutto il template, molto ben organizzato, con tutti i file.c separati per periferica e per funzione e tutti i file.h relativi con tutti i prototipi delle funzioni e gli mnemonici di tutto quello che serve. Ti trovi tutte le Interrupt Service Routines pronte insomma, puoi cominciare a lavorare con tutto ben commentato in sintassi javadoc che ti permette di avere i suggerimenti on-line durante l'editing del codice per ogni funzione e la possibilità di ottenere una documentazione corretta in modo automatico.
Il tutto è così ben fatto che, in pratica, è un corso di programmazione avanzata per XC8.

Non lavoro in basic ma penso che questo abbia comunque più macro e librerie per usare tutto in maniera più semplice. La Microchip non è mai stata famosa per fornire delle librerie fatte bene in C. l'MCC ti aiuta proponendo tutti i registri che servono per ogni periferica in modo sintetico, ma per capire come usarli devi sempre andare a leggere il DS. Ti propone il codice per tutte le funzioni, molto ben descritto, ma sei tu che devi andare ad adattarlo alle tue esigenze.
Non esiste il paragone con il Basic come non esiste il paragone con l'IDE di Arduino in termini di facilità di utilizzo, ma con il C puoi fare veramente tutto quello che ti serve sfruttando al massimo (veramente al massimo) le potenzialità delle periferiche dei PIC che sono il loro vero plus.

Nei corsi che sto tenendo porto sempre come esempio questo:

per me è un ottimo esempio delle possibilità di un PIC, di un tipo neanche troppo sofisticato. Tutto il programma si svolge ad interrupt tra le diverse periferiche, con tempi ben precisi nell'ordine dei microsecondi. Il codice è di una banalità unica. Come sempre la parte più complicata è solo la configurazione iniziale, poi gira tutto tra ISR minimali.

Con il C, un C che ti consenta l'accesso ai singoli registri, puoi farlo. Con MCC puoi iniziare un programma in C anche da zero in maniera semplice... finalmente.
__________________
Guido
------
www.guiott.com

Ultima modifica di guiott : 24-12-2014 alle ore 08.19.51
Rispondi citando
  #4  
Vecchio 24-12-2014, 08.34.28
L'avatar di guiott
guiott guiott non è collegato
Robottaro sostenitore
 
Data registrazione: 23-04-2004
Residenza: Roma
Età : 63
Messaggi: 1,418
Potenza reputazione: 336
guiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua fama
Invia un messaggio via AIM a guiott Invia un messaggio via MSN a guiott Invia un messaggio via Yahoo a guiott Send a message via Skype™ to guiott
Predefinito

Giusto qualche esempio:

uno

due

tre
__________________
Guido
------
www.guiott.com
Rispondi citando
  #5  
Vecchio 24-12-2014, 08.37.39
L'avatar di astrobeed
astrobeed astrobeed non è collegato
Robottaro sostenitore
 
Data registrazione: 18-03-2004
Residenza: Roma
Età : 60
Messaggi: 3,377
Potenza reputazione: 350
astrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua fama
Predefinito

Citazione:
Orginalmente inviato da guiott Visualizza messaggio
Ho scoperto solo ora questo:

credo che sia molto recente perché è certificato solo con le ultimissime versioni di MPLABX e XC8
Anche XC16 visto che supporta diversi modelli di PIC24, peccato che ancora non supporta i dsPIC33.
__________________
Bye
Rispondi citando
  #6  
Vecchio 24-12-2014, 08.53.35
L'avatar di guiott
guiott guiott non è collegato
Robottaro sostenitore
 
Data registrazione: 23-04-2004
Residenza: Roma
Età : 63
Messaggi: 1,418
Potenza reputazione: 336
guiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua famaguiott La sua reputazione è oltre la sua fama
Invia un messaggio via AIM a guiott Invia un messaggio via MSN a guiott Invia un messaggio via Yahoo a guiott Send a message via Skype™ to guiott
Predefinito

Citazione:
Orginalmente inviato da astrobeed Visualizza messaggio
Anche XC16 visto che supporta diversi modelli di PIC24, peccato che ancora non supporta i dsPIC33.
Diciamo che le configurazioni di base, clock e periferiche che sono le più complicate, sono le stesse tra PIC24 e sPIC33.

Potrebbe comunque essere un bell'aiuto per l'inizializzazione. Certo, c'è da lavorarci un po'.

Speriamo che lo aggiornino presto.
__________________
Guido
------
www.guiott.com
Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 3 (0 utenti e 3 ospiti)
 
Strumenti discussione
Modalità  visualizzazioe

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code è Attivato
Le smilies sono Attivato
[IMG] è Attivato
Il codice HTML è Disattivato

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
MpLabX + nGIT matty Informatica 8 13-06-2013 20.07.51
OpenCV + Code::Blocks + MinGW Minerva_k7 OpenCV 1 16-11-2011 15.40.07
pin code 21pt10 bodla Elettronica 6 17-07-2008 13.02.26


Tutti gli orari sono GMT. Adesso sono le: 21.30.10.


Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Realizzazione siti web Cobaltica Foligno
spacer.png, 0 kB