home | area personale         schemi | tutorial | robotica | pic micro | recensioni         forum | chat irc         faq | contatti         store | Ordina PCB
username
password
cerca

 
FORUM: Pic Micro
Tutto quanto riguarda questi microprocessori... progetti, suggerimenti, aiuti, discussioni...ecc


PORTA analogica in PIC16F873A
     
Autore Messaggio opzioni
agric





postato il:
06.09.2018, alle ore 10:54
ok ti credo davo per scontato nelle operazioni assembler di incremento della variabile long piu lunga.
Chiedo scusa.



meglio essere un granello di pepe che una cacca d'asino
e.ferriani





postato il:
06.09.2018, alle ore 10:55
[quote](picmicro675):
http://www.grix.it/UserFiles/picmicro675/File/TransitFiles/A…
[quote]


I files sono ancora lì? Io non riesco a raggiungerli.



Enea Ferriani
picmicro675




una ogni 10 livelli


postato il:
06.09.2018, alle ore 14:30
C'è una svista nel link che contiene un punto finale. Copia il link e prova oppure prova questo di seguito
http://www.grix.it/UserFiles/picmicro675/File/TransitFiles/A…
I file son lì, ho provato senza il punto finale.
Suggerirei di fare le prove con quello che hai cominciato per i LED. Con lo stesso metodo fai una chiamata ad una funzione.
La funzione dovrebbe tenere conto che ha un determinato periodo. Eventualmente segni un flag quando entra nella funzione, la ISR prende in considerazione il flag della funzione per un periodo massimo, se non viene rimosso nel periodo voluto, deve staccare.
Per forza che nella funzione deve periodicamente verificare se ha ancora tempo.

Di questo metodo, si impara con gli esperimenti a capire cosa avviene e trovare il perché si sta usando un determinato metodo.

Comunque sì, i files sono molto istruttivi per fare detti esperimenti. Come del resto c'era quello della pagina 6 il terzo post, che funziona per un master ed uno slave per lo scambio di 32 bytes. Mentre quest' ultimo ha un metodo ben strutturato con cura che la comunicazione abbia tutti i crismi per evitare errori. Infatti è bene leggere anche tutto il PDF che commenta il lavoro.

Quello che si presenta dell' ultimo è proprio il lavorare con union e struct. Che di fatto sono un modo di gestire dati in maniera meglio organizzata nel quale ogni elemento ha un nome. Comunque non ho molta esperienza e devo anch'io studiarle.



Anno nuovo, forum nuovo.
Mi sa che lascio.
picmicro675




una ogni 10 livelli


postato il:
06.09.2018, alle ore 16:04
A vedere questo listato credo che per incrementare una long ci mette 14 cicli macchina
http://www.grix.it/UserFiles/picmicro675/File/TransitFiles/b…
Però ho dato la medicina al xc8 che me lo fa ottimizzato.
Questo il programma
//-----------------------------------------------
// CONFIGURATION
//-----------------------------------------------
#include <xc.h>

#pragma config FOSC = XT   // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF  // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT enabled)
#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF   // Low-Voltage In-Circuit Serial Programming Enable bit
#pragma config CPD = OFF   // Data EEPROM Memory Code Protection bit
#pragma config WRT = OFF   // Flash Program Memory Write Enable bits
#pragma config CP = OFF    // Flash Program Memory Code Protection bit

#define u32 unsigned long
#define u16 unsigned int
#define u8  unsigned char
u32 milli_time;
u32 led1;
u32 led2;

  void main(void)
  {
    /***********************/
      INTCON = 0x80;
      OPTION_REG  = 0x81;      //

    /***********************/
    while (1)
    {
  //    con prescaler TMR0 = 136 overflow TMR0 ogni 500uS
      if(led1>=258)
      {
        RC6=!RC6;
        led1=0;
      }
      if(led2>=3700)
      {
        RC7=!RC7;
        led2=0;
      }
    }
  }
/**********************/

void __interrupt( ) ISR (void)
{
  if (T0IF)       // L'interrupt e` stato causato da un overflow del timer0 ???
  {
    milli_time++;         // Incremento il Timer per il lampeggio del led
    led1++;
    led2++;
    TMR0 = 136;         // con Prescaler 1:4 => Overflow di TMR0 ogni 500uS
    T0IF=0;             // Resetto il flag interrupt su Timer0
  }
}

Faccio notare che le accentate non devono esistere nei sorgenti e neanche nei nomi dei files. Tanto per semplificare lo scambio.



Anno nuovo, forum nuovo.
Mi sa che lascio.
e.ferriani





postato il:
06.09.2018, alle ore 16:35
La medicina quale sarebbe? Nel codice o una patch per il programma?


Enea Ferriani
agric





postato il:
06.09.2018, alle ore 16:57
Non capisco nell'assembler la voce
-Skipnc -
Se come penso sono circa 14 cicli per una long completa, ma quel Skipnc se non c'è bisogno di incrementare il byte più a sinistra bypassa il resto delle operazioni. Sara così ?

Poi il confronto con il compilatore Free mostra oltre a non essere ottimizzato di non permette l'uso delle long



meglio essere un granello di pepe che una cacca d'asino
agric





postato il:
06.09.2018, alle ore 16:59
e.ferriani:
La medicina quale sarebbe? Nel codice o una patch per il programma?


buona la seconda : -)



meglio essere un granello di pepe che una cacca d'asino
e.ferriani





postato il:
06.09.2018, alle ore 19:25
agric:
e.ferriani:
La medicina quale sarebbe? Nel codice o una patch per il programma?


buona la seconda : -)


E la trovo in farmacia?



Enea Ferriani
picmicro675




una ogni 10 livelli


postato il:
06.09.2018, alle ore 19:45
agric:
Non capisco nell'assembler la voce
-Skipnc -

È un "sinonimo di
btfss 3,0
Oppure
btfss STATUS,C
Vedasi DS33014G-page 185



Anno nuovo, forum nuovo.
Mi sa che lascio.
picmicro675




una ogni 10 livelli


postato il:
07.09.2018, alle ore 09:18
Aggiungiamo una nuova fase all' esercizio.....
Ogni 200 millisecondi il master legge i dati da uno slave. Mettiamo un contatore che ad ogni evento cambia l' indirizzamento di quale slave vuole dialogare. È una frequenza relativamente lenta di servire uno slave ad un secondo, ma si studierà gli effetti più tardi, quando si potrà verificare realmente, quanto tempo di pausa dispone il master. Si può usare un segnale su un piedino e guardarlo all' oscilloscopio/analizzatore logico. Questo messo in una posizione del ciclo principale.

Come semplificazione, aggiungiamo il sorgente di pagina 6 - terzo post.
Al momento i dati trasmessi non hanno importanza, è solo per una fase di studio di utilizzare operazioni a cadenza periodica..
Eventualmente, non penso serva l' implementazione in hardware, potrebbe anche diventare macchinoso.

Mentre gli esempi di AN736, aiutano a gestire meglio l' hardware per la trasmissione I2C. Ma lo escludo dalla prima fase dell' esercizio, perché suppongo non si entra ancora nel problema di avere dei rallentamenti.



Anno nuovo, forum nuovo.
Mi sa che lascio.
segui questo thread con grixFC, per questa funzione devi aver installato il software grixFC

torna su
     

Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito




 







 
 
indietro | homepage | torna su copyright © 2004/2024 GRIX.IT - La community dell'elettronica Amatoriale