www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

PIC --> GSM - C

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
TRIROG
Član
Član



Pridružen-a: Čet 30 Avg 2007 12:23
Prispevkov: 84
Aktiv.: 0.39
Kraj: Ljubljana

PrispevekObjavljeno: Pon Dec 20, 2010 7:29 pm    Naslov sporočila:  PIC --> GSM - C Odgovori s citatom

Koda:
void main(){
     Uart1_Init(9600);
     Delay_ms(1000);
     UART1_Write_Text("AT+CLIP=1\r\n");
     Delay_ms(1000);
     while (1) {

               if (UART1_Data_Ready() == 1) {          // if data is received
                  char* output;
                  UART1_Read_Text(output, "31123123", 25);    // reads text until 'RING' is found
                  UART1_Write_Text("ATH\r\n");             // sends ATH
                  }

              }
}


Tole imam narejeno v MikroC
Ko poklicem iz prave stevilke PIC prekine povezavo.
Težava je v tem, da potem ponavlja ukaz ATH v neskončnost.

Kako naj to preprečim?

Ali je uporaba char* otuput ustrezna?

Pomoč?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.00

PrispevekObjavljeno: Pon Dec 20, 2010 8:39 pm    Naslov sporočila:  Re: PIC --> GSM - C Odgovori s citatom

Koda:
void main(){
     Uart1_Init(9600);
     Delay_ms(1000);
     UART1_Write_Text("AT+CLIP=1\r\n");
     Delay_ms(1000);
     while (1) {

               if (UART1_Data_Ready() == 1) {          // if data is received
                  char* output;
                  UART1_Read_Text(output, "31123123", 25);    // reads text until 'RING' is found
                  UART1_Write_Text("ATH\r\n");             // sends ATH
UART1_Data_Ready() = 0 // IZBRIS ZASTAVICE
                  }
              }
}

Poskusi po uspešni obdelavi zastavice le-to tudi izbrisati, da ne bo ves čas aktivna. To storiš na koncu znotraj if stavka, da je ne bi kje drugje izbrisal in potem sploh ne bi prišel do izpolnjenega pogoja.

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.40

PrispevekObjavljeno: Pon Dec 20, 2010 9:32 pm    Naslov sporočila:   Odgovori s citatom

MikroC sicer ne poznam, vendar bi takole po občutku "output" moral kazat na nek buffer, ki ga v tvojem primeru ni... kam točno se preberejo znaki?
_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
TRIROG
Član
Član



Pridružen-a: Čet 30 Avg 2007 12:23
Prispevkov: 84
Aktiv.: 0.39
Kraj: Ljubljana

PrispevekObjavljeno: Pon Dec 20, 2010 11:18 pm    Naslov sporočila:   Odgovori s citatom

Hoj!
Kar se output bufferja tiče nimam pojma - priznam ... sem popoln začetnik in delam bolj na slepo vse skupaj tole...


Kar se zastavice UART1_Data_Ready() tiče je pa zadeva taka:
ko sem predlagano vrstico umestil v koto sem pri buildanju dobil error
318 Assigning to non-lvalue.


Spet .... popoln začetnik...

Za vsako idejo se zahvaljujem...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.00

PrispevekObjavljeno: Tor Dec 21, 2010 12:25 am    Naslov sporočila:   Odgovori s citatom

(Jaz nimam C-ja, tako da ...) ... prilepi sem definicije teh treh funkcij:
UART1_Data_Ready() // data is received
UART1_Read_Text(output, "31123123", 25); // reads text until 'RING' is found
UART1_Write_Text("ATH\r\n")

Iz njih bo razvidno:
- kdaj prva funkcija vrne vrednost 1 (Arrow in posledično, kako jo spraviti spet na 0)
- kaj se zgodi z drugo funkcijo, ko pokličeš iz prave številke ( Arrow ali se izvede samo enkrat, ali potrebuje "reset" za čakanje na nov klic)
- kaj se zgodi, ko drugič prideš do sem ( UART1_Data_Ready() == 1 očitno ostane izpolnjen)

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
TRIROG
Član
Član



Pridružen-a: Čet 30 Avg 2007 12:23
Prispevkov: 84
Aktiv.: 0.39
Kraj: Ljubljana

PrispevekObjavljeno: Sre Dec 22, 2010 3:39 pm    Naslov sporočila:   Odgovori s citatom

@igo:
Ravno to je težava, saj sem kot sem napisal povsem nov v teh vodah.

LP
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.00

PrispevekObjavljeno: Sre Dec 22, 2010 8:01 pm    Naslov sporočila:   Odgovori s citatom

Ne.
Problem je v tem, da jaz nimam instaliranega C-ja, zato ne vem, kaj se nahaja v omenjenih treh funkcijah.

Če bi vedel, bi bilo marsikaj razvidno iz njih. Meni, ali komur koli, ki bi jih preletel z očmi.

Iz main, ki si ga prilepil, je razvidno, da je problem v eni izmed njih.
Zato jih prilepi sem.

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
NUFAN
Član
Član



Pridružen-a: Pon 05 Apr 2004 21:39
Prispevkov: 947
Aktiv.: 4.00
Kraj: Žalec

PrispevekObjavljeno: Sre Dec 22, 2010 8:27 pm    Naslov sporočila:   Odgovori s citatom

@TRIROG, a help si kaj pogledal? Očitno ne, ker če ne bi vedel, da so tam vse funkcije obrazložene.
_________________
Roke spadajo k telesu, ne k delu.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
TRIROG
Član
Član



Pridružen-a: Čet 30 Avg 2007 12:23
Prispevkov: 84
Aktiv.: 0.39
Kraj: Ljubljana

PrispevekObjavljeno: Čet Dec 23, 2010 10:03 am    Naslov sporočila:   Odgovori s citatom

NUFAN:

Help sem pogledal, vendar si nisem znal čisto nič pomagati z njim:
u helpu glede UART1_Data_Ready() piše samo, da vrne 1 if data is ready for reading in 0 if there is no data in receive register...

Kako pa si naj s tem pomagam pa ne vem, saj ni podatka o tem kako lahko resetiram flag.

podobno skopa je tudi pomoč za UART1_Read_Text.
procedure Uart1_Read_Text(char *output, char *delimiter, char *attempts);
Description: "Reads characters received via USART until the delimiter sequence is detected. The read sequence is stored in the parameter output; delimiter sequence is stored in the parameter delimiter. This is a blocking call: the delimiter sequence is expected, otherwise the procedure exits after defined number of attpemts"




V kratkem upam priložim še točno kaj delajo te funkcije ...
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.00

PrispevekObjavljeno: Čet Dec 23, 2010 9:03 pm    Naslov sporočila:   Odgovori s citatom

Ali si si ogledal tole razlago ?

Funkcije so opisane.

Zlasti tole je zanimivo:
UART1_Write_Text("ATH\r\n") // tisto, kar ti želiš poslati
Sends text via UART. Text should be zero terminated.
Zadnja stvar, ki ji pošlješ, mora biti 0. Kaj pa pošiljaš ti?


Kot piše tule , običajno tudi je:
But, the last two characters that were read i.e. output[19] and output[20] are garbage

Naprimer UART1_Read_Text(output, "OK", 10); // reads text until 'OK' is found
bo bralo, dokler ne bo prebrano zaporedje OK. To zaporedje mora biti doseženo v 10-ih prebranih znakih, sicer leti ven iz funkcije. V output pa se shrani 8 prebranih znakov in dve 0 (znak 9 in 10). Vsaj tako izgleda.

Ti bereš, dokler ne prebereš tvojega zaporedja 31123123, nato pa pošlješ ATH\r\n Neutral Ne vem, kaj to pomeni, niti če je poslana zadeva "zero terminirana".

Če imaš težave z razumevanjem angleščine, to napiši, da dobiš podrobnejšo razlago. Sicer bo izgledalo, kot da nočeš sprejeti pomoči.

_________________
Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
TRIROG
Član
Član



Pridružen-a: Čet 30 Avg 2007 12:23
Prispevkov: 84
Aktiv.: 0.39
Kraj: Ljubljana

PrispevekObjavljeno: Sob Dec 25, 2010 11:53 am    Naslov sporočila:   Odgovori s citatom

Hvala za vse ideje. Težavo sem v vmesnem času že odpravil. Kot kaže je bil problem predvsem v mojem nepoznavanju Cja in sem celotno stvar neustrezno napisal.

Sem dobil pomoč znanca, ki je malo bolj domač v Cju in sva hitro rešila zadevo.

Hvala vsem za pripravljenost pomagati!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
NUFAN
Član
Član



Pridružen-a: Pon 05 Apr 2004 21:39
Prispevkov: 947
Aktiv.: 4.00
Kraj: Žalec

PrispevekObjavljeno: Sob Dec 25, 2010 12:28 pm    Naslov sporočila:   Odgovori s citatom

Lahko bi napisal kako si odpravil težavo. Mogoče bo komu prišlo prav.
_________________
Roke spadajo k telesu, ne k delu.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
TRIROG
Član
Član



Pridružen-a: Čet 30 Avg 2007 12:23
Prispevkov: 84
Aktiv.: 0.39
Kraj: Ljubljana

PrispevekObjavljeno: Ned Dec 26, 2010 11:07 am    Naslov sporočila:   Odgovori s citatom

Še bolje ...

Prilagam izvorno kodo napisanega programa...

Vratar - Odpiranje garažnih/dvoriščnih vrat s sklicem.

Namen programa je čakati na klic in ob dohodnem klicu preverjati identiteto klicočega. V kolikor je identiteta ustrezna(navedena v eni izmed variabel tel1,tel2 ali tel3, program pošlje ukaz ATH ( tako, da klicatelj nima stroškov sklicem) in vklopi ledico (rele), v nasprotnem primeru, pa se oglasi in prekine povezavo (v primeru morebitnih zlorab bo tako tisti , ki poskuša zlorabiti sistem imel nekaj stroškov s tem) ledice( releja pa ne prižge).

Program bi se verjetno dalo še malo optimizirati ampak o tem kaj več ob priliki.

Koda:

void main(){
 char rc_buf[50];
 char tel1[9]="31123456";
 char tel2[9]="41123456";
 char tel3[9]="51123456";
 char clip[5]="CLIP";

 TRISA=0x00;
 CMCON=7;
 PORTA=0x00;

 UART1_Init(9600);
 Delay_ms(500);
 UART1_Write_Text("ATZ\r");
 Delay_ms(500);
 UART1_Write_Text("ATE0\r");
 Delay_ms(500);
 UART1_Write_Text("AT+CLIP=1\r");
 Delay_ms(500);

 while (1) {
  if (UART1_Data_Ready() == 1) {

    UART1_Read_Text(rc_buf, "\r\n", 40);

    if (strstr(rc_buf,tel1) != 0){
              UART1_Write_Text("ATH\r");
              PORTA.f0=1;
              delay_ms(1000);
              PORTA.f0=0;
              }
    else if (strstr(rc_buf,tel2) != 0){
              UART1_Write_Text("ATH\r");
              PORTA.f0=1;
              delay_ms(1000);
              PORTA.f0=0;
              }
    else if (strstr(rc_buf,tel3) != 0){
              UART1_Write_Text("ATH\r");
              PORTA.f0=1;
              delay_ms(1000);
              PORTA.f0=0;
              }
    else if (strstr(rc_buf,clip) != 0){
              UART1_Write_Text("ATA\r");
              delay_ms(1000);
              UART1_Write_Text("ATH\r");
              }
  }
 }
}
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
watts
Član
Član



Pridružen-a: Sob 06 Nov 2010 17:59
Prispevkov: 422
Aktiv.: 2.37
Kraj: Knežak

PrispevekObjavljeno: Ned Dec 26, 2010 3:21 pm    Naslov sporočila:   Odgovori s citatom

Upam da z tem ne dobimo možnosti kake bombe (film S.W.A.T. Wink)
(Drugače pa zelo lep način, kako si za "džabe" naredimo avtomatski senzor za vrata... Le vezje me malo muči kako zgleda Smile)
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
TRIROG
Član
Član



Pridružen-a: Čet 30 Avg 2007 12:23
Prispevkov: 84
Aktiv.: 0.39
Kraj: Ljubljana

PrispevekObjavljeno: Pon Dec 27, 2010 12:18 am    Naslov sporočila:   Odgovori s citatom

Če je interes lahko prilepim tudi shemo za vezje ...

V tej različici je vsa zadeva narejena za delovanje z nokio 6210, zato ima vezje zraven še en mikrokontroler, ki nokio pripravi do tega, da se obnaša kot navaden modem.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 496 dni


Powered by phpBB © 2001, 2005 phpBB Group