Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
vili Član

Pridružen-a: Ned 30 Maj 2004 16:37 Prispevkov: 64 Aktiv.: 0.27 Kraj: Ljubljana
|
Objavljeno: Sob Apr 29, 2006 9:50 pm Naslov sporočila: GSM pic mikrokontroler |
|
|
Vem da je bilo o tem že veliko govora a vseeno. S pomočjo pic mikrokontrolerja bi rad pošiljal ter bral sms sporočila z gsm telefona. Za to bi najraje uporabil staro regljo. Če je že kdo kaj delal s tem bi prosil za kakšen nasvet kako začeti, ali pa link do uporabnih strani.
LP |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Sob Apr 29, 2006 9:55 pm Naslov sporočila: |
|
|
Na forumu Sveta Elektronike je bilo pred kratkim precej govora tem, v reviji pa je Vilko tudi napisal nekaj clankov o tej tematiki (sicer za 8051, a koncept je povsem enak, ne glede na izbiro mikrokontrolerja). Uporabi iskanje. |
|
Nazaj na vrh |
|
 |
vili Član

Pridružen-a: Ned 30 Maj 2004 16:37 Prispevkov: 64 Aktiv.: 0.27 Kraj: Ljubljana
|
Objavljeno: Pet Maj 05, 2006 8:17 pm Naslov sporočila: |
|
|
Rad bi samo vzpostavil komunikacijo med picem in ga628. Če pošljem ukaz z računalnika npr AT se le ta odzove in odgovori z OK. Zanima pa me zakaj mi to ne deluje ko pošljem ukaz mikrokontrolerja.
Hitrost komunikacije sem pravilno nastavil, ukaz pa pošljem z:
printf("AT");
LP |
|
Nazaj na vrh |
|
 |
Djurodrljaca Član

Pridružen-a: Pet 19 Dec 2003 16:31 Prispevkov: 393 Aktiv.: 1.66 Kraj: Mengeš
|
Objavljeno: Pet Maj 05, 2006 9:15 pm Naslov sporočila: |
|
|
Treba je še poslati <CR> znak (v C '\r'). To ti vnese v hyperterminalu ko pritisneš enter. |
|
Nazaj na vrh |
|
 |
mujo Član


Pridružen-a: Ned 02 Jan 2005 19:24 Prispevkov: 746 Aktiv.: 3.15 Kraj: MB
|
Objavljeno: Pet Maj 05, 2006 9:58 pm Naslov sporočila: |
|
|
Djurodrljaca je napisal/a: |
Treba je še poslati <CR> znak (v C '\r'). To ti vnese v hyperterminalu ko pritisneš enter. |
Poslati treba \n\r ali samo \r? |
|
Nazaj na vrh |
|
 |
Djurodrljaca Član

Pridružen-a: Pet 19 Dec 2003 16:31 Prispevkov: 393 Aktiv.: 1.66 Kraj: Mengeš
|
Objavljeno: Sob Maj 06, 2006 6:59 am Naslov sporočila: |
|
|
Oblika AT ukaza je: AT.......<CR> ("AT.......\r")
Oblika odgovora pa: <CR><LF>.........<CR><LF> ("\r\n.........\r\n") |
|
Nazaj na vrh |
|
 |
vili Član

Pridružen-a: Ned 30 Maj 2004 16:37 Prispevkov: 64 Aktiv.: 0.27 Kraj: Ljubljana
|
Objavljeno: Sob Maj 06, 2006 12:05 pm Naslov sporočila: |
|
|
Hvala za pomoč.
Sedaj telefon sprejme ukaz in ga izvrši npr. pokliče določeno telefonsko številko. Ne znam pa prebrati podatkov, ki jih pošlje nazaj. Če uporabim rutino getc() se program tu ustavi in čaka kot da telefon ne pošlje nič nazaj. |
|
Nazaj na vrh |
|
 |
Djurodrljaca Član

Pridružen-a: Pet 19 Dec 2003 16:31 Prispevkov: 393 Aktiv.: 1.66 Kraj: Mengeš
|
Objavljeno: Sob Maj 06, 2006 1:02 pm Naslov sporočila: |
|
|
Najprej preveri, če ti RX linija sploh deluje.
V čem pišeš ta program za mikrokontroler?
Če boš priložil tisti del kode, kjer imaš to komunikacijo, mogoče lahko ugotovim kje je problem. |
|
Nazaj na vrh |
|
 |
Highlag Član


Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 17.03 Kraj: Črnuče
|
Objavljeno: Sob Maj 06, 2006 4:29 pm Naslov sporočila: |
|
|
Kaj uporabljaš za pisanje programov v C-ju bi tudi mene zanimalo. _________________ If at first you don't succeed, destroy all evidence that you tried. |
|
Nazaj na vrh |
|
 |
vili Član

Pridružen-a: Ned 30 Maj 2004 16:37 Prispevkov: 64 Aktiv.: 0.27 Kraj: Ljubljana
|
Objavljeno: Sob Maj 06, 2006 6:00 pm Naslov sporočila: |
|
|
Uporabljam CCS pic compiler.
#include <16f873.h>
#fuses XT,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_c6, rcv=PIN_c7)
char podatek[10];
void main()
{
printf("AT\r");
podatek[0]=getc();
puts(podatek);
}
Problem je v tem ker mikrokontroler ne sprejme nobenega podatka od telefona in se obesi pri ukazu getc(). Če mu preko terminala na računalniku pošljem nek znak pa ga sprejme in z ukazom puts(podatek) prikaže.
Če je telefon priključen na računalnik stvar deluje tako da je z RX verjetno vse vredu.
LP |
|
Nazaj na vrh |
|
 |
Djurodrljaca Član

Pridružen-a: Pet 19 Dec 2003 16:31 Prispevkov: 393 Aktiv.: 1.66 Kraj: Mengeš
|
Objavljeno: Sob Maj 06, 2006 6:18 pm Naslov sporočila: |
|
|
Mogoče bi raje uporabil gets(podatek); namesto podatek[0]=getc();
Drugi problem je pa v tem, da gets() skoraj sigurno ni prirejen za AT ukaze. Problem je v tem, ker ponavadi funkcije za stringe čakajo na zaključni znak '\0' oz vrednost nič. Oblika odgovora pa je "\r\n....\r\n" oz "\r\n....\r\n\r\n....\r\n", če je odgovor v dveh vrsticah.
Pa še nekaj, če prav razumem ta program ti najprej pošlješ AT ukaz, potem prejmeš odgovor in pošlješ odgovor nazaj v mobitel? |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Sob Maj 06, 2006 6:59 pm Naslov sporočila: |
|
|
Kako pa sploh ves, da se je program ustavil ravno tam, kjer ti trdis da se je ustavil ? Kot je napisal Djuro, tako kot je program napisan, izgleda kot da posljes nazaj en znak odgovora v telefon (kar seveda ne naredi nic), nimas pa nacina za preverjanje kako dalec si sploh prisel (npr. eno LEDico, stanje katere bi spremenil po getc() in bi tako vedel ali je program prisel preko getc() ali ne. |
|
Nazaj na vrh |
|
 |
vili Član

Pridružen-a: Ned 30 Maj 2004 16:37 Prispevkov: 64 Aktiv.: 0.27 Kraj: Ljubljana
|
Objavljeno: Sob Maj 06, 2006 7:37 pm Naslov sporočila: |
|
|
Vse je priključeno na telefon in terminal na računalniku. Ko za ukazom getc() pošljem ukaz nazaj to vidim na računalniku, če se seveda program prej ne ustavi. Če iz računalnika pošljem podatek pic le tega prebere in ga pošlje nazaj tako da vem kje se vse skupaj ustavi. Celotna koda ki jo pic pošlje telefonu je vidna tudi na terminalu to deluje ker mi telefon kliče na določeno številko.
Ko se zacikla in čaka na podatke s telefona, program lahko spravim naprej tako da pošljem podatek iz računalnika in pic odgovori. poizkusil sem tudi z odklopom povezave na računalnik vendar še vedno deluje. Z ukazom gets() se mi zgodi enako kot z getc().
LP |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Sob Maj 06, 2006 7:47 pm Naslov sporočila: |
|
|
Če bi pogledal v pomoč, bi lahko prebral, da lahko getc() kličeš šele, ko imaš podatek že v input bufferju. Da to veš, uporabiš ukaz kbhit(), ki ti vrne 1, če te podatki čakajo, in 0, če PIC ni sprejel ničesar. Če uporabljaš softwareski UART, potem moraš kbhit() klicat vsaj nekajkrat na periodo prenosa (npr. pri 9600 baud, moraš klicat kbhit() vsaj nekajkrat na 100 us (mikrosekund). |
|
Nazaj na vrh |
|
 |
vili Član

Pridružen-a: Ned 30 Maj 2004 16:37 Prispevkov: 64 Aktiv.: 0.27 Kraj: Ljubljana
|
Objavljeno: Sob Maj 06, 2006 9:02 pm Naslov sporočila: |
|
|
Kako pa je potem potrebno spisati rutino? Zakaj pa getc() deluje ko pošljem podatek z računalnika?
LP |
|
Nazaj na vrh |
|
 |
|