 |

|
|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2025 12 25, 07:14. Visos datos yra GMT + 2 valandos.
|
|
|
 |
Forumas » Mikrovaldikliai » Reikia pasiųsti AT komandas į C55. PIC, C kalba
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
 |
Reikia pasiųsti AT komandas į C55. PIC, C kalba |
Parašytas: 2012 03 31, 12:46 |
|
|
|
|
Sveiki,
Norėjau paklausti ar įmanoma naudojant proteus programa ir prijungus mobilujį telefoną prie laptopo nusiųsti jam programa, kad siųstų sms ar panašiai. Jei taip ar reikia kažką nustatysi proteuse ar kažką panašaus.
dekui už atsakymus |
|
|
|
|
|
 |
Reikia pasiųsti AT komandas į C55. PIC, C kalba |
Parašytas: 2012 03 31, 13:23 |
|
|
|
|
| Ham rašo: |
Sveiki,
Norėjau paklausti ar įmanoma naudojant proteus programa ir prijungus mobilujį telefoną prie laptopo nusiųsti jam programa, kad siųstų sms ar panašiai. Jei taip ar reikia kažką nustatysi proteuse ar kažką panašaus.
dekui už atsakymus |
Imanoma. Reiks pasirinkti valdikli kuriam parasysi programa. Su koponentu compim (com portas) prisijungsi prie telefono panaudodamas com-usb koverteri (koki ft232). Tada galesi siust sms. |
|
|
|
|
|
 |
 |
Reikia pasiųsti AT komandas į C55. PIC, C kalba |
Parašytas: 2012 03 31, 14:11 |
|
|
|
|
Tai proteuse pasiemu MV, ComPim jungty, viska sujungiu, tada į usb įkišu, USB-COM konverterį ir prie COM galo įkišu kabelį(COM-telefono jugntis). Ar aš taip suprantu?
Beto, kandagi nelabai esu patyręs elektronikas norėjau paklausti, pas man ant schemos telefnoas jungiasi tiesiog prie keturių jungčių(VIN, RX, TX, GND), taigi, jei aš ant proteuso viską užprogramuoju per COM, tikriausiai poto, kai norėsiu bandytis ant plokštės(ant tų keturių jungčių) reiks kažką keisti? Ar aš klystu? Taip pat niekur neradau ar siemens cx70 turi AT komandas? |
|
|
|
|
|
 |
 |
Re: Reikia pasiųsti AT komandas į C55. PIC, C kalba |
Parašytas: 2012 04 04, 07:52 |
|
|
|
|
| andriusa rašo: |
Aš sakiau netikiu, kad kas parašytų pats su C nuo nulio iki galo. Įjungti biblioteką visi moka. |
Teko prieš puse metų parašyti softwarinį UART MSP430 procui. Ir viskas nuo 0, C kalba, panaudojant vieną taimerį, yra TX ir RX.
Nėra jau taip baisu ir ASM bei papildomi tranzai nebuvo reikalingi  |
|
|
|
|
|
 |
 |
Reikia pasiųsti AT komandas į C55. PIC, C kalba |
Parašytas: 2012 04 07, 23:38 |
|
|
|
|
Sveiki, iškilo bėdų su komunikacija tarp PIC16F877 ir Siemens C55. Išsiuntus žinutę į Siemens C55, mikrovaldiklis turi uždegti LED'ą, kuris prijungtas ant RB3 prievado, tačiau LED'as neužsidega.
Siemens C55 prijungtas (Rx, Tx, Vdd, GND) prie mikrovaldiklio per UART sąsają tiesiogiai be buferio.
Kompiliatorius - Mikro C PRO for PIC.
Vadovaujausi idėja, kuri buvo aprašyta šitoje temoje: Pradžioje siunčiame komandą AT+CNMI su atitinkamais parametrais, kad atėjus SMS žinutei gauti kitą komandą - +CMTI: <mem>,<index> (atminties vieta ir žinutės nr.). Pats žinutės tekstas ir jos interpretavimas nedomina. Svarbu tik faktas, kad žinutė ''atėjo".
Mano programos kodas:
char priemimas[2];
const char siuntimas[] ="AT+CNMI=1,1,0,0,1"; //??????
char i=0;
int flag=0;
unsigned char duomenys;
void interrupt()
{
if (PIR1.RCIF==1)
{
for (i=0; i<1; i++)
{
priemimas[i]=Uart1_Read();
}
flag=1;
}
}
void main()
{
TRISA=0;
TRISB=0;
PORTA=0;
PORTB=0;
INTCON.GIE = 1;
INTCON.PEIE = 1;
PIE1.RCIE=1;
TRISC.RC7=1;
TRISC.RC6=0;
i=0;
Uart1_Init(9600);
Delay_ms(2000);
do
{
duomenys = siuntimas[i];
Uart1_Write(duomenys);
i++;
}
while (i<17);
Uart1_Write ('\r');
do
{
if (flag==1)
{
if (strcmp(priemimas, "+") == 0)
{
PORTB.RB3=1;
}
}
}
while (1);
}
Šią programą simuliavau Proteus aplinkoje ir ji veikė. Realybėje deja ne. Gaila neturiu duomenų kabelio per kurį galėčiau sujungti telefoną su kompu ir žiūrėti kaip viskas atitinkamai veikia.
Programos veikimo idėja: siunčiame konfigūracijos komandą AT+CNMI. Atėjus žinutei į Siemens C55, telefonas išsiunčia komandą +cmti: "SM", 1 kuri parodo kad atėjo žinutė nr. 1. Ši komanda iššaukia mikrovaldiklyje pertrauktį. Jos metu į masyvą įdedamas tik pirmas atėjusios komandos simbolis - "+". Vėlaiu yra vykdoma sąlyga if. Jeigu masyve yra "+" - uždegamas LED ant RB3, jei jo nėra - niekas ir neįvyksta.
Taigi, kas mano programoje yra blogai, kad ji neveikia?
Kokie yra tie "atitinkami AT+CNMI parametrai? Ar jie programoje nurodyti teisingai?
Galų gale gal viskas neveikia dėl to kad nėra buferio jungtyje telefono Tx -----------> mikrovaldiklio Rx? Juk telefonas išduoda tik apie ~3 V. ??
Būtų labai gerai išgirsti kažkokių minčių  |
|
|
|
|
|
 |
 |
Reikia pasiųsti AT komandas į C55. PIC, C kalba |
Parašytas: 2012 04 08, 12:19 |
|
|
|
|
| Kodas: |
//-------------------------------------------------------------
const char ATE0[]="ATE0\r";
const char AT_CNMI[]="AT+CNMI=1,1,0,0,1\r";
char buff[32];
//-------------------------------------------------------------
void clear_buff(void);
void uart_send(const char *st);
unsigned int uart_read(void);
unsigned int test_ok(unsigned int len);
void klaida(void);
//-------------------------------------------------------------
void uart_send(const char *st){
int i;
clear_buff();
i = 0;
while(st[i] != 0){
if (UART1_Tx_Idle() == 1) {
UART1_Write(st[i]);
i++;
}
}
}
//-------------------------------------------------------------
unsigned int uart_read(void){
unsigned int i, s;
s = 0;
i = 0;
while(i<65535){
if (UART1_Data_Ready() == 1) {
buff[s] = UART1_Read();
s++;
i = 0;
}
i++;
}
return s;
}
//-------------------------------------------------------------
void clear_buff(void){
int i;
for(i=0; i<32; i++){
buff[i] = 0;
}
}
//-------------------------------------------------------------
unsigned int test_ok(unsigned int len){
if(strncmp(&buff[len-6], "\r\nOK\r\n", 6) == 0){
return 1;
}
return 0;
}
//-------------------------------------------------------------
void klaida(void){
while(1){
delay_ms(250);
PORTB.RB3 = 1 ;
delay_ms(250);
PORTB.RB3 = 0 ;
}
}
//-------------------------------------------------------------
void main(){
unsigned int i;
TRISA=0;
TRISB=0;
PORTA=0;
PORTB=0;
Uart1_Init(9600);
Delay_ms(2000);
uart_send(ATE0);
i = uart_read();
if(!test_ok(i)) klaida();
uart_send(AT_CNMI);
i = uart_read();
if(!test_ok(i)) klaida();
clear_buff();
while(1){
if (UART1_Data_Ready() == 1){
uart_read();
i = strncmp(buff,"\r\n\+", 3);
if(i==0) PORTB.RB3 = 1 ;
clear_buff();
}
}
}
|
|
|
|
|
|
|
 |
 |
Reikia pasiųsti AT komandas į C55. PIC, C kalba |
Parašytas: 2012 04 08, 19:06 |
|
|
|
|
Testavau kodą nemažai kartų, beveik visada mirksi lemputės - klaida. Tačiau keletą kartų viskas suveikė kažkokiu būdu gerai - atsiuntus SMS užsidegė LED
Ar tikrai nereikia buferio tarp c55 tx ir pic rx? Galbūt šie nestabilumai ir yra būtent dėl to... PIC16F877 UART Rx yra su Šmito trigeriu, kurio min Vin = 0.8VDD (Jei maitinimas 5 V, tai min 4 V reik), o c55 išduoda berods tik 3,3 V.
Kaip Jūs jungėte telefoną su mikrovaldikliu?
Anyway, specialistui labai labai dėkui už kodą! Užvedė ''ant kelio"  |
|
|
|
|
|
 |
Reikia pasiųsti AT komandas į C55. PIC, C kalba |
Parašytas: 2012 04 08, 19:26 |
|
|
|
|
| Isbandyta su proteus, prie kompo prijungus tel. per ft232 usb-usart keitikli. Man tai normaliai veikia. Telefonas siemens mc60. I tel. RX jungiau per dalikli, nes is ft232 5V iseina. |
|
|
|
|
|
 |
 |
 |
 |
Reikia pasiųsti AT komandas į C55. PIC, C kalba |
Parašytas: 2012 04 08, 21:31 |
|
|
|
|
| Signal rašo: |
Testavau kodą nemažai kartų, beveik visada mirksi lemputės - klaida. Tačiau keletą kartų viskas suveikė kažkokiu būdu gerai - atsiuntus SMS užsidegė LED
Ar tikrai nereikia buferio tarp c55 tx ir pic rx? Galbūt šie nestabilumai ir yra būtent dėl to... PIC16F877 UART Rx yra su Šmito trigeriu, kurio min Vin = 0.8VDD (Jei maitinimas 5 V, tai min 4 V reik), o c55 išduoda berods tik 3,3 V.
Kaip Jūs jungėte telefoną su mikrovaldikliu?
Anyway, specialistui labai labai dėkui už kodą! Užvedė ''ant kelio"  |
Tam kad viskas vyktu stabiliai yra butina naudoti interrupt funkcija. Jeigu reikia aptikti tik viena zenkla, ir kitokiu pertraukimu nera, tai priemimui uztenka parasyti tik tiek:
| Kodas: |
void interrupt(){
if(UART1_Read() == '+') {PORTB.RB3=1;}
} |
|
|
|
|
|
|
 |
 |
Reikia pasiųsti AT komandas į C55. PIC, C kalba |
Parašytas: 2012 04 08, 22:55 |
|
|
|
|
| Ingo rašo: |
| Signal rašo: |
Testavau kodą nemažai kartų, beveik visada mirksi lemputės - klaida. Tačiau keletą kartų viskas suveikė kažkokiu būdu gerai - atsiuntus SMS užsidegė LED
Ar tikrai nereikia buferio tarp c55 tx ir pic rx? Galbūt šie nestabilumai ir yra būtent dėl to... PIC16F877 UART Rx yra su Šmito trigeriu, kurio min Vin = 0.8VDD (Jei maitinimas 5 V, tai min 4 V reik), o c55 išduoda berods tik 3,3 V.
Kaip Jūs jungėte telefoną su mikrovaldikliu?
Anyway, specialistui labai labai dėkui už kodą! Užvedė ''ant kelio"  |
Tam kad viskas vyktu stabiliai yra butina naudoti interrupt funkcija. Jeigu reikia aptikti tik viena zenkla, ir kitokiu pertraukimu nera, tai priemimui uztenka parasyti tik tiek:
| Kodas: |
void interrupt(){
if(UART1_Read() == '+') {PORTB.RB3=1;}
} |
|
Iki to mes nedaeinam. Klaida gaunama dar prieš SMS siuntimą, pačioje programos pradžioje - siunčiant ATE0 ir AT+CNMI komandas. |
|
|
|
|
|
 |
 |
Reikia pasiųsti AT komandas į C55. PIC, C kalba |
Parašytas: 2012 04 09, 08:01 |
|
|
|
|
| Signal rašo: |
Iki to mes nedaeinam. Klaida gaunama dar prieš SMS siuntimą, pačioje programos pradžioje - siunčiant ATE0 ir AT+CNMI komandas. |
Tai kad pradeti reikia nuo paprastesnio dalyko, taip kaip buvai pradejes, jei gu nori sudetingiau, panagrinek sekanti koda. netestavau ir netikrinau, parasiau tik pati principa, bet jei suprasi minti, pasiderinsi kaip noresi:
| Kodas: |
#define LED_raudonas RB4_bit
#define LED_zalias RB3_bit
const Wait_OK = 1;
const Wait_plius = 2;
unsigned short response_type =0;
unsigned short gsm_state = 0;
unsigned short response_rcvd = 0;
void Usart_Str_Write(char* string);
//-------------------------------------------------
void main(){
ADON_bit = 0; //Turn off ADC
TRISA=0;
TRISB=0;
TRISC=0b10000000;
TRISD=0;
TRISE=0;
PORTA=0;PORTB=0;PORTC=0;PORTD=0;PORTE=0;
PIE1.RCIE = 1; //leidzia USART read pertraukimus
INTCON.GIE = 1; // global interrput enable
INTCON.PEIE = 1; // Peripheral Interrupt Enable
UART1_Init(9600);
Delay_ms(1000);
while(1){
response_type=Wait_OK ;
Usart_Str_Write("AT");
delay_ms(100);
while(!response_rcvd) {
LED_raudonas=1; //dega raudonas led'as=klaida
Usart_Str_Write("AT");
Delay_ms(500);
}
response_rcvd = 0;
LED_raudonas=0;
response_type=Wait_plius;
delay_ms(100);
Usart_Str_Write("AT+CNMI=1,1,0,0,1");
delay_ms(500);
} //end while(1)
}
//-----------------------------------------------------
void Usart_Str_Write(char* string)
{
while (strlen(string)){
UART1_Write((char) (*string));
++string;
}
UART1_Write('\r');
UART1_Write('\n');
}
//----------------------------------------------------------------
void interrupt(){
unsigned char tmp;
if (RCIF_bit == 1) {
tmp = UART1_Read();
if(response_type==Wait_OK){
switch (gsm_state) {
case 0: {
if (tmp == 'O') { gsm_state = 1;}
break;
}
case 1: {
if (tmp == 'K') {response_rcvd = 1;}
gsm_state = 0;
break;
}
default: {
gsm_state = 0;
break;
}
} //end switch
} //end if
if(response_type==Wait_plius){
switch (gsm_state) {
case 0: {
if (tmp == '+') { gsm_state = 1;}
break;
}
case 1: {
if (tmp == 'c') { gsm_state = 2;}
break;
}
case 2: {
if (tmp == 'm') { gsm_state = 3;}
break;
}
case 3: {
if (tmp == 't') {gsm_state = 4;}
}
case 4: {
if (tmp == 'i') {LED_zalias = ~1;}//uzdega arba isjungia zalia led'a
gsm_state = 0;
}
default: {
gsm_state = 0;
break;
}
} //end switch
} //end if
}
} |
|
|
|
|
|
|
 |
|
 |
Google paieška forume |
|
|
 |
Naujos temos forume |
|
 |
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
 |
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
 |
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
 |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
 |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
 |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
 |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
 |
Must have farming mods
Farming simulator modhub,
Best farming simulator mods |
|

|
 |