Ciao ragazzi,
Da un po' di tempo ho cominciato a programmare i PIC, sono ancora alle prime armi e mi ritrovo con non poche difficoltà. finché i programmi da realizzare sono banali, cioè che non coinvolgono particolari registri non ho problemi, tuttavia quando c'è da lavorare con interrupt e timer cominciano a sorgere le difficoltà e mi ritrovo spesso ad avere programmi non funzionanti. Mi riferisco in particolare ai PIC24, infatti per quanto riguarda i PIC16 non ho molti problemi e riesco a lavorare discretamente con queste due funzionalità, invece con i PIC24 non c'è verso. Sto cominciando a lavorare su i PIC24 perché il mio professore (università) mi ha consigliato di passare a questa serie, dato che quelli a 16 bit sono vecchiotti. Mi rendo conto che la causa è la mancanza di una preparazione di base adeguata, fino ad ora ho imparato studiando i datasheet e basandomi su alcuni tutorial sul web, che per carità sono molto esaurienti ma trattano quasi esclusivamente i PIC16. Qualcuno mi può consigliare un libro di testo o una guida su cui partire per entrambi le famiglie?
Inoltre, vorrei farvi un'altra domanda. Come ambiente di sviluppo cosa usate? Io uso MPLAB X IDE, voi quale ritenete migliore? E microC della Mikroel?
Grazie a tutti!
Programmare i PIC
Moderatore:
Paolino
24 messaggi
• Pagina 1 di 3 • 1, 2, 3
0
voti
I concetti che impari usando PIC24 li puoi riutilizzare anche su altre architetture, ma siccome nel mondo professionale al 90% ti troverai a dover lavorare con processori ARM, Io la fatica la farei per fare pratica su ARM. Si trovano facilmente ambienti e tools di sviluppo gratuiti.
-

luxinterior
4.311 3 4 9 - Master EY

- Messaggi: 2690
- Iscritto il: 6 gen 2016, 17:48
0
voti
In effetti i PIC16 sono un pochino vecchiotti se vuoi passare a qualcosa di più recente per cosi dire ma di pari fascia ci sarebbero i PIC18.
Io di solito uso sempre MPLAB X e mi trovo benissimo tuttavia utilizzo i PIC18 e i PIC32.
Secondo me se hai lacune sul C in effetti ti conviene trovare un libro, se invece hai problemi proprio sul micro secondo me ti conviene usare la documentazione rilasciata dalla microchip (compilatore XC16 e datasheet del micro)
Io di solito uso sempre MPLAB X e mi trovo benissimo tuttavia utilizzo i PIC18 e i PIC32.
Secondo me se hai lacune sul C in effetti ti conviene trovare un libro, se invece hai problemi proprio sul micro secondo me ti conviene usare la documentazione rilasciata dalla microchip (compilatore XC16 e datasheet del micro)
0
voti
Studio ingegneria dell'informazione (triennale), fa parte della tesi di laurea. Concordo con voi sul fatto che i pic16, seppur usciti molto tempo fa, sono sempre di attualità. Se l'applicazione accetta requisiti in termini hardware non complessi, che male c'è ad utilizzarli? (questo è ciò che ho spiegato a lui). Quando gli dissi che stavo lavorando con i pic16 mi rispose ridendo "ma dai! Il pic16 lo usavo io da bambino!", e francamente rimasi un po' male, anzi infastidito. Purtroppo se lui vuole così, devo fare così eheh.
Con il C me la cavo abbastanza bene, il problema è capire come funzionano i registri del PIC, ad esempio configurare il timer2, invece con i PIC16 ci riesco facilmente.
Con il C me la cavo abbastanza bene, il problema è capire come funzionano i registri del PIC, ad esempio configurare il timer2, invece con i PIC16 ci riesco facilmente.
0
voti
Ho provato a sfruttare l'interrupt ed il funzionamento del timer sul PIC24F16KA102 provando con il timer2 ed un interrupt su INT0, che corrisponde al pin RB7. E' un programmino molto banale giusto per testare l'interrupt, quando il flagbit per timer2 cambia stato la variabile c la pongo ad 1; invece, se avviene un interrupt su RB7 il pin RB0 deve passare a livello alto. Il giochetto con il timer2 funziona senza problemi, ma l'interrupt su RB7 non funziona. Cosa sbaglio?
- Codice: Seleziona tutto
#include <xc.h>
#include "setup.h"
int c =0;
void main(void) {
TRISB=0;
PORTB=0;
_T2IP = 0b001; //timer2 ha priorità 1
IFS0bits.T2IF = 0; //clear timer2 status flag
IEC0bits.T2IE = 1; //interrupt su timer2
//TCS impostato a 0, quindi viene usato clock interno
//I bit TCKPS<1:0> sono settati a 0, quindi prescaler di timer2 1:1
T2CONbits.TON = 1; //starts timer2
IEC0bits.INT0IE = 1; //abilita interrupt su RB7
IFS0bits.INT0IF = 0; //clear status flag interrupt on RB7
_INT0IP = 0b010; //priorità 2 per INT0
//matching dopo 10 us, dato che timer2 incrementa ogni 0.25us per
//arrivare ad 10us occorrono 10us/0.25us = 40 conteggi
PR2 = 40;
while(1) {
while(_T2IF);
IFS0bits.T2IF = 0;
c=1;
}
}
void _ISR _INT0Interrupt(void)
{
if(_INT0IF) {
_INT0IF = 0;
_RB0=1;
}
}
24 messaggi
• Pagina 1 di 3 • 1, 2, 3
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 7 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)





