Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

komunikace pic16f877A a mobil siemens c35

 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
mlike



Založen: Sep 03, 2005
Příspěvky: 28

PříspěvekZaslal: ne prosinec 29 2013, 21:55    Předmět: komunikace pic16f877A a mobil siemens c35 Citovat

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
         
         pom = sms_obsah[9]>>7
         sms_prevod[10] = sms_obsah[9] and 0x80  'prevod zatim jen
         sms_prevod[9] = ((sms_obsah[8])<<1) + pom    'nafofr zjednodus
         pom = sms_obsah[8]>>6
         sms_prevod[8] = ((sms_obsah[7])<<2) + pom
         pom = sms_obsah[7]>>5
         sms_prevod[7] = ((sms_obsah[6])<<3) + pom
         pom = sms_obsah[6]>>4
         sms_prevod[6] = ((sms_obsah[5])<<4) + pom
         pom = sms_obsah[5]>>3
         sms_prevod[5] = ((sms_obsah[4])<<5) + pom
         pom = sms_obsah[4]>>2
         sms_prevod[4] = ((sms_obsah[3])<<6) + pom
         pom = sms_obsah[3]>>1
         sms_prevod[3] = ((sms_obsah[2])<<7) + pom

         pom = sms_obsah[2]>>7
         sms_prevod[2] = sms_obsah[1] and 0x80
         sms_prevod[1] = ((sms_obsah[1])<<1) + pom
         pom = sms_obsah[1]>>6
         sms_prevod[0] = ((sms_obsah[0])<<2) + pom
         lcd_chr(1,1,sms_prevod[10])
         lcd_chr(1,2,sms_prevod[9])
         lcd_chr(1,3,sms_prevod[8])
         lcd_chr(1,4,sms_prevod[7])
         lcd_chr(1,5,sms_prevod[6])
         lcd_chr(1,6,sms_prevod[5])
         lcd_chr(1,7,sms_prevod[4])
         lcd_chr(1,8,sms_prevod[3])
         lcd_chr(1,9,sms_prevod[2])
         lcd_chr(1,10,sms_prevod[1])
         lcd_chr(1,11,sms_prevod[0])
     end sub
     
     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

main:
'   Main program

    porta = 0
    portb = 0
    portc = 0
    portd = 0
    porte = 0

    adcon1 = 6
    cmcon  = 7

    trisa = 0x20
    trisb = 0
    trisc = 0
    trisd = 0
    trise = 0
   
    PIE1.RCIE   = 1
    INTCON.PEIE = 1
    INTCON.GIE  = 1

    lcd_init()
    lcd_cmd (_lcd_clear)
    lcd_cmd (_LCD_cursor_OFF)
   
    uart1_init (19200)
    send_atc(@ATC2)                              'zakazat echo
    sms_obsah = "00000000000000000000"
  while true

          send_atc(@ATC1)
          delay_ms(500)

          delay_ms(500)
          if flag.2 = 1 then
             flag.2 = 0
             send_atc(@ATC0)
          end if
'          if flag.0 = 1 then
             flag.0 = 0
             prevod()
'          end if

  wend
end.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
monterjirka



Založen: Jun 14, 2003
Příspěvky: 2794
Bydliště: Blížejov

PříspěvekZaslal: po prosinec 30 2013, 0:27    Předmět: Citovat

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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
mlike



Založen: Sep 03, 2005
Příspěvky: 28

PříspěvekZaslal: po prosinec 30 2013, 9:03    Předmět: Citovat

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...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mlike



Založen: Sep 03, 2005
Příspěvky: 28

PříspěvekZaslal: po prosinec 30 2013, 9:04    Předmět: Citovat

mimochodem zas tak složitá ta sms není, jen se tak tváří Very Happy
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
procesor



Založen: Oct 02, 2009
Příspěvky: 5286
Bydliště: PO

PříspěvekZaslal: po prosinec 30 2013, 23:54    Předmět: Citovat

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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mlike



Založen: Sep 03, 2005
Příspěvky: 28

PříspěvekZaslal: út prosinec 31 2013, 11:29    Předmět: Citovat

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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
procesor



Založen: Oct 02, 2009
Příspěvky: 5286
Bydliště: PO

PříspěvekZaslal: út prosinec 31 2013, 11:58    Předmět: Citovat

No je to jedno, vstupuje ako textový reťazec.
2ascii na 1 hex je na tej stránke dole (posledný príklad).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
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

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

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.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.15 sekund