olegue писал(а):это какая-то дичь и до меня такой фигней никто не занимался.
это нормально))
ты можешь для начала всё отключить (всякие таймеры и ADC и т.д.) и просто для начала протестировать свой модуль ?
а потом уже думать что делать... ускорять... замедлять.. .и т.д.
))
чистый голый тест модуля.))
тест 1.
проверка максимальной скорости передачи пакетов модуля sim800.
//Код:
// берём две переменные.
unsigned int x = 0; // x - счёт
unsigned int st_pak = 0; // st_pak - счётчик пакетов
//отправляем в бесконечном цикле пакеты... на максимальной скорости))
while(true)
{
//передача модулю Gsm 1024 байт с номером пакета st_pak
//когда в буфере модуля накопится 1024 байт модуль автоматом их передаст по сети (SendSz:1024)
for (x=0; x<1024; x ++)
{
myGsm.write(st_pak); // st_pak - счётчик пакетов
};
// st_pak - счётчик пакетов
st_pak ++;
// st_pak - счётчик пакетов MAX = 255
if (st_pak == 255) {st_pak = 0;};
};
//Код END
в анализаторе трафика мы увидим пакеты... их количество... время между пакетами... и т.д.
в яве все пакеты может не увидим... ява принимает максимум до 5000 пак/c.... зависит от компа...
зато в анализаторе мы увидим все пакеты)) без исключения))
тест 2.
проверка реальной скорости передачи пакетов модуля sim800.
//Код:
// берём две переменные.
unsigned int x = 0; // x - счёт
unsigned int st_pak = 0; // st_pak - счётчик пакетов
//отправляем в бесконечном цикле пакеты... на реальной скорости))
while(true)
{
//передача модулю Gsm 1024 байт с номером пакета st_pak
//когда в буфере модуля накопится 1024 байт модуль автоматом их передаст по сети (SendSz:1024)
for (x=0; x<1024; x ++)
{
myGsm.write(st_pak); // st_pak - счётчик пакетов
};
//после передачи пакета ждём 50 мс перед отправкой следующего пакета. (Rxtimer:50)
delay_ms(50);
// st_pak - счётчик пакетов
st_pak ++;
// st_pak - счётчик пакетов MAX = 255
if (st_pak == 255) {st_pak = 0;};
};
//Код END
в яве мы увидим все пакеты... по порядку...
и в анализаторе трафика мы тоже увидим пакеты... по порядку...
пакет 0.
000000000000000000000000000..........
пакет 1.
111111111111111111111111111..........
пакет 2.
2222222222222222222222222222......
пакет 3.
33333333333333333333333333333....
и т.д.
а обязательно устанавливать задержку delay_ms(50); ?
а что будет есть меньше или больше ? 10...100 ?
и т.д.
<<Таймер Rx> Интервал времени (мс) для ожидания повторного вывода данных последовательным портом
. Значение по умолчанию: 50 мс
а почему у нас в настройках стоит 50 мс ? мы же можем поставить 20 мс
(Rxtimer:20-1000)
и т.д.
после того как мы будем знать как работает модуль... можно думать что делать с ним дальше))
а мой МК (читай ардуина) фигарит 10 Мбит/c.)) 14.000 пак/c.
на самом деле мой МК (читай ардуина) фигарит 18.000 пак/c... но приходится ограничивать... потому что мой Wi-Fi роутер за моим МК (читай ардуина) не поспевает !
мой МК (читай ардуина) смог обогнать мой Wi-Fi роутер !))
а у твоего модуля какая скорость ?
Добавлено after 1 hour 29 minutes 29 seconds:
olegue писал(а):до этого я делал все что бы ускорить отправку, счас попробую ее замедлить. Это хороший план!
а может лучше написать нормальный код ? ))
где твой код...
TCCR2B = _BV(CS21); // Timer2 Clock Prescaler to :
TCCR2B = _BV(CS20); // Timer2 Clock Prescaler to : 32
TCCR2A = _BV(WGM21); // Interupt frequency = 16MHz / (32 x 125 + 1) = 4000Hz
OCR2A = 125; // Compare Match register set to 125 Перешл на 4кгц
допустим)) 4кгц
ISR(TIMER2_COMPA_vect) {
//ADMUX = 0x60; // set ADC to read pin A0, ADLAR to 1 (left adjust)
sbi(ADCSRA, ADSC); // start ADC sample
while (bit_is_set(ADCSRA, ADSC)); // wait until ADSC bit goes low = new sample ready
myGsm.write(ADCH);
}
не правильно.
ISR(TIMER2_COMPA_vect) {
ADMUX = 0x61; // set ADC to read pin A1, ADLAR to 1 (left adjust)
sbi(ADCSRA, ADSC); // start ADC sample
while (bit_is_set(ADCSRA, ADSC)); // wait until ADSC bit goes low = new sample ready
Serial.println(ADCH);
recByteCount++; // increment sample counter
bufByteCount++;
if (bufByteCount == 128 && bufWrite == 0) {
bufByteCount = 0;
bufWrite = 1;
} else if (bufByteCount == 128 & bufWrite == 1) {
bufByteCount = 0;
bufWrite = 0;
}
if (bufWrite == 0) {
buf00[bufByteCount] = ADCH;
}
if (bufWrite == 1) {
buf01[bufByteCount] = ADCH;
}
опять не правильно.
if (recByteCount % 256 == 128 ) //&& recPressed == 1)
{
//rec.write(buf00, 128); // save buf01 to card
Serial.write(buf00, 128);
recByteSaved += 128;
}
if (recByteCount % 256 == 0)// && recPressed == 1)
{
//rec.write(buf01, 128); // save buf02 to card
Serial.write(buf01, 128);
recByteSaved += 128;
}
// }
опять не правильно.
-----------------------------------
1.
пишем буфер 0.
if (bufWrite == 0) {
buf00[bufByteCount] = ADCH;
}
2.
//када буфер 0 заполнится передаём буфер модулю.
myGsm.write(buf00, 512);
3.
пишем буфер 1.
if (bufWrite == 1) {
buf01[bufByteCount] = ADCH;
}
4.
//када буфер 1 заполнится передаём буфер модулю.
myGsm.write(buf01, 512);
5.
переходим к пункту 1.
------------------------------------
уже лучше))
осталось посчитать тайминги...
выше писали что нельзя передавать модулю буфер чаще чем через 50 мс.
и тут куча вопросов... аж 3 штуки))
-а за сколько у нас запишется буфер 0 и 1 ?
-а за сколько мы передадим модулю буфер по сериалу ?
-а за сколько модуль передаст буфер по сети ?
ответив на эти вопросы мы узнаем... будет это работать или нет))

-а за сколько у нас запишется буфер 0 и 1 ?
таймер пишет 4000 байт в секунду.
буфер 512 байт запишется за 512 / 4000 = 0,128 с или 128 мс.
у нас есть вагон времени !))
-а за сколько мы передадим модулю буфер по сериалу ?
сериал 115200 байт/с.
с учётом накладных расходов... ~102400 байт/с.
буфер 512 байт мы передадим модулю за 512 / 102400 = 0,005 с или 5 мс.
у нас есть вагон времени !))
-а за сколько модуль передаст буфер по сети ?
х.з. )) зависит от скорости сети... GPRS...
ну допустим те же ~102400 байт/с.
буфер 512 байт модуль передаст по сети за 512 / 102400 = 0,005 с или 5 мс.
у нас есть вагон времени !))
итого:
128 мс. запись буфера.
из них:
5 мс. передача по сериалу.
5 мс. передача по сети.
итого:
128 мс. - 5 мс. - 5 мс. = 118 мс. у нас осталось в запасе свободного времени)) можем ещё что-нибудь сделать))
сбегать заварить чай))
