Selamat datang di ForSa! Forum diskusi seputar sains, teknologi dan pendidikan Indonesia.

Welcome to Forum Sains Indonesia. Please login or sign up.

Maret 29, 2024, 05:00:49 PM

Login with username, password and session length

Topik Baru

Artikel Sains

Anggota
Stats
  • Total Tulisan: 139,653
  • Total Topik: 10,405
  • Online today: 231
  • Online ever: 1,582
  • (Desember 22, 2022, 06:39:12 AM)
Pengguna Online
Users: 0
Guests: 235
Total: 235

Aku Cinta ForSa

ForSa on FB ForSa on Twitter

SMS Kontroller

Dimulai oleh haglan, Juni 18, 2010, 06:15:23 PM

« sebelumnya - berikutnya »

0 Anggota dan 1 Pengunjung sedang melihat topik ini.

haglan

 ;D
Perlu bantuan nih kalian semua - semua  :D
lg bikin aplikasi sms controller buat nyalain 8 buah lampu rencananya  :)
pake atmega 16 n covi avr pkenya mode pdu
aku dah coba koneksi ke komputer n dh bisa buat kirim.

waktu aku coba kirim pake mikro ada masalah nih . . . :D
hp tuh langsung mati ....
kira kira napa yah
aku ksh listingnya yah ...

/*****************************************************
This program was produced by the
CodeWizardAVR V2.04.4a Advanced
Automatic Program Generator
© Copyright 1998-2009 Pavel Haiduc, HP InfoTech s.r.l.
[pranala luar disembunyikan, sila masuk atau daftar.]

Project :
Version :
Date    : 6/15/2010
Author  : NeVaDa
Company : sttw
Comments:


Chip type               : ATmega16
Program type            : Application
AVR Core Clock frequency: 12.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256
*****************************************************/

#include <mega16.h>
#include <delay.h>

// Standard Input/Output functions
#include <stdio.h>

// Declare your global variables here
#define enter putchar(0x0D);
#define nl putchar(0x0A);

char echo,AT,pdu,send,cek_send;

void cek_hp(void)
{
    printf("AT\x0D\x0A");
    while(AT!='K')
    {
    printf("AT\x0D\x0A");
    AT=getchar();
    }
PORTA.0=1;
}

void no_echo(void)
{
    printf("ATE0\x0D\x0A");
    while(echo!='K')
    {
    printf("ATE0\x0D\x0A");
    echo=getchar();
    }
PORTA.1=1;
}

void pdu_mode(void)
{
    printf("AT+CMGF=0");
    enter;
    nl;
    delay_ms(200);
    while(pdu!='K')
    {
    printf("AT+CMGF=0");
    enter;
    nl;
    delay_ms(200);
    pdu=getchar();
    }
PORTA.2=1;   
}

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 19200
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x26;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

cek_hp();
delay_ms(500);
no_echo();
delay_ms(500);
pdu_mode();
delay_ms(500);
while (1)
      {
      delay_ms(200);
      printf("AT+CMGS=29");
      enter;
      nl;
      delay_ms(1000);
      printf("0691261801000011000D91265822271261F40000AA0FE179BD5EAFD7EBF57ABD5EAFD701");
      putchar(0x1B);
            while(send!='K')
            {
            printf("AT+CMGS=29");
            enter;
            nl;
            delay_ms(1000);
            printf("0691261801000011000D91265822271261F40000AA0FE179BD5EAFD7EBF57ABD5EAFD701");
            putchar(0x1B);
            PORTA.5=1;
            send=getchar();
            }
      PORTA.4=1;
      };
}


haglan

setelah smlem w coba _ coba
msh juga blm berhasil

w coba simpen data pdu di memory hp penggalan listingnya gini :

void send_atcmgw(void)
{
    while(atcmgw!='K')
    {
    printf("AT+CMGW=19\x0D");
    delay_ms(100);              //harus di pake delay kalau tidak hp mati
    atcmgw=getchar();
        if(atcmgw==0x20)
        {
        printf("0691261801000011000D91265847377221F30000AA046572D80D\x1A");
        }
        else
        {
        putchar(0x1A);
        }
    }
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("atcmgw");
lcd_gotoxy(0,1);
lcd_putsf("ok");
delay_ms(3000);   
}

hasilnya sms di inbox jd full dgn sendiri .........  ??? mungkin krna dari putchar(0x1A)
apa mungkin mikronya g mampu ngirim pdu sebnyk gt yah ??? ada yg bisa bantu g kira2 knapa ?? ???

haglan

g putus asa nih bikin penasaran . . .  kok g jadi  ;D
gue rombak - rombak lagi eh ketemu gini nih programnya  :D

void send_sms(void)
{
    while(send!='K')
    {
    printf("AT+CMGS=19\x0D");
    delay_ms(100);
    printf("0691261801000011000D91265822271261F40000AA046572D80D\x1A");   
    send=getchar();
    delay_ms(100);
        if(send!='K')
        {
        lcd_clear();
        lcd_gotoxy(0,0);
        lcd_putsf("send sms");
        lcd_gotoxy(0,1);
        lcd_putsf("waiting");
        delay_ms(3000);
        }
    }
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("send sms");
lcd_gotoxy(0,1);
lcd_putsf("sending");
delay_ms(3000);
}

program aku tes n jadi ...  ;D tpi yg aneh nih disitu kan ada prog buatmenampilkan sms waiting atw sending.
lha pas hp tu lagi g da sinyal atw mencari jaringan otmtis staus ke waiting ...
tyus bas ok dpt sinyl sms terkirim ... status g berubah .... tetep waiting harusnya kan keluar dari looping itu ... status gnti ... knpa yah ???? pa yg salah ??  ???

0y1k

Kutip dari: haglan pada Juni 19, 2010, 10:41:54 PM
g putus asa nih bikin penasaran . . .  kok g jadi  ;D
gue rombak - rombak lagi eh ketemu gini nih programnya  :D

void send_sms(void)
{
    while(send!='K')
    {
    printf("AT+CMGS=19\x0D");
    delay_ms(100);
    printf("0691261801000011000D91265822271261F40000AA046572D80D\x1A");   
    send=getchar();
    delay_ms(100);
        if(send!='K')
        {
        lcd_clear();
        lcd_gotoxy(0,0);
        lcd_putsf("send sms");
        lcd_gotoxy(0,1);
        lcd_putsf("waiting");
        delay_ms(3000);
        }
    }
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("send sms");
lcd_gotoxy(0,1);
lcd_putsf("sending");
delay_ms(3000);
}

program aku tes n jadi ...  ;D tpi yg aneh nih disitu kan ada prog buatmenampilkan sms waiting atw sending.
lha pas hp tu lagi g da sinyal atw mencari jaringan otmtis staus ke waiting ...
tyus bas ok dpt sinyl sms terkirim ... status g berubah .... tetep waiting harusnya kan keluar dari looping itu ... status gnti ... knpa yah ???? pa yg salah ??  ???

yang membuat seperti itu ya if send tidak sama dengan karakter K
jadi setiap HP mengirim data serial, lantas diterima.
Jika yang diterima itu bukan K, maka tampil itu mas

kenapa hanya ngambil karakter doank???
coba ambil textnya
buka karakter

cara ambil text yaitu pake looping pengambilan karakter
لاَ إِلَـهَ إِلاَّ اللهُ الْعَظِيْمُ الْحَلِيْمُ، لاَ إِلَـهَ إِلاَّ اللهُ رَبُّ الْعَرْشِ الْعَظِيْمُ، لاَ إِلَـهَ إِلاَّ اللهُ رَبُّ السَّمَاوَاتِ وَرَبُّ اْلأَرْضِ وَرَبُّ الْع

haglan

looping karakter yah .... penjelasannya gimana tuh

Too Payz

#5
Wow... Mangstab...
Udah di coba dan di tes perfungsi?
Jalan atau tidak... Coba dulu satu-satu kalo berhasil baru digabungkan.

Kutip// Declare your global variables here
#define enter putchar(0x0D);
#define nl putchar(0x0A);
Mending ga usa tulis begini biar ga bingung nanti.

Kutipvoid cek_hp(void)
{
   printf("AT\x0D\x0A");
   while(AT!='K')
   {
   printf("AT\x0D\x0A");
   AT=getchar();
   }
PORTA.0=1;
}
printf("AT\x0D\x0A"); nah mending begini aja nulisnya.
Kebalik nih..
Sama buat echo juga..

void cek_hp(void)
{
   AT=' '; // init karakter awal spasi atau kosong(terserah)
   while(AT!='K' && AT!='R')  // OK dan ERROR
   {
   printf("AT\x0D\x0A");
   AT=getchar();
   }
    if (AT=='K') PORTA.0=1;
    else /*kalo error*/;


Kutipvoid pdu_mode(void)
{
   printf("AT+CMGF=0");
   enter;
   nl;
   delay_ms(200);
   while(pdu!='K')
   {
   printf("AT+CMGF=0");
   enter;
   nl;
   delay_ms(200);
   pdu=getchar();
   }
PORTA.2=1;    
}
void pdu_mode(void)
{
    pdu=' '; // init karakter awal spasi atau kosong(terserah)
    while(pdu!='K' && pdu!='R')  // OK dan ERROR
    {
    printf("AT+CMGF=0\x0d\x0a");
    delay_ms(200);
    pdu=getchar();
    }
    if (pdu=='K')    PORTA.2=1;   
    else /*kalo error ??*/;
}

terlihat klo fungsi, PDU, AT, echo mirip.
Coba sederhanakan jadi cukup 1 fungsi saja.
Bisa kok..

Kutipprintf("AT+CMGS=29");
.....................
     putchar(0x1B);
.....................
           while(send!='K')
           {
           printf("AT+CMGS=29");
           enter;
           nl;
           delay_ms(1000);
AT+CMGS=29 apa yak ?? lopa aku...
trus putchar 0x1B apa?
Kok pake memori HP fungsinya buat apa ?
Memori Mikro masi ebih dari cukup kok..

haglan

aku lagi coba bikin program buatbaca data pdu nya nih .. temen temen ada yg bisanagsih tips nya ga ?? seputar cara membaca datanya

haglan

aku coba buat data buat baca pdunya tyus ditampilan ke lcd dibwh data diambil dai komputer blm dari mikro :

at+cmgr=1

+CMGR: 1,,22
06912618010000240D91265822476131F400000160321201908202C834

OK


dalam hexnya
00000000: 0D 0A 2B 43 4D 47 52 3A |  20 31 2C 31 2C 2C 32 32     ..+CMGR: 1,1,,22 
00000010: 0D 0A 30 36 39 31 32 36  |  31 38 30 31 30 30 30 30     ..06912618010000 
00000020: 32 34 30 44 39 31 32 36  |  35 38 32 32 34 37 36 31     240D912658224761 
00000030: 33 31 46 34 30 30 30 30  |  30 31 36 30 33 32 31 32     31F4000001603212 
00000040: 30 31 39 30 38 32 30 32  |  43 38 33 34 0D 0A 0D 0A    01908202C834.... 
00000050: 4F 4B 0D 0A                                                           OK..             

void read_sms1(void)
{
unsigned int x,msg,atcmgr1,msg5;
char buffer2[82],msg2[82],msg3[82],msg4[82];
atcmgr1=' ';


    while (getchar()!='K')
    {
    printf("AT+CMGR=1\x0D");
    delay_ms(100);
        for(x=0;x<82;x++)
        {
        msg3
  • =getchar();
            }
       
        lcd_clear();
        lcd_gotoxy(0,0);
        lcd_putsf("wait respon");
            for(x=0;x<82;x++)
            {
            msg5=msg3
  • ;
            lcd_gotoxy(0,1);
            lcd_putsf("   ");
            lcd_gotoxy(0,1);
            sprintf(msg4,"%x",msg5);
            lcd_puts(msg4);
            delay_ms(2000);
            }
        }

    tyus dicoba dari mikro data kebaca sampia terakhir ... n dah ku bandingin bnar .. tp disini kok looping terus yah .. kan harusnya ketika menjumpai karakter 'K' pengambilan data slese g looping napa yah ??  ???

haglan

maaf ada kesalahan, yang dari looping for pertama gini :
for(x=0;x<82;x++)
        {
        msg3
  • =getchar();
            }

    dan yang looping for kedua

    for(x=0;x<82;x++)
            {
            msg5=msg3
  • ;
            ................................

0y1k

looping terus??
kan itu karakter K udah diambil sebelumnya...
jadi nanti saat getchar selanjutnya itu ya karakter "."

coba ganti 82 menjadi 81
لاَ إِلَـهَ إِلاَّ اللهُ الْعَظِيْمُ الْحَلِيْمُ، لاَ إِلَـهَ إِلاَّ اللهُ رَبُّ الْعَرْشِ الْعَظِيْمُ، لاَ إِلَـهَ إِلاَّ اللهُ رَبُّ السَّمَاوَاتِ وَرَبُّ اْلأَرْضِ وَرَبُّ الْع

0y1k

oh iyah, coba kayak gini mas

printf("AT+CMGR=1\x0D");
delay_ms(100);
    while (getchar()!='K')
    {
        msg3 =getchar();
        msg5=msg3;
        }
لاَ إِلَـهَ إِلاَّ اللهُ الْعَظِيْمُ الْحَلِيْمُ، لاَ إِلَـهَ إِلاَّ اللهُ رَبُّ الْعَرْشِ الْعَظِيْمُ، لاَ إِلَـهَ إِلاَّ اللهُ رَبُّ السَّمَاوَاتِ وَرَبُّ اْلأَرْضِ وَرَبُّ الْع

haglan

 :D
udah ketemu bro .....  ;D mantanpssssssssss...................... tgl bikin perbanding antar data >:D

haglan

2 hri byum ketemu juga ......  weleh weleh .... mumet ......   

0y1k

Kutip dari: haglan pada Juni 26, 2010, 06:13:46 AM
2 hri byum ketemu juga ......  weleh weleh .... mumet ......   
apa yang belum ketemu???
share atuh... ntar kita selesaikan.. hehehe

masalah pembanding data??
data apa yang dibandingkan??
k'lo data string perlu ada sedikit cara
tidak seperti data yang lain

sedikit pengetahuan
untuk data string
str1[] = "halo"
ini sama dengan
str1[] = {'h','a','l','o','\x0'}

wah semoga membantu untuk membandingkan data string yah.. hehehe
string tidak akan bisa membandingkan seperti ini
str1 == str2

namun perlu dicek karakter per karakter
لاَ إِلَـهَ إِلاَّ اللهُ الْعَظِيْمُ الْحَلِيْمُ، لاَ إِلَـهَ إِلاَّ اللهُ رَبُّ الْعَرْشِ الْعَظِيْمُ، لاَ إِلَـهَ إِلاَّ اللهُ رَبُّ السَّمَاوَاتِ وَرَبُّ اْلأَرْضِ وَرَبُّ الْع

haglan

kalo di library string kayanya bisa yah ?? lgsng dibandingin lg pelajari library string nya nih