Citazione:
Originalmente inviato da FaPIC Gia'...hai capito quello che voglio fare.
Leggendo in rete, ho visto che non e' possibile connettere direttamente il piedino Rx della porta seriale al pic, visto che uno e' un segnale +-13V, mentre l'altro e' un segnale TTL. Per risolvere il problema, devo utilizzare un convertitore...in rete ho letto del MAX232, confermi?
A questo punto, cercando di pensare a una prematura lista della spesa, mi dovrei procurare: 1 MAX232 per ogni entrata, 1 pic 16F628 e 1MAX232 per l'uscita elaborata. corretto?
Per quanto riguarda invece la programmazione del 16F628, devo necessariamente comprarmi un programmatore, o e' comuqnue effettuabile utilizzando una particolare entrata del 16F628, magari settando qualcosa di particolare? Nel qual caso, potrei pensare a una ulteriore porta rs232 utile solo a provvedere alla programmazione del PIC.
Altra domanda...e' molto probabile che abbia necessita' di conservare in memoria i dati letti da una periferica, in attesa che i dati delle altre periferiche arrivino. Essendo dati NMEA, in formato ASCII, potrei ritrovarmi ad avere problemi nella gestione della memoria?
Grazie ancora. |
Il max232 ha internamente 2 porte TX in ingresso e 2 RX in uscita,
per il tuo scopo,essendo le 5 porte che devi configurare 3 in ingresso e 2 in uscita puoi usare un max232 ed un piccolo convertitore per la terza
in ingresso composta da un transistor,un diodo ed alcune resistenze.
Con questo sistema inverti anche il segnale,quelli del MAX gli trovi già invertiti.
Per quanto riguarda la possibilità di usare un serie 16 anche piccolo
non vedo il problema. Io,se lo ho proposto vuol dire che lo sò che si può fare.
(lo ho già fatto per altri scopi)
Ovvio che non prendendo gli esempi in rete,fatti per gestirne una ma creandosi il software di sana pianta. Credo che voi vi riferiate ad esempi
usanti routine che aspettano di leggere tutto il Byte ma
non è l'unico modo per leggere dei dati seriali.
Certo se parlate di comunicare a 115KBaud è un'altro discorso
ma in Assembler non c'è alcun problema per leggere 3 porte e scriverne 2 contemporaneamente,certo la limitazione non è nel Pic ma nel programmatore.
(senza offesa per nessuno)
un segnale RS232,come detto prima esempio a 4800 Baud propone
un cambiamento di stato ogni 208uS che sono 208 istruzioni
(da 1 ciclo) a 4Mhz
e ne bastano una manciata per leggere lo stato di un pin,poi se uno vuole
tenere fermo la MCU aspettando il passaggio di 10 Bit può farlo,
di solito si fà quando si usa una sola seriale ma programmando
a scansione in quel tempo ci stà molto tempo per fare altre cose e
pure per controllare se ci sono altri dati in arrivo sulle altre seriali.
certo bisogna conoscere l'Assembler e saperlo usare bene ed è per
questo che ho proposto una piattaforma multiprocessore programmando in Basic,diventa molto facile anche senza esperienza visto il livello di astrazione.
Però mi è venuto in mente che puoi usare (senza trasferire in I2C)
sempre la seriale creandoti un "tuo" protocollo :
ogni pic piccolo (uno per porta in ingresso per un totale di 3)
legge,aspettando i dati in ingresso l'Rs232 e memorizza in ram
le stringhe (per il GPS bisogna calcolare di avere abbastanza Ram
ma ci sono modelli adatti)
dedichi un pin di questo Pic a ricevere un segnale di richiesta
che gli viene inviato dalla MCU principale.
La MCU principale,quando pronta porta alta l'uscita che và a questo pin
ed aspetta gli venga inviata la stringa poi và a fare lo stesso con le altre 2 MCU e tratta i dati ricevuti,gli invia al pilota automatico e ritorna a leggere.
Le MCU usate come interfaccia controllano
la richiesta della MCU principale dopo aver ricevuto tutta la stringa...
ovvio che deve esserci un tempo massimo per cui se le periferiche non trasmettono la Master passa avanti...
Questo è facilmente implementabile in Basic e ti permette
di trattare il dato sulle mcu secondarie esempio del GPS
ti interessano le coordinate e ci levi tutto il resto...
spero di essemi spiegato,se quello che vuoi è avere velocemente risultati
ti consiglio di andare avanti su questa strada ma le strade possono essere 1000!!!
Se vuoi approfondire l'Assembler...ci vuole il tempo necessario
ed impegno,non fermarti però agli esempi in rete,
saper sfruttare un pezzo di codice già fatto non vuol dire saper programmare!
Ciao!