Vai Indietro   PcTuner Forum > Sezione Hardware > Programmazione PIC
PcTuner Overclock
Arcade Registrazione Blogs Regolamento Feedback FAQ Lista Utenti Calendario Segna come Letti

Ultimi 5 blog pubblicati su PcTuner Blog
Data Titolo

Rispondi
 
Strumenti Discussione Modalità Visualizzazione
Vecchio 15-11-2009, 17.40.18   #1
angelole
 

Iscritto da: 12-04-2007
Locazione: Agrigento
Messaggi: 164
Feedback: (0)
16f876 e TC35 (codice Mikrobasic)

Dovrei realizzare un circuito con un pic 16f876 da connettere ad un modulo gsm TC35, via RS232. Il codice del pic lo vorrei realizzare in mikrobasic.
Uno dei problemi che mi pongo è questo.

All'arrivo di una chiamata telefonica il modulo gsm invia, per ogni squillo, le seguenti informazioni:

RING

+CLIP: "+393478798XXX",145,,,,0


Arrivati tali dati alfanumerici, dovrei immediatamente estrapolare dagli stessi il numero telefonico compreso tra virgolette, per collocarlo in una apposita variabile.

Non mi è chiaro come procedere. Mi potete fornire aiuti in tal senso.

grazie
angelole Non in Linea   Rispondi Citando

Advertising
Vecchio 15-11-2009, 19.14.02   #2
Registered User
 
L'avatar di  Carlitost
 

Iscritto da: 06-12-2006
Locazione: Napoli
Messaggi: 82
Feedback: (0)
Quote:
Originariamente inviato da angelole Visualizza Messaggio

All'arrivo di una chiamata telefonica il modulo gsm invia, per ogni squillo, le seguenti informazioni:

RING

+CLIP: "+393478798XXX",145,,,,0
Ciao, ho anche io un siemensTC35 ma all'arrivo di una chiamata, sulla seriale non arriva ne il ring ne il numero del chiamante... si deve configurare in qualche modo particolare ?

grazie.
Carlitost Non in Linea   Rispondi Citando
Vecchio 15-11-2009, 19.49.43   #3
angelole
 

Iscritto da: 12-04-2007
Locazione: Agrigento
Messaggi: 164
Feedback: (0)
Mah, all'arrivo di una chiamata dovresti comunque vedere qualche cosa.
Per vedere, oltre al RING, anche il numero devi inviare il seguente comando:

AT+CLIP=1
angelole Non in Linea   Rispondi Citando
Vecchio 16-11-2009, 08.08.55   #4
Registered User
 
L'avatar di  Carlitost
 

Iscritto da: 06-12-2006
Locazione: Napoli
Messaggi: 82
Feedback: (0)
ci provo .. hai un manuale x questo t35?


ho provato ma nulla.. ne ring ne numero ...

Ultima Modifica di Carlitost : 16-11-2009 08.21.02.
Carlitost Non in Linea   Rispondi Citando
Vecchio 16-11-2009, 12.06.09   #5
Registered User
 

Iscritto da: 10-12-2005
Messaggi: 33
Feedback: (0)
comandi AT

ecco qui il manuale dei comandi AT del tc35 RapidShare: 1-CLICK Web hosting - Easy Filehosting
zenite Non in Linea   Rispondi Citando
Vecchio 17-11-2009, 12.14.06   #6
angelole
 

Iscritto da: 12-04-2007
Locazione: Agrigento
Messaggi: 164
Feedback: (0)
il mio problema rimane, nessuno riesce a darmi utili consigli?
angelole Non in Linea   Rispondi Citando
Vecchio 18-11-2009, 08.50.40   #7
Mod insubrico
 
L'avatar di  RockRibelle
 

Iscritto da: 07-01-2009
Locazione: Lugano
Messaggi: 902
Feedback: (0)
Premesso che non conosco il mikrobasic e mai vorrò cimentarmici, trovo la tua domanda una questione di programmazione e basta, in particolare la manipolazione di stringhe. Credo che qualsiasi tutorial di basic e di mikrobasic ti darà la risposta che cerchi.. Per esempio, sai che la tua stringa comincia per CLIP: " , tutto quello che segue fino alle prossime virgolette é il numero che ti interessa, di più non so che dirti..
__________________
..Indomabile..
RockRibelle Non in Linea   Rispondi Citando
Vecchio 18-11-2009, 09.19.56   #8
Tuned Moderator
 
L'avatar di  naimah
 

Iscritto da: 21-08-2006
Locazione: Pistoia
Messaggi: 1,771
Feedback: (1)
Come dice Rock, il tuo problema è di banale programmazione... Devi realizzare un bufferino software di dimensione opportuna, all'interno del quale salvare le stringhe ricevute per poi analizzarle. Le risposte ai comandi AT hanno un formato classico, del tipo +<comando> = <param1>,<param2>,...,<paramn>, si tratta solo di "intercettare" determinati caratteri di separazione (la virgola, ad esempio). Io ho realizzato la stessa cosa in PicBasicPro, con 3 istruzioni fai tutto
__________________
naimah Non in Linea   Rispondi Citando
Vecchio 18-11-2009, 10.27.05   #9
angelole
 

Iscritto da: 12-04-2007
Locazione: Agrigento
Messaggi: 164
Feedback: (0)
Grazie ragazzi, di solito scrivo i miei codici in assembly ma questa volta ho necessità di usare il mikrobasic, che non conosco granchè bene.
Tra l'altro è la prima volta che mi trovo a gestire le stringhe.

Vediamo se ho capito almeno il concetto:

in poche parole il buffer mi consente di "conservare" le stringhe ricevute per poi analizzarle, sapendo che, ciò che mi interessa, si trova ad esempio tra due virgole e quindi in una posizione ben precisa. Quindi il buffer devo intenderla come una o meglio più variabili opportunamente dimensionate?


Ho provato a vedere sul libro di Di Maria (programmazione basic per pic) ma non mi pare d'avere trovato nulla di importante!!! dovrei reperire altro materiale, cosa mi suggerite?

Naimah potresti scrivermi il tuo esempio in picbasic?

Anche in trasmissione ritengo di avere gli stessi problemi.
angelole Non in Linea   Rispondi Citando
Vecchio 18-11-2009, 10.54.55   #10
Registered User
 

Iscritto da: 10-12-2005
Messaggi: 33
Feedback: (0)
io con picbasic ho usato questa stringa :

MITT VAR BYTE[20]
HSERIN 5000,NOCELL1,[WAIT ("+CLIP: "),skip 1, str mitt\13 ]

oppure:

HSERIN 5000,NOCELL1,[WAIT ("+CLIP: "),tmp,tmp1,tmp2,tmp3,tmp4,tmp5,tmp6,tmp7,tmp8,tmp9,tmp10,tmp11,tmp12,tmp13 ]

mitt[1]=tmp1
mitt[2]=tmp2
mitt[3]=tmp3
mitt[4]=tmp4
mitt[5]=tmp5
mitt[6]=tmp6
mitt[7]=tmp7
mitt[8]=tmp8
mitt[9]=tmp9
mitt[10]=tmp10
mitt[11]=tmp11
mitt[12]=tmp12
mitt[13]=tmp13
zenite Non in Linea   Rispondi Citando
Vecchio 18-11-2009, 11.31.33   #11
Tuned Moderator
 
L'avatar di  naimah
 

Iscritto da: 21-08-2006
Locazione: Pistoia
Messaggi: 1,771
Feedback: (1)
Dovrebbe essere in una discussione sul forum, tuttavia la sostanza è identica al codice postato da Zenite In effetti, PBP è molto comodo quando si deve lavorare con le stringhe
__________________
naimah Non in Linea   Rispondi Citando
Vecchio 18-11-2009, 16.24.38   #12
angelole
 

Iscritto da: 12-04-2007
Locazione: Agrigento
Messaggi: 164
Feedback: (0)
Ok, sto iniziando a sbatterci su la testa... unico modo per capire qualcosa.
Sto effettuando delle prove in ordine ad alcune discussioni lette su questo forum.
Tramite una funzione interna riesco adesso a filtrare tutto ciò che sta alla destra di un determinato carattere (ad esempio delim = ">"); questo mi permette di effettuare un primo filtro, ecco il codice:


Codice:
program usart_new
dim delim as string[1]
dim data as string[6]
delim = ">"


usart_init(9600)
ADCON0=%00000000
ADCON1=%10000111         'Settaggio digitale - vedi conv ADC
trisa=%000000            'tutti input
porta=0
trisb=%00000001
portb=0
    lcd_init(portb)          'Inizializza Portb
    lcd_cmd(LCD_Clear)       'Cancella display
    lcd_cmd(LCD_CURSOR_OFF)  'Cursore OFF
    
inizio:
WHILE (True)
if usart_data_ready = 1 then
usart_read_text(data, delim)
delay_ms(30)
lcd_out(2,1,data)
end if
wend
end.
Adesso avrei ncessità di andare oltre e cioè trovare un modo di tagliare (filtrare) parte della stringa di sinistra. Mi sono espresso un po male, spero però che il concetto sia comunque chiaro.
angelole Non in Linea   Rispondi Citando
Vecchio 20-11-2009, 18.07.40   #13
angelole
 

Iscritto da: 12-04-2007
Locazione: Agrigento
Messaggi: 164
Feedback: (0)
Mi sono imbattuto in un altro strano problema.

Dovrei inviare , tramite rs232, una stringa seguita da INVIO, quest'ultimo carattere, se non sbaglio, dovrebbe corrispondere a chr(13).
Non capisco perchè, se visualizzo con hyperterminal l'invio di tale stringa seguita da INVIO, il cursore mi torna all'inizio della stringa (riscrivendola) e non a capo!!!

Qualcuno mi può dire dove sbaglio...

grazie
angelole Non in Linea   Rispondi Citando
Vecchio 20-11-2009, 18.34.51   #14
angelole
 

Iscritto da: 12-04-2007
Locazione: Agrigento
Messaggi: 164
Feedback: (0)
Mi rispondo da solo:

CR & LF ovvero:

0x0D & 0x0A
angelole Non in Linea   Rispondi Citando
Vecchio 21-11-2009, 10.58.29   #15
angelole
 

Iscritto da: 12-04-2007
Locazione: Agrigento
Messaggi: 164
Feedback: (0)
Qualcuno mi può indicare il significato di queste istruzioni:

Codice:
main:
while true
if Usart_Data_Ready = 1 then
usart_read_text(data)
.........
........
end if
wend
Codice:
main:
while true
if Usart_Data_Ready = 1 then
usart_read(data)
.........
........
end if
wend
In particolare mi interesserebbe comprendere il significato delle istruzioni usart
angelole Non in Linea   Rispondi Citando
Vecchio 22-11-2009, 22.06.22   #16
angelole
 

Iscritto da: 12-04-2007
Locazione: Agrigento
Messaggi: 164
Feedback: (0)
Allora... sto facendo dei passi avanti..
Ho scritto il seguente codice che funziona in parte.
Purtroppo non riesco a comprendere perchè, durante la ricezione perdo o non visualizzo correttamente dei caratteri, stante che il debugger non mi dà errori?
Chi mi da una mano?



Codice:
program debugger2
dim receive as byte
dim i as byte


main:
    usart_init(9600)
    ADCON0=%00000000
    ADCON1=%10000111         'Settaggio digitale - vedi conv ADC
    trisa=%111111            'tutti ingresso
    porta=0
    trisb=%00000001
    portb=0
    trisc=%110111            'registro tris   0=uscita; 1=ingresso
    portc=0
    lcd_init(portb)          'Inizializza Portb
    lcd_cmd(LCD_Clear)       'Cancella display
    lcd_cmd(LCD_CURSOR_OFF)  'Cursore OFF

inizio:
i=1

while true
if usart_data_ready = 1 then
receive = usart_read
lcd_chr(1,(i),receive)
i = i +1
end if
wend
end.
angelole Non in Linea   Rispondi Citando
Vecchio 24-11-2009, 23.13.37   #17
Registered User
 

Iscritto da: 17-11-2009
Messaggi: 13
Feedback: (0)
Salve, anche io stò cercando di collegare il moduto tc35 con in pic 16f876, utilizzando lo schema di Zenite (modulo tc35 sbloccato), sono riuscito ad avere tutti i comandi AT disponibili, infatti lo stesso funziona benissimo tramite rs232 e max232 collegato al PC, ora perà vorrei fare un software in MikroBasic per il controllo dello stesso modulo, lo stesso può essere collegato direttamente al pic.
Te come l'hai collegato al pic tramite rs232 e max232, oppure direttamente, riesci ad inviare qualche comando al modulo, oppure visualizzare tramite lcd l'uscita del modulo.
Se mi puoi dare dei suggerimenti.
Grazie.
paoloj Non in Linea   Rispondi Citando
Vecchio 25-11-2009, 17.44.16   #18
angelole
 

Iscritto da: 12-04-2007
Locazione: Agrigento
Messaggi: 164
Feedback: (0)
Allora... prima di collegare il pic al modulo, sto cercando di capire il funzionamento della usart del 16f876 tramite un max 232 e un lcd 2x16. Soltanto dopo aver testato correttamente il software mi occuperò della parte hw che, a dire il vero, mi sembra il problema minore...
angelole Non in Linea   Rispondi Citando
Vecchio 25-11-2009, 23.13.36   #19
Registered User
 

Iscritto da: 17-11-2009
Messaggi: 13
Feedback: (0)
Ti invio questo codice in MikroBasic, che tramite la RS232 riceve dati e li visualizza sull'LCD e tramite un pulsante invia un comando tramite la RS232, è stato provato collegando il PIC al PC tramite RS232 utilizzando il MAX232, e tramite poi un terminale seriale funziona benissimo.
Ora al posto del PC si dovrebbe mettere il modulo TC35, ma come collegare questo modulo tramite un ulteriore MAX232, o direttamente a RC6 e RC7?

--inizio codice --

program seriale_Usart
dim i, l, il, i1,m,ln as byte
dim numch, textch, tx as char[16]
dim code as char[7]


sub procedure invio() 'Invia comando AT tramite USART
tx="AT+CREG?"
ln=strlen(tx)
for m = 0 to ln-1
USART_Write(tx[m])
next m
USART_Write(13)
end sub



main:
ADCON1=$86 'Disabilita gli ingressi analogici

TRISC=0
PORTC=0

TRISA=%001111
PORTA=0

Lcd_Init(PORTB) 'Display LCD sulla porta B
Lcd_Cmd(Lcd_CURSOR_OFF)

USART_init(9600) 'Inizializza l'USART a 9600

i1=0

while TRUE
' Lettura da RS232
if (USART_Data_Ready()) then
il = USART_Read()
if il<>13 then 'riempe la stringa textch fino al carattere CR (13)
textch[i1]=il
i1=i1+1
end if

end if
if (il=13) then 'terminata la ricezione ovvere fino al carattere CR visualizza sull'LCD la stringa ricevuta
Lcd_Cmd(LCD_CLEAR)
for l = 1 to i1
lcd_chr(2,l,textch[l-1])
next l
il=""
textch=""
i1=0
end if

if porta.0=1 then 'Pulsante sulla portA 0
portc.1=1 'Accende led sulla portC 1
invio() 'Richiama la procedura invia() dichiarata all'inizio
while porta.0=1 ' antirepeat
wend
end if
wend

end.
paoloj Non in Linea   Rispondi Citando
Vecchio 26-11-2009, 00.03.44   #20
Registered User
 

Iscritto da: 10-12-2005
Messaggi: 33
Feedback: (0)
paolo ti ripeto che a me funziona benissimo collegato direttamente alle porte del pic,perchè in ingresso il pic legge dai 2.0V in su,quindi in riccezione non ci sono problemi, e nemmeno in trasmissione perchè come ti ho detto quel modulo ha un integrato (74lvh244)che si occupa di portare i 5V del pic a 3V.Altrimenti per stare proprio sicuro usa il max che gia hai per fare la comunicazione.
zenite Non in Linea   Rispondi Citando
Rispondi Per le vostre immagini su questo forum potete usare PcTunerUp!
Iscriviti gratuitamente alla nostra newsletter.


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 visitatori)
 
Strumenti Discussione
Modalità Visualizzazione

Regole di scrittura
non Puoi inserire messaggi
non Puoi rispondere ai messaggi
non Puoi inviare allegati
non Puoi modificare i tuoi messaggi

codice vB è Attivo
Smilies è Attivo
[IMG] il codice è Attivo
Il codice HTML è Disattivato
Trackbacks are Disattivato
Pingbacks are Disattivato
Refbacks are Disattivato
Vai al Forum


Tutti gli Orari sono GMT +1. Attualmente sono le 03.59.04.


Powered by vBulletin Versione 3.6.12
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0
Copyright © 2009 - Master New Media S.r.l. a socio unico - P.I. 02947530784. Tutti i diritti di proprietà letteraria e artistica sono riservati- Privacy
www.pctuner.net è testata telematica registrata presso il Tribunale di Torino, n. 39 del 07.05.2008, Editore Master New Media S.r.l.