| 
	
	|  |  |  
	
		| View previous topic :: View next topic |  
		| Author | Message |  
		| syide 
 
 
 Joined: 10 Nov 2008
 Posts: 16
 Location: Malaysia
 
 
			      
 
 | 
			
				| Want to get the response from modem |  
				|  Posted: Wed Mar 11, 2009 1:18 pm |   |  
				| 
 |  
				| Hello, 
 Can everyone take a look to this code. I want to get the response from modem. Like when I send AT, the modem will return "ok". Then send it to hyperterminal.
 
  	  | Code: |  	  | #include <18F4620.h>
 #include <string.h>
 #use delay(clock=20000000)
 #fuses HS, NOWDT, NOLVP, NODEBUG, MCLR
 #use rs232(baud=115200, xmit=PIN_C6, rcv=PIN_C7,ERRORS,bits=8,stream=GPRS)
 #use rs232(BAUD=9600,parity=N,XMIT=PIN_C5,ERRORS,bits=8,stream=PC)
 
 #ifndef NULL
 #define NULL      0
 #endif
 
 const int cr=0x0D; // PIC press ENTER
 
 
 void main()
 {
 char buf[25];
 unsigned int8 i;
 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
 setup_adc_ports(NO_ANALOGS);
 setup_adc(ADC_OFF);
 setup_spi(FALSE);
 setup_wdt(WDT_OFF);
 
 
 /***start test sequence***/
 while (true)
 {
 delay_ms (1000);
 fprintf(PC,"\r\n***Program started***\n");
 delay_ms (1000);
 fprintf(GPRS,"AT");
 fputc (cr, GPRS);
 delay_ms (1000);
 
 for (i= 0; i <= 25; i++){
 buf[i] = fgetc(GPRS);                   //get the modem respond
 fprintf(PC,"%C",buf[i]);}
 
 
 }
 
 }
 | 
 |  |  
		|  |  
		| Ttelmah Guest
 
 
 
 
 
 
 
			
			
			
			
			
			
			
			
			
 
 | 
			
				|  |  
				|  Posted: Wed Mar 11, 2009 3:34 pm |   |  
				| 
 |  
				| First, if the modem starts to respond, before one second has passed, the response will at least in part, be lost. Second, the code will then be stuck in the 'for' loop, till 26 characters are received. If less than this arrive, it'll sit here for ever...
 
 Best Wishes
 |  |  
		|  |  
		| syide 
 
 
 Joined: 10 Nov 2008
 Posts: 16
 Location: Malaysia
 
 
			      
 
 | 
			
				|  |  
				|  Posted: Wed Mar 11, 2009 10:40 pm |   |  
				| 
 |  
				|  	  | Quote: |  	  | the code will then be stuck in the 'for' loop, till 26 characters are received | 
 
 How to solve this problem? is it by using kbhit()?
 |  |  
		|  |  
		| arunb 
 
 
 Joined: 08 Sep 2003
 Posts: 492
 Location: India
 
 
			      
 
 | 
			
				| RE |  
				|  Posted: Thu Mar 12, 2009 12:22 am |   |  
				| 
 |  
				| Use the RDA interrupt, this captures whatever comes to the port, getc() will retrieve the data, you probably need to use an array instead of c. 
  	  | Code: |  	  | #int_rda
 void modem_cap()
 {
 char c;
 c=getc();
 }
 
 | 
 |  |  
		|  |  
		| syide 
 
 
 Joined: 10 Nov 2008
 Posts: 16
 Location: Malaysia
 
 
			      
 
 | 
			
				|  |  
				|  Posted: Sat Mar 14, 2009 1:35 am |   |  
				| 
 |  
				| I still cannot get the response AT with this code.   
 Can someone show the way???
 
 
 
  	  | Code: |  	  | #include <18F4620.h> #fuses HS, NOWDT, NOLVP, NODEBUG, MCLR
 #use delay(clock=20000000)
 #use rs232(baud=115200, xmit=PIN_C6, rcv=PIN_C7,ERRORS,bits=8,stream=GPRS)
 #use rs232(BAUD=9600,parity=N,XMIT=PIN_C5,ERRORS,bits=8,stream=PC)
 
 const int cr=0x0D; // PIC press ENTER
 
 #define BUFFER_SIZE 32
 BYTE buffer[BUFFER_SIZE];
 BYTE next_in = 0;
 BYTE next_out = 0;
 
 
 #int_rda
 void serial_isr() {
 int t;
 
 // this blinks a LED :
 static int1 b;
 if (b)
 output_high (PIN_C0);
 
 else
 output_low (PIN_C0);
 b = ! b;
 
 buffer[next_in]=getc();
 t=next_in;
 next_in=(next_in+1) % BUFFER_SIZE;
 if(next_in==next_out)
 next_in=t;           // Buffer full !!
 }
 
 #define bkbhit (next_in!=next_out)
 
 BYTE bgetc() {
 BYTE c;
 
 while(!bkbhit) ;
 c=buffer[next_out];
 next_out=(next_out+1) % BUFFER_SIZE;
 return(c);
 }
 
 
 
 void main() {
 
 char c;
 enable_interrupts(global);
 enable_interrupts(int_rda);
 
 fprintf(PC,"\r\n\Running...\r\n");
 
 fprintf(GPRS,"AT");
 fputc (cr, GPRS);
 delay_ms(2000);
 // The program will delay for 10 seconds and then display
 // any data that came in during the 10 second delay
 
 do {
 delay_ms(10000);
 while(bkbhit){
 c=bgetc();
 
 fputc(c,GPRS);
 fputc(c,PC);
 }
 } while (TRUE);
 }
 | 
 |  |  
		|  |  
		|  |  
  
	| 
 
 | You cannot post new topics in this forum You cannot reply to topics in this forum
 You cannot edit your posts in this forum
 You cannot delete your posts in this forum
 You cannot vote in polls in this forum
 
 |  
 Powered by phpBB © 2001, 2005 phpBB Group
 
 |