Newsgroup: it.hobby.elettronica.digitale
Titolo: Problemone PIC16F876

Ciao a tutti!
a lavorare devo fare una scheda in cui devo gestire un bus SPI in 
hardware, 4 convertitori A/D, un uscita PWM, la eeprom interna e un bus 
I2C con 5 D/A sopra.
Mi sono guardato in giro e ho scelto il pic nel subj, perche', a parte 
il bus I2C che farei via software (si, lo so che avrebbe anche questo, 
ma questo bus e' alternativo all'SPI, e per me e' fondamentale gestire 
in hardware l'SPI), ha tutto il resto. E gli AVR come sono messi? Gli ho
dato un'occhiata veloce, ma mi pareva che non gestissero il bus SPI in 
hardware, giusto?
Ho provato a cipollare un po' con i suoi aggeggi interni (SPI e EEPROM, 
per ora), poi ho cominciato a riflettere su un problema.
Mettiamo che debba assolutamente gestire piu' sorgenti di interrupt, e 
non possa permettermi di trascurarli... in parole semplici non posso 
chiamare una ruotine che deve partire quando ho un particolare irq, 
all'interno della ruotine di servizio dell'interruzione, perche' senno' 
non servirei altri irq fino a quando tale ruotine non ha terminato...
Come fare?
Grazie a tutti!
---
                              /"\              
  _/                          \ /
 _/   _/_/ _/_/ _/_/           X  ASCII RIBBON CAMPAIGN      
_/_/ _/_/ _/   _/_/           / \ AGAINST HTML MAIL
Lorenzo Raschi
Togliere #NOSPAM# dall'indirizzo email per rispondermi
ICQ #48357220
Per favore non utilizzate ne' tag html ne' accentate. Grazie.


Premetto che non ci ho mai provato, ma se tu riabiliti le interruzioni
all'interno della ruotine di interrupt puoi gestire piu' interrupt
contemporaneamente.
Occorre pero' gestire via software tutto il discorso della priorita'.
In effetti se all'interno della subruotine di interrupt esegui:
bsf INTCON,GIE
il PIC e' pronto a ricevere un altro interrupt mentre sta servendo la
ruotine del primo interrupt (primo in senso temporale). A questo punto lo
stack sale a due livelli e viene eseguito il codice da h'0004' di nuovo.
E' evidente che prima di riabilitare le interruzioni occorre aver resettato
il flag del primo interrupt altrimenti si innesca un loop ricorsivo.
Quando la ruotine del secondo interrupt viene ultimata il programma riprende
dalla ruotine del primo interrupt e lo stack scende a 1. Le interruzioni
continuano ad essere abilitate GIE=1
E' ovvio che cosi' facendo le interruzioni sono abilitate durante la
gestione dell'interrupt e quindi occorre gestire con la massima cura gli
interrupt per evitare loop ricorsivi e il riempimento dello stack.
Se ci provi, ti prego di tenermi aggiornato, anche in e-mail, sui risultati.
--
Ciao Andrea
Togliere SENZA per rispondere in e-mail
http://digilander.iol.it/barbadoro/

 I2C con 5 D/A sopra.
...
SPI??!!?....   hai per caso una routine scritta in C che "simuli" via SW una
porta SPI? per un pic 16f84?
Ciao e grazie
--
----------------------------------------------------------------------------
-------------------------
   Alberto Gorni - 
san...@libero.it
  -  
san...@mail.omnitel.it
 -
0347/5147196
   Via Emilio Da Pozzo 39/15 - 16133 - Genova (GE) - Italy
----------------------------------------------------------------------------
-------------------------

 ruotine del primo interrupt (primo in senso temporale). A questo punto lo
Ci avevo pensato anch'io, ma si rischia di avere un overflow dello 
stack, quindi questo sistema lo scarterei.
Ho scaricato l'application note AN585, relativo a un sistema operativo 
real time multi tasking preemptive, ma analizzandolo non mi pare proprio
che lo sia. Se vuoi scaricatelo cosi' possiamo discuterne!
Grazie per i consigli!


 che lo sia. Se vuoi scaricatelo cosi' possiamo discuterne!
Suppongo dalla Microchip
--
Ciao Andrea
SENZAQUESTO per rispondere in e-mail
Web: 
http://digilander.iol.it/barbadoro

 porta SPI? per un pic 16f84?
Guarda... il PIC16F876 (slave) deve colloquiare in SPI con uno strongarm
(master), ma visto che mi era scomodo alzare sempre il culo dalla sedia 
per andare nell'altro banco con montato lo strongarm per testare il 
funzionamento ho scritto una ruotine idiota per 16F84 per simulare il 
master.
Se vuoi te la passo, ma ti avviso e' scritta in maniera bovina, tipo 
"abbassa SS", "alza CLK", "aspetta"... insomma e' tutto un "bsf porta" e
un "bcf porta"...
A scriverla di sana pianta ci vuole mezz'ora... vedi tu...
BYE!


 Suppongo dalla Microchip
Certo!
Grazie ancora!


Grazie
Grazie a te che mi procuri cibo per il cervello :-)


 BYE!
Grazie e ciao

 p.s. ma č scritta in asm o in C??
E' in assembler... ce l'ho a lavorare, ma se aspetti qualche giorno la 
migliorero'.


 migliorero'.
mhm... ok ok... aspetto...   CMQ sarà difficile portarla in C secondo te?...


 mhm... ok ok... aspetto...   CMQ sarà difficile portarla in C secondo te?...
Scusami, ma non capisco quale ispirazione pensi di trovare nella mia 
ruotine...
Ti ripeto, e' una sequenza bovina di bsf e bcf scritta in dieci 
minuti... e dovrei scriverla in C?


Grazie a te che mi procuri cibo per il cervello :-)
Se per quello qui ne ho taaaaanto da mangiare!!! :-)))
Visto che ti vedo ferrato, mi sai dire con certezza se gli atmel AVR 
hanno la porta SPI o Microwire o I2C? Li conosci?
BYEEE!



Tutte le mattine corro per arrivare in orario in ufficio mentre il mio
direttore se la prende con comodo. Il concetto e' questo: se il tuo uP e'
slave SPI allora hai la necessita' di avere una SPI hardware perche' devi
"correre" dietro il clock del master, ma se, come accade sovente, il tuo uP
e' master, il clock lo genera lui e non deve correre dietro a nessuno.
Con questo voglio dire che, se l'applicazione che stai studiando prevedere
solo periferiche slave, allora tutte le interfaccie che hai nominato si
possono simulare via software con estrema semplicita' se viceversa qualche
periferica e' master (esempio comunicazione con il PC) allora per
semplificarti la vita ti puo' essere utile una periferica hardware.
Scrivere una ruotine per la SPI in software non richiede piu' di 15 minuti e
una decina di istruzioni assembler!!!
Comunque l'AT90S8515/8535 e suoi fratelli minori hanno la SPI hardware ma
non l'I2C hardware. Il PIC16F877 ha entrambe le periferiche hardware:
http://www.atmel.com/atmel/products/prod199.htm
--
Andrea
web: 
http://digilander.iol.it/barbadoro

 solo periferiche slave, allora tutte le interfaccie che hai nominato si
No, il master e' uno strongarm... io sono uno schiavetto!!! :-)
Grazie 1000!



Allora o hardware o interrupt agganciato al clock SPI.
Una curiosita': ma che diavolo e' uno "strongarm" (scusa l'ignoranza)?


 Una curiosita': ma che diavolo e' uno "strongarm" (scusa l'ignoranza)?
Un processore risc della digital, ora di intel... su 
www.intel.com
 lo 
trovi, ma non pensare di farci applicazioni amatoriali! E come pensare 
di usare un pentium 200... :-) 
E' molto usato nei palmari in quanto ha un controller lcd a colori 
integrato.
BYE!
