Newsgroup: it.hobby.elettronica.digitale
Titolo: Programma complesso per PIC

Ho iniziato a programmare i pic con il MikroPascal, ma come spesso capita in 
questi casi gli esempi che accompagnano compilatorii e tools vari sono 
troppo banali, in quanto eseguono solo un compito e stop.
La domanda č la seguente: come si possono gestire piů operazioni in maniera 
contemporanea o quasi?
Per essere piů preciso: poniamo di avere un 16F877A e con questo tramite un 
pwm gestire un alimentatore switching, al contempo una porta collegata ad un 
foto accoppiatore e monitorare anche la decodifica di toni DTMF ottenuta 
esternamente con MT8870 o simile e per finire inviare queste cifre via 
seriale ad un modulo gsm.
Ovviamente non pretendo tutto il codice ma solo dei chiarimenti per questa 
specie di MultiTread, e so anche che non č una domanda facile ma il NG č 
pieno di volenterosi.
Grazie a tutti
Carlo 

 seriale ad un modulo gsm.
Nel loop principale del programma oltre al refresh del watchdog del micro
fai una serie di chiamate a funzioni ognuna delle quali è adibita alla
gestione di una delle periferiche che hai elencato. Puoi anche avere più di
una funzione per una periferica (es. gestione ricezione seriale modulo GSM e
gestione trasmissione seriale modulo GSM). Potresti fare un modulo diverso
per ogni periferica dove metti la funzione di gestione (quella da chiamare
dal loop principale) e altre eventuali funzioni abbastanza elementari
(chiamate dalla funzione di gestione).
Le funzioni di gestione di una periferica terminano subito la loro
esecuzione se non hanno niente da fare (eventi da processare, ...), se
invece devono fare qualcosa o processare qualcosa, eseguono le azioni
richieste, ma anche qui devono terminare abbastanza velocemente. Ogni
funzione se necessario potrebbe avere una piccola macchina a stati interna
che serve a conservare il proprio stato interno tra una chiamata e la
successiva.
Verifica il tempo che impiega il loop per fare un ciclo completo, valutando
il tempo medio e il tempo nei casi peggiori (quando tutte o quasi tutte le
funzioni hanno qualcosa da fare, se questa è una eventualità che può
verificarsi).
Dove possibile utilizza gli interrupt (es. per la porta seriale per la
ricezione e la trasmissione dei caratteri da e verso il modulo GSM). In fase
di inizializzazione configura eventualmente il modulo GSM per usare una
bassa velocità seriale per la comunicazione (comando AT+IPR=..., se il
modulo GSM ha l'autobauding non serve) in modo da avere più tempo tra un
carattere e l'altro.
Presta particolare cura agli interrupt e alle funzioni che processano eventi
che hanno un'alta frequenza di accadimento (è dove hai meno tempo a
disposizione).
La parte più complicata penso sia la gestione del modulo GSM (costruzione
comandi AT, decodifica delle relative risposte, macchina a stati che
conserva lo stato del telefono ed esegue le varie azioni sul telefono, ...).
Non ho capito da dove arrivano i toni DTMF (da una connnessione fonia GSM
attiva?) e perchè li devi inviare al modulo GSM. Penso che ci sarà in
qualche momento una connessione fonia GSM attiva. In che situazioni? Chi è
che chiama? Usi solo la fonia o anche la connessione dati e/o gli SMS?

 pieno di volenterosi.
Non conosco gli strumenti che mettte a disposizione il tuo compilatore.
Ci sono anche alcuni progetti rtos sia commerciali che di pubblico dominio 
gnu o altri, ma io preferisco sempre fare le cose a manina, specialmente con 
dispositivi avari di ram e di stack.
Cmq quando c'è necessità di multitasking, come sempre può essere di tipo 
preemptive o cooperativo.
Nel primo caso imposti un timer che genera interrupt ad intervalli regolari.
Devi crearti alcune variabili di tipo globale che andrai di volta in volta a 
modificare per gestire i vari task.
Devi anche crearti degli spazi di memoria all'interno dei quali andrai a 
salvare lo stato delle variabili ogni volta che uscirai da un task.
Nel caso di multitasking cooperativo, invece in genere si costruisce una 
state machine, che se strutturata correttamente, consente di avere tempi di 
ciclo principale nettamente inferiori (consntendo ad es. l'utilizzo di porte 
uart 'emulate' via software).
In questo caso ogni processo deve essere scomposto in più 'stati', ad ognuno 
dei quali corrisponderà una azione (che dovrà essere ovviamente non di tipo 
bloccante (ad. es. un ciclo di ritardo di 2 secondi dovrà essere basato su 
un timer hardware o software, ma non basato su una unica istruzione di 
ritardo).
Il ciclo principale si occuperà di eseguire in sequenza le chiamate ai vari 
processi.
Quale situazione adottare dipende purtroppo esclusivamente dalle esigenze 
prestazionali della tua applicazione, perciò penso sia difficile fornirti 
uno scheletro applicativo senza conoscere i dettagli dei quali sei a 
conoscenza solo tu.
Ciao, Roberto 

 ha scritto nel messaggio 
news:n0E%g.16017$uv5.1...@twister1.libero.it...


 qualcuno ne possiede già uno non lo può utilizzare!!!!!
Per i moduli GSM se ha domande, fai pure. Li uso in una serie di progetti da
7-8 anni, quindi direi che sono abbastanza esperto in materia.
Che modulo GSM usi? Siemens, Wavecom, Erickson,...?
Non so cosa intendi con "configurazione segreta", ma mi sento di dire che
non c'è niente di tutto questo.
I moduli GSM vengono controllati e comandati attraverso un set di comandi AT
"esteso" (è uno standard), che comprende tutti i comandi AT classici dei
vecchi modem a cui sono stati aggiunti dei nuovi comandi AT che iniziano con
AT+C...
Se vuoi ti posso inviare via mail un po' di documentazione sui moduli GSM.

 Che modulo GSM usi? Siemens, Wavecom, Erickson,...?
Ciao Marco
Senti mi/ci dici un modulo GSM che secondo te non ha problemi come i Telit?
Uno esente da bug, o cmq risolvibili.
Noi abbiamo un sacco di problemi con il TGS842 e company.
Dammi un pò di info se ti va.
:)
Ti ringrazio!
coals

 Dammi un pň di info se ti va.
Per che tipo di applicazione lo usi?
Cosa usi? Fonia? Dati? SMS? GPRS?
I bug di cui parli sono relativi principalmente all'interfaccia dei comandi
AT? Ci sono anche problematiche HW? Che tipo di problemi sono?
Agli inizi avevo avuto modo di usare un Telital e c'erano parecchi problemi.
Ma si era proprio agli inizi dei moduli GSM ad uso industriale.

 Ma si era proprio agli inizi dei moduli GSM ad uso industriale.
Dunque li usa un collega per SMS/GPS e invio dati (Gps perchè un modulo 
adesso è disponibile con questa funzione).
Non rispondono a volte, se stanno compiendo qualche operazione si scordano 
di "ascoltare" quando chiamati, delle volte a seconda che gli fai fare si 
dimenticano proprio di rimanere agganciati alla rete e perdono il campo e 
altre cosucce poco simpatiche che rendono di fatto inutilizzabile 
l'apparecchio.
Ripeto, secondo te quali sono validi?
grazie!
coals 

 Ripeto, secondo te quali sono validi?
Io ho usato in passato Siemens e ora Wavecom.
Per Siemens ho usato i modelli M20 (monobanda), TC35 (dualband), MC35
(dualband, GPRS).
Per Wavecom il modello Q2406 (dual band, GPRS, con o senza stack TCP/IP
integrato).
Sono tutti prodotti diciamo stabili, nel senso che hanno funzionato sempre
bene. Qualche piccolo problema l'ho possono avere, ma si tratta solo di
qualche comportamento non del tutto corretto a livello di interfaccia AT, ma
parlo di piccole cose, controllabili tranquillamente via SW e che capitano
in situazioni molto particolari. Non hanno mai dato problemi di non
agganciarsi alla rete, di non ascoltare le chiamate o cose del genere.
Quindi direi che Siemens e Wavecom sono dei prodotti affidabili. Con Wavecom
c'è anche un buon supporto tecnico. Forse il Telit costa qualcosa di meno.
Non sono aggiornatissimo sugli ultimi prodotti usciti, ma so che ci sono
anche modelli GSM+GPS. Non so dirti nulla sull'affidabilità di un prodotto
di questo tipo perchè non ne ho mai usati. Ho usato anche GPS, ma come
moduli a sè.
Se dovete fare la scelta di un nuovo telefono, sarebbe meglio cercare di
fare una scelta orientata anche al futuro, ossia che nei prodotti futuri che
farete si continui ad usare sempre telefoni dello stesso costruttore in modo
da riciclare il più possibile l'HW progettato. Per il SW è meno
problematico, ma anche qui comunque se si mantiene una continuità di
costruttore è meglio. Poi ovviamente va valutato anche l'aspetto economico.
La cosa migliore da fare è richiedere un incontro con un fornitore che
distribuisce il telefono, farsi presentare il prodotto e chiedere un modulo
"terminal" (da collegare al PC) per provare ad usarlo in modo da farne una
valutazione (soprattutto se ha anche il GPS integrato).

 ha scritto nel messaggio 
news:KJZ%g.17410$uv5.1...@twister1.libero.it...


 Cosa ne pensi dei Wavecom?
Leggi la risposta che ho detto a chi si lamentava del Telit.

 maniera contemporanea o quasi?
Roberto ha già messo le carte in tavola. Comunque, una lettura a questo farà 
sicuramente comodo:
http://www.microchipc.com/Hi-Tech_C_multitask.htm
-- 
simone.bern
Mr. Heisemberg is not the only one who can affect a measurement by looking 
at it (Robert A. Pease)
zsimone...@zliberoz.it
 (Rimuovere i caratteri di zorro per rispondere 
via mail)