.: robotitaly.NET :. - la community italiana sulla robotica  

Vai indietro   .: robotitaly.NET :. - la community italiana sulla robotica > Microcontrollori > PIC & AVR

PIC & AVR Forum dedicato ai diffusissimi microcontrollori PICMicro e AVR

Rispondi
 
Strumenti della discussione Modalità di visualizzazione
  #101  
Vecchio 01-21-2012, 09:37 AM
L'avatar di Emanuele Terrasi
Emanuele Terrasi Emanuele Terrasi non è collegato
Roboter Graduato
 
Registrato dal: Dec 2009
residenza: Palermo
Messaggi: 492
Blog Entries: 15
predefinito

Macchè. I registri tipo LATA riesco a vederli, ma la memoria dati tipo led1_cnt è sempre a zero.

P.S. E' veramente un peccato che io non riesca a leggere altro, se non "Reserved Memory" oppure zero, nella finestra di Watch.
Se invece potessi osservare le variabili in memoria, sia pure stoppando il calcolo, avrei uno strumento per studiare gli algoritmi di discesa addirittura meglio che in un Personal Computer, e per di più su dati reali.

P.S. A quanto pare ci sono finalmente riuscito (usavo prima il Programmer e poi il Debugger). Adesso non ho più scuse..............

Ultima modifica di Emanuele Terrasi; 01-23-2012 a 11:38 AM Motivo: P.S.
Rispondi quotando
  #102  
Vecchio 10-31-2012, 08:01 AM
L'avatar di Emanuele Terrasi
Emanuele Terrasi Emanuele Terrasi non è collegato
Roboter Graduato
 
Registrato dal: Dec 2009
residenza: Palermo
Messaggi: 492
Blog Entries: 15
predefinito

Quote:
Originariamente inviata da guiott Visualizza il messaggio
Nessun adattamento, per le funzioni base sono pin-to-pin compatibili. I motor controller hanno qualche ADC a risoluzione minore ma a velocità molto più alta (servono per il controllo dei BLDC).
Intanto ti ringrazio per la risposta sull'altro thread.

Sto ammattendo:
codice:
#include "p33FJ128MC802.h" //impostare fusebits fastRC wPLL e tutto libero

int main (void) {     //Main Program 
PLLFBDbits.PLLDIV=41; // M=43 PLLDIV=41 clock oscillator fast RC with PLL 
CLKDIVbits.PLLPOST=0; // N1=2  N2=2(default) 7.37*M/N1/N2=79Mhz~40MIPS 
while(OSCCONbits.LOCK!=1) {};		// Wait for PLL to lock

AD1PCFGL = 0b0001111111111111;// AN1-12 digital I/O
TRISA = 0b1111111111100000;   //OUT RA0,1 2,3,4
TRISB = 0b0000001111111011;   //OUT RB2,10,11,12,13,14,15

_LATA0 = 1; _LATA1 = 1; _LATA2 = 1; _LATA3 = 1; _LATA4 = 1;//pin 2,3,9,10,12
_LATB2 = 1; _LATB10 = 1; _LATB11 = 1; _LATB12 = 1;         //pin 6,21,22,23
_LATB13= 1; _LATB14 = 1; _LATB15 = 1;                      //pin 24,25,26

prova:
goto prova; }
Provando col tester, trovo il valore alto sulle uscite che il programma ha posto =1, tranne i pin 21 e 22 che restano appesi!
Questo fenomeno avviene solo col p33FJ128MC802, mentre col p33FJ128GP802 le uscite commutano tutte regolarmente. L'unica particolarità che trovo in quei due pin è che sono 5V tolerant, ma ciò è vero per entrambi i chip. Ho anche provato con un chip nuovo, stesso problema. Che ci sia un bug nel file p33FJ128MC802.h ? Ma se ci fosse un indirizzo di un registro sbagliato, potrebbe mai succedere questo? Ho anche provato a disabilitare le uscite dei moduli PWM ma non cambia nulla.

OK, nei Configuration Bits era rimasto JTAG enabled (cusa l'è che l'èe?)

Ultima modifica di Emanuele Terrasi; 11-07-2012 a 07:02 AM Motivo: Risolto
Rispondi quotando
  #103  
Vecchio 03-12-2013, 09:43 AM
L'avatar di Emanuele Terrasi
Emanuele Terrasi Emanuele Terrasi non è collegato
Roboter Graduato
 
Registrato dal: Dec 2009
residenza: Palermo
Messaggi: 492
Blog Entries: 15
predefinito Configuration bits

A proposito di configuration bits, fino ad ora ho usato il menu Configure-Configuration bits di MPLAB col Pickit3 innestato, ma ho sentito parlare di una istruzione Config da mettere nel sorgente. Dove potrei trovare l'esatta sintassi di questa istruzione?

P.S. Questa l'ho dedotta leggendo il file .h della MCU e sembra funzionare: _FOSCSEL (FNOSC_FRCPLL & IESO_ON)

Ultima modifica di Emanuele Terrasi; 03-12-2013 a 12:07 PM
Rispondi quotando
  #104  
Vecchio 08-30-2013, 05:41 PM
L'avatar di Emanuele Terrasi
Emanuele Terrasi Emanuele Terrasi non è collegato
Roboter Graduato
 
Registrato dal: Dec 2009
residenza: Palermo
Messaggi: 492
Blog Entries: 15
predefinito

Quote:
Originariamente inviata da astrobeed Visualizza il messaggio
Un valore const per sua natura è immutabile, una variabile non puoi metterla nella flash, o la metti nella RAM oppure nella emulazione EEPROM.
L'emulazione EEPROM in flash di Microchip serve proprio per salvare dei valori in modo da ritrovarli dopo un reset o un power up.
Attenzione che l'endurance della flash dei PIC24 e dsPIC33 è relativamente limitata, si va da 1000 a 10000, come valore minimi, a seconda del modello.
L'emulazione EEPROM per salvaguardare l'endurance permette di utilizzare un .tot di flash divisa in blocchi su cui scrive ciclicamente in modo da non scrivere sempre sulla stessa cella/blocco, se è necessario scrivere spesso dei valori in EEPROM è meglio appoggiarsi ad una memoria esterna.
Dopo tanto tempo ho messo in funzione questa benedetta emulazione.
Ho scompattato la cartella compressa che si scarica dal sito Microchip, due file li ho aggiunti nella cartelletta Source del progetto ed uno lo ho copiato sotto la cartella Support del compilatore C30.
MPLAB 8.6 non mi ha facilitato perchè non trova i file nella cartella compressa, bisogna spostarli altrove.
Riporto il codice di prova se mai potesse interessare qualcuno. Gira sulla MUIN 990012 dove però ho messo il dsPic33 tipo MC e non GP. Il compilato è abbastanza grosso, si vede dal tempo che ci mette a scriverlo sulla flash:
codice:
#include "p33FJ128MC802.h"       //7,37*M/N1N2=79Mhz~40MIPS M=43,N1=2,N2=2
#include "DEE Emulation 16-bit.h"//include simulazione Eprom
_FOSCSEL (FNOSC_FRCPLL & IESO_ON)//Oscillatore FastRC 7,37 MHZ with PLL 
unsigned int cm;                 //contatore millisecondi
unsigned int addr=2, data;       //indirizzo e dato per simulazione Eprom

int main (void) {            //Configurazione MCU:
DataEEInit();                //inizializzazione simulazione Eprom  
dataEEFlags.val = 0;         //inizializzazione simulazione Eprom  

PLLFBDbits.PLLDIV=41;        //M=41+2 Oscillatore FastRC with PLL
CLKDIVbits.PLLPOST=0;        //N1=2 (N2=2,default)
while(OSCCONbits.LOCK!=1) {};// Wait for PLL to lock
PR1 = 40000;                 //periodo TIMER1 40000/40Mhz 1 millisecondo
TRISBbits.TRISB4 = 0;        //RB4 pin11 out led verde  
TRISAbits.TRISA4 = 0;        //RA4 pin12 out led rosso  
IEC0bits.T1IE = 1;           //abilitazione interrupt TIMER1
T1CONbits.TON = 1;           //TIMER1 ON

cm=0; while (cm < 2000);     //aspetta 2 secondi 
_LATA4=1;                    //accende led rosso  

if (DataEERead (addr) == 0)  //se led verde risulta spento in Eprom 
_LATB4=0;                    //allora lo spegne realmente  
else _LATB4=1;               //altrimenti lo accende

ciclo:
cm=0; while (cm < 2000);     //ogni 2 secondi
_LATB4 ^= 1;                 //cambia stato led verde 
DataEEWrite (_LATB4, addr);  //e lo  memorizza in Eprom
goto ciclo; }

void __attribute__((no_auto_psv)) _ISR _T1Interrupt(void)//ogni msec TIMER1
{ if (cm < 65535) cm++;                                  //conta
IFS0bits.T1IF = 0; }                                     //uscita ISR
Rispondi quotando
  #105  
Vecchio 12-27-2014, 05:10 PM
L'avatar di Emanuele Terrasi
Emanuele Terrasi Emanuele Terrasi non è collegato
Roboter Graduato
 
Registrato dal: Dec 2009
residenza: Palermo
Messaggi: 492
Blog Entries: 15
predefinito

Quote:
Originariamente inviata da astrobeed Visualizza il messaggio
33FJ128MC802 (MC = Motor Controller)
Il primo modulo PWM ha sei uscite con tre duty cycle indipendenti ma non trovo la maniera per impostare tre uscite sfasate di 120 gradi. Possibile che alla fine bisogni farlo per forza in sw?

Ultima modifica di Emanuele Terrasi; 12-30-2014 a 07:24 AM
Rispondi quotando
  #106  
Vecchio 05-16-2015, 07:29 AM
L'avatar di Emanuele Terrasi
Emanuele Terrasi Emanuele Terrasi non è collegato
Roboter Graduato
 
Registrato dal: Dec 2009
residenza: Palermo
Messaggi: 492
Blog Entries: 15
predefinito

Quote:
Originariamente inviata da astrobeed Visualizza il messaggio
Per caricare in tempo utile il sampler (capacità di 4.4pf) serve corrente e da questo la necessità di una sorgente in grado di fornire almeno 18 mA di picco.
Aumentando il numero di clock che determina la durata del sample, possiamo usare una sorgente con impedenza più alta senza introdurre errori?
E se usiamo un solo ingresso analogico senza scandirne altri?
Rispondi quotando
  #107  
Vecchio 09-12-2017, 09:56 AM
L'avatar di Emanuele Terrasi
Emanuele Terrasi Emanuele Terrasi non è collegato
Roboter Graduato
 
Registrato dal: Dec 2009
residenza: Palermo
Messaggi: 492
Blog Entries: 15
predefinito

Ancora un mio quesito su questo interminabile thread..
Questa volta l'esigenza è quella di usare 1 solo canale ADC con scansione automatica di 3 analog input.
Debbo per forza usare il DMA, altrimenti i valori convertiti relativi ai 3 input andrebbero a sovrascriversi sullo stesso registro ADC1BUF0.
Ho cercato di guardare il datasheet, i reference manual e alcuni esempi, poi ho cercato di realizzare qualcosa nel modo più semplice, con un buffer DMA di sole 3 word dedicate rispettivamente ai 3 input.
Nel mio caso non è che debbo archiviare le letture, mi basta avere sempre nel buffer i valori aggiornati a disposizione del Main.
Purtroppo non sono ancora riuscito. Tutti gli esempi usano una istruzione del tipo:
ProcessADCSamples(BufferA);
nella ISR del DMA, ma che roba è, si tratta di una funzione di libreria? Il compilatore di MPLABX, XC16, non la riconosce.
Ma 'sto benedetto buffer, dichiarato con l'attributo space dma, alla fine non è un normale vettore? Non possiamo accedervi normalmente?
(NOTA: senza il DMA invece funziona tutto, però non posso sfruttare la scansione automatica)
Rispondi quotando
Rispondi

Segnalibri

Strumenti della discussione
Modalità di visualizzazione

Regole d'invio
Non puoi inserire discussioni
Non puoi inserire repliche
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è attivo
Le smilie sono attive
Il codice IMG è attivo
il codice HTML è disattivato

Salto del forum


Tutti gli orari sono GMT. Attualmente sono le 09:32 PM.


Powered by vBulletin versione 3.8.7
Copyright ©: 2000 - 2017, Jelsoft Enterprises Ltd.