| nuclear__ 
 
 
 Joined: 24 Jan 2015
 Posts: 63
 
 
 
			    
 
 | 
			
				| UART slow speed |  
				|  Posted: Tue Feb 09, 2021 11:43 am |   |  
				| 
 |  
				| After making a big program that uses rs232, I found out that something is wrong with rs232. I realised that when i tried to send more bytes than my buffer is. I will try to print only things that matters since its big. 
 I split my payload into 230 bytes pieces, and i use
 dbg_printf("\r\nbuffer1 : %u", tx_buffer_bytes());
 between pieces to see how quickly buffer draws. 1 byte every 100ms!
 
 
  	  | Code: |  	  | #include "18F47J53.h" #use delay(internal=8MHz, clock=48MHz, restart_wdt, USB_FULL, act=USB)
 #pin_select U2TX = PIN_D4
 #pin_select U2RX = PIN_D5
 #define USE_TX_ISR
 #use rs232(UART2,baud=57600,RECEIVE_BUFFER=250, TRANSMIT_BUFFER=256,parity=N,bits=8,xmit=PIN_D4,rcv=PIN_D5,stream=GSM,TXISR,ERRORS) //xmit=PIN_D4,rcv=PIN_D5,
 
 void main();
 setup_adc_ports(sAN6|sAN5|sAN4|sAN2);
 setup_adc(ADC_CLOCK_INTERNAL|ADC_TAD_MUL_0);
 setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);  // 1 sec
 setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);      //262 ms overflow
 setup_timer_2(T2_DIV_BY_16,61,5);      //1,0 ms overflow, 5 ms interrupt
 setup_timer_3(T3_INTERNAL | T3_DIV_BY_8);
 enable_interrupts(int_timer0);
 enable_interrupts(int_timer1);
 enable_interrupts(int_timer2);
 disable_interrupts(int_timer3);
 enable_interrupts(INT_EXT1);
 enable_interrupts(INT_RDA);
 enable_interrupts(GLOBAL);
 
 
 | 
 
 I have no problem receiving ( by manually checking kbhit() ). The problem is below.
 
  	  | Code: |  	  | dbg_printf("\r\nbuffer0 : %u",tx_buffer_bytes());
 do{
 if ((log_send)<(total_logs))
 {
 memset(body,0,250);
 read_log(log_send); // it creates body
 fputs(body,GSM);
 log_send++;
 dbg_printf("\r\nbuffer1 : %u",tx_buffer_bytes());
 delay_ms(1000);
 dbg_printf("\r\nbuffer2 : %u",tx_buffer_bytes());
 delay_ms(500);
 dbg_printf("\r\nbuffer3 : %u",tx_buffer_bytes());
 delay_ms(100);
 dbg_printf("\r\nbuffer4 : %u",tx_buffer_bytes());
 }
 }  while (log_que==1);
 
 | 
 
 This is what i get in my usb output:
 
 buffer0 : 1
 body part1 ..........
 buffer1 : 226
 buffer2 : 217
 buffer3 : 212
 buffer4 : 209
 next body part.......
 buffer1 : 248
 buffer2 : 239
 buffer3 : 234
 buffer4 : 231
 next body part.......
 buffer1 : 15
 buffer2 : 6
 buffer3 : 1
 buffer4 : 0
 
 So in this example i lost part 2.
 
 I've read many examples and approaches about uart but what is the problem here?
 |  |