Zaslal: ne prosinec 29 2013, 21:55 Předmět: komunikace pic16f877A a mobil siemens c35
Ahoj klucí.
nezkoušel jste někdo komunikovat mezi těmito dvěma zařízeními?? já jsem si zporvoznil načtení sms do picu přes usart, ale mám toršku problémek- buď nevim,jestli něco dělám špatně nebo je to funkce- namísto aby mi z toho lezly data ve formě bytu hex- konkrétně u mě 4F 71 DE 1E...... tak mi z toho leze 4 F 7 1 D E 1 E v asci tvaru. tak nějak nevim, jak z toho ven. nemáte někdo zkušenost a radu??? dík Marek
kód:
program GSM
' Declarations section
' set of AT commands
const atc0 = "AT+CMGD=1"
const atc1 = "AT+CMGL=0"
const atc2 = "ATE0"
dim LCD_RS as sbit at Re0_bit
LCD_EN as sbit at Re2_bit
LCD_D4 as sbit at Rd4_bit
LCD_D5 as sbit at Rd5_bit
LCD_D6 as sbit at Rd6_bit
LCD_D7 as sbit at Rd7_bit
LCD_RS_Direction as sbit at TRISe0_bit
LCD_EN_Direction as sbit at TRISe2_bit
LCD_D4_Direction as sbit at TRISd4_bit
LCD_D5_Direction as sbit at TRISd5_bit
LCD_D6_Direction as sbit at TRISd6_bit
LCD_D7_Direction as sbit at TRISd7_bit
dim gsm_state, obsah, pom, pom_cislo, i, flag as byte
dim start as word
dim cislo as string[12]
dim sms_obsah as string[20]
dim sms_prevod as string[10]
' send ATC command
sub procedure send_atc(dim const s as ^char)
while(s^ <> 0)
UART1_Write(s^)
inc(s)
wend
UART1_Write(0x0D)
end sub
sub procedure send_atm(dim const s as ^char)
while(s^ <> 0)
UART1_Write(s^)
inc(s)
wend
UART1_Write(0x26)
end sub
sub procedure prevod ()
for i = 0 to 9
uart1_write(sms_obsah[i]) 'vypis na linku pro kontrolu analyzator
next i
sub procedure interrupt
if pir1.5 then 'preruseni pri naplnenym uartu
obsah = uart1_read()
start = start<< 8 'hledam znaky 0x3037 tj 07 to je zacatek
start = start + obsah 'vlastniho kodu sms nemsuim se zabyvat
if start = 0x3037 then ' ruznyma hlasenima a doprovodnym
flag.1 = 1 'kodem
pom = 0 ' odpocitavam az k tel cislu a pote k obsahu zpravy '
pom_cislo = 0 'cislo pro adresaci bytu ve stringu -
end if 'zapis tlf. cisla a obsahu zpravy
if flag.1 = 1 then
portd.0 = 1
pom = inc(pom)
if (pom > 20) and (pom < 33) then
cislo[pom_cislo] = obsah 'prijme byte a ulozi do stringu
pom_cislo = inc(pom_cislo) ':cislo na pozici :pom_cislo
end if
if pom = 49 then
pom_cislo = 0
end if
if pom = 75 then
flag.1 = 0
flag.2 = 1
end if
if (pom > 53) and (pom < 74) then 'to same jako u tlf. cisla
sms_obsah[pom_cislo]= obsah
pom_cislo = inc(pom_cislo)
end if
portd.0 = 1
end if
pir1.5 = 0
end if
end sub
Založen: Jun 14, 2003 Příspěvky: 2801 Bydliště: Blížejov
Zaslal: po prosinec 30 2013, 0:27 Předmět:
Ona nejde po sběrnici mezi mobilem a mikročipem poslat SMS v textové podobě, to je velmi složitě kodované.
Pokud nějaké "jednoduché" zařízení jako alarm atd. .. posílá SMS, má je uloženy v paměti mobilu a posílá pomocí AT příkazu "SMS s pořadovým číslem...".
Existuje kniha popisující zařízení mimo jiné GPA1 (Flajzar?) a tam je to docela pěkně popsáno a vysvětleno.
Ale jo, já vim jak vypadá zakódovaná smska i jak to funguje - nejvyšší bit je vždy nula, proto se vypustí a na jeho místo se posouvají další z vedlejšího bytu..., to problém není a funguje mi to. problém mám s tím, že se všude píše, že ti z telefonu vyleze jeden byte např. 0x4f, jenže mě z toho lezou místo jednoho 0x4f dva byty: 0x34 a 0x46, což je v ascii tabulce 4 a F......takže to budu muset buď převádět zpět na hexa 0x4F a bude z toho tuna zbytečnýho kódu navíc, nebo někde dělám chybu a mám něco blbě zapnutýho...
Založen: Oct 02, 2009 Příspěvky: 5286 Bydliště: PO
Zaslal: po prosinec 30 2013, 23:54 Předmět:
Ten prevod dvoch Ascii do jedného Hex je jednoduchá funkcia. Výsledkom je štvorbitové číslo 0x0n. Jedno sa prehodí na 0xn0 a spoja obidva s fun. OR do osem bitového.
hmm, jenomže to není převod dvou ascii, ale dvou hex na jeden. nebo mi to nějak nejde.... to neva dnes ráno mi došlo, že to půjde celkem jednoduše (snad, je to jen nástřel, nejsem doma, abych to zkusil):
kód:
for i = 0 to 19
if sms_obsah[i] > 96 then 'pokud je cislo vetsi nez 96 jde o
sms_obsah[i] = sms_obsah[i]-86 ' mala pismena
else sms_obsah[i] = sms_obsah[i]-48 'jinak jsou to cisla
end if
next i
for i = 0 to 18 step 2
(sms_obsah[0]/2) = sms_obsah[0] + swap(sms_obsah[i+1])
next i
Naposledy upravil mlike dne út prosinec 31 2013, 12:10, celkově upraveno 1 krát.
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.