Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



GSM СССР

Сообщений 31 страница 60 из 140

1

Вопрос прям наболевший за сутки, нужна передача по USB 8 бит, маленький код, дескриптор и т.п. Кто может видел с описанием на нашенском ). А то пробежался и все варианты очень жрут много памяти. Не могу найти по минимум кода и простоты передачи данных. Может я принцип не понял, объясните мне пожалуйста, там каждый раз при приёме и ответе нужно указывать принято и ждать подтверждение?).
Вообщем нужна связь с ПК по USB, софт на ПК можно написать ... интересует как можно принять и отправить 8 бит, с минимум кода в библиотеке.
Может конечно я ря тревожусь и Ва потревожу, но такая ситуация. Есть можем SIM300, контроллер atmega8, хочу сделать себе мобилу знатную и блатную (спортивную). Хватит мне памяти МК, если я экран не буду использовать, только RX/TX общение с модемом и по USB временами СМСить, врятли хватит на чтение голосом СМС.

Приложение для ознакомления:

Телефонный аппарат:
http://cs315219.vk.me/v315219419/7b9a/RdME_AOz5js.jpg
модем, микрофон, динамик:
http://cs315219.vk.me/v315219419/7b7f/7OvpN8Ot9Ps.jpg
Перемотанный в 270 Ом звонок:
http://cs315219.vk.me/v315219419/7b4f/cA7tN5S07FY.jpg
Вытравленная пробая плата, позже весь проект выложу вместе с исходником Lay 6
http://cs315219.vk.me/v315219419/7b88/0glq4LYVGEI.jpg
Девайс в начальной стадии, звонок уже работает, мини инвертор пашет ), всё как в атс 4 сек пауза / 1 сек звонок.
http://cs315219.vk.me/v315219419/7bcb/BP9UY6fZhxw.jpg

0

31

если ничего не делать - то ничего и не будет
само "просто так" ничего не появится и никто готовый код вам не даст, потому как нюансы железа и условия у всех разные (т.е. бессмысленно)

0

32

вы вначале продумайти всю логику работу, а потом только приступайте к реализации
а то известно чем заканчиваются спонтанные разработки
если не хочется морочиться с USB в МК, то может просто поставить внешнюю FT245 (параллельная, синхронная чипа с буфером - очень удобно; минус у неё только один, нужно 8-бит шина, но зато нет привязки к скорости МК (это если просто внутренний данные гонять))

0

33

Так и скажите ,что лень ( А я вам на будущее печатку выложу в Lay исходник, даже обновлю под драйвер IR4426 и всё такое.
http://cs315219.vk.me/v315219419/7bcb/BP9UY6fZhxw.jpg
Размеры уже сделаны под телефон, прошивку я напишу, как бы с UART не работал. Кстати, кто делал устрйоства по договорам? Есть у кого бланк для образца, акты всякие и вообще, что с чем едят? без работы ща, а как раз колымчик подвернулся с бюрократической заморочкой (

0

34

Пользуюсь только диптрейсом. ) И аппаратов старой конфигурации довольно большой выбор был (ранее).

0

35

RDW написал(а):

Пользуюсь только диптрейсом. ) И аппаратов старой конфигурации довольно большой выбор был (ранее).

Но только такой был массово везде, с номеронабирателем или без него, красный, серый, с кнопкой и без.
http://cs315219.vk.me/v315219419/7b9a/RdME_AOz5js.jpg

0

36

ну на предприятиях возможно - да, но дома у нас есть такой:

http://20th.su/wp-content/uploads/2013/01/IMG_0407.JPG

или такой:

http://i.tizana.net/2013/04/17/118444/118444_1366151592_2.jpg

0

37

МоСк высушил... Чувствую придётся на ассемблере вытворять нечто подобное, BASCOM не предсказуем, использование библиотек прям как подводные мины.
Вообщем начитался про регистр UDR и всё такое, покопался на форуме и в яндексе, вник в прерывание Urxc  и т.п. но блин как теперь всё это подружить с библиотекой от Nokia LCD 1110 не имею представления. даже если Disable Urxc перед библиотекой, всё равно экран не экранит.
получается проще написать самому библиотеку на асме, прерывания и общения тоже на асме, чем использовать благо Bascom и непонятую разбросанную кусками информацию на русском языке Bascom Avr.
А ещё не понял, по мимо прерывания есть ещё способ получения информации по UART через какой-то буфер?

0

38

можно всё - было бы желание и фантазия)

0

39

RDW написал(а):

можно всё - было бы желание и фантазия)

Подскажи как в переменную String забить хоть байт инфомрации из SIM 300 и при этом работать с библиотекой LCD 1110 ))) Бубен уже затёртый )

0

40

функция "INKEY" - работает с переменными сразу: Byte, Integer, Word, Long or String variable.
используя её совместно с "ISCHARWAITING", можно получать данные в строку с разной длиной контента
ещё есть "Waitkey", но она работает чуть по другому..
можно конечно грубо использовать "INPUT" (с TIMEOUT), но это совсем извращение)
в общем: читайте хелп и инет - примеров море

0

41

Проект задержался, сейчас опять возьмусь за него, всего-то софт и чуток напильника добавить.

0

42

ПОЛУЧИЛОСЬ!!!! Спасибо Руслану из г. Орёл
Вообщем шаманство привело к стабильности только с кварцем, был на 12мГц.
Вот вся шапка:

Код:
....
....
Declare Sub Getline(modem As String)

....
....

$regfile = "m8def.dat"
$crystal = 12000000
'$hwstack = 40
'$swstack = 40
'$framesize = 50
$hwstack = 16
$swstack = 64
$framesize = 32
$baud = 19200

вот так выдирались данные из буфера (накопал в инете из проектов):

Код:
Sub Getline(modem As String)
  Modem = ""
   Do

     B = Inkey()
      Select Case B
          Case 0                                            '
          Case 13
          Case 10 : If Modem <> "" Then
          Modem = "               " + Modem
          Modem = Modem + "                "
          Exit Do
          End If
          Case Else : If B > 31 Then Modem = Modem + Chr(b)
          'If Len(modem) > 30 Then Exit Do
      End Select
      Loop
End Sub

вот так запускалось выдирание из буфера:

Код:
O = Ischarwaiting()
If O = 1 Then Getline Modem

А Руслан из г.орёл дал вот это, что кстати и сдвинуло весь процесс:

Код:
первоначальная настройка скорости
таблица велечины скорости от тактовой частоты мк
1 МГц: 
0,2% отклонение: 2.400, 4.800 
1,8432 Mhz: 1,8432 МГц: 
безошибочный: 2.400, 4.800, 9.600, 14.400, 19.200, 28.800, 38.400, 57,600, 76,800, 115 200, 230400 бод 
2 Mhz: 2 МГц: 
0,2% отклонение: 2.400, 4.800, 9.600, 19.200 бод 
Правильно: 250000 бод 
3,6864 Mhz: 3,6864 МГц: 
безошибочный: 2.400, 4.800, 9.600, 14.400, 19.200, 28.800, 38.400, 57,600, 76,800, 115 200, 230400 бод 
4 Mhz: 4 МГц: 
0,2% отклонение: 2.400, 4.800, 9.600, 38.400 бод 
безошибочный: 250.000, 500.000 бод 
7,3728 Mhz: 7,3728 МГц: 
безошибочный: 2.400, 4.800, 9.600, 14.400, 19.200, 28.800, 38.400, 57,600, 76,800, 115 200, 230400 бод 
8 Mhz: 8 МГц: 
0,2% отклонение: 2.400, 4.800, 9.600, 19.200, 38.400, 76,800 бод 
Правильно: 250000, 500000, 1000000 бит 
11,0592 Mhz: 11,0592 МГц: 
безошибочный: 2.400, 4.800, 9.600, 14.400, 19.200, 28.800, 38.400, 57,600, 76,800, 115 200, 230400 бод 
14,7456 Mhz: 14,7456 МГц: 
безошибочный: 2.400, 4.800, 9.600, 14.400, 19.200, 28.800, 38.400, 57,600, 76,800, 115 200, 230400 бод 
16 Mhz: 16 МГц: 
0,1% до 0,2% отклонение: 4.800, 9.600, 14.400, 19.200, 38.400, 76,800 бод 
Правильно: 2400, 250000, 500000, 1000000 бит 
18,432 Mhz: 18,432 МГц: 
безошибочный: 2.400, 4.800, 9.600, 14.400, 19.200, 28.800, 38.400, 57,600, 76,800, 115 200, 230400 бод 
20 Mhz: 20 МГц: 
-0,2% До 0,2% отклонение: 9.600, 14.400, 19.200, 28.800, 38.400 бод 
безошибочный: 2.400, 4.800, 250.000, 500.000 бод
[26.08.2013 17:58:51] Руслан: Изменяет скорость трансляции устройств UART

BAUD = скорость

BAUD #канал , установка

где:
скорость скорость трансляции до сего момента
                 канал номер канала трансляции в программном  устройстве  типа UART,
установка число, которое определяет скорость трансляции в данном канале.

А так то модем меня не видел, то я модем. Модем у меня SIM300z выдранный из охранки Mega SX 1xx
Вот фотка )))
http://cs410225.vk.me/v410225961/a565/Wz9mnNhQ43g.jpg
Блин, вот эта собственно информация нужна была раньше. Проект доделаю, печатку выложу, инвертор для звонка наверно на драйвер переведу какой нибудь. Если хватит памяти, то будет USB и даже софт.
P:S: А да, библиотека Nokia-1100 Library.inc не работает с String больше 16ти символов, нужно указать на сайте информацию, а то у многих всё уезжает, не все допрут Text = Mid(modem , P , 16)

Отредактировано Ev3658 (2013-08-28 01:07:25)

0

43

Mrshilov написал(а):

Я переписал библиотеку для Nokia1100, если есть желание потестировать - она здесь
Теперь поддерживаются стандартные баскомовские шрифты и картинки "bgf". Подключение на выбор: по 4, 3 или 2 проводам. При этом освобождается CS и можно подключить несколько дисплеев. Здесь пример подключения двух дисплеев.
Сделана обрезка символов и картинки, вылезающих за край экрана.
Это бета-версия, поэтому - название ног нужно задавать как в примере (используются имеющиеся в компиляторе пины), конфиг не соответствует разрешению - не обращайте внимания.

огромное СПАСИБО! А проблем нет с кодировкой Русского языка и баскомоских глюков?
Столкнулся с новой проблемой, пишет, то низкое питание, AZ1085T - 3.3v 2A питает схему, но для SIM300 по документации от 3.4 - 4.5в. надо. Получается с SIM300 на 3.3в. такой эффект: то работает, то не работает.

0

44

Если у кого будет писать: +cpin: ready и нифига больше, то поставьте кондёр на >1000мКф по питанию, так раскачается в сильных нагрузках при передачи. А да, антенну можно выдрать из сломанного ноута (гнездо в самый раз и провод).
Стабилизатор собрал на LM317, на 5 вольт он по любому делает нужное напряжение но на пиках халтурит.

0

45

ОНО РАБОТАЕТ И ЗВОНИТ!!!! ББуууууАААаааААА ааа ХАХАХА

0

46

Ev3658 написал(а):

А да, антенну можно выдрать из сломанного ноута (гнездо в самый раз и провод).


Скорее только провод ) Там антенна на 2.4 гГц )) Так можно и передатчик хорошо прожарить. Не поленись, найди человеческую антенну, и может не будет писать +cpin: ready ))))

Смысл в чем- вся неизлученная антенной энергия возвращается в выходной транзистор. Есть такой параметр - "Коэффициент Стоячей Волны", сокращенно КСВ, собственно в кабеле образуются пучности тока и напряжения, с периодом, равным четверти  длины волны , умноженной на коэфф. укорочения кабеля, и если выходной каскад попадет в пучность напряжения на пике мощности- ожидай пробой.

Отредактировано Skull (2013-08-29 19:27:35)

0

47

Я тоже слыхал об этом, может там разомкнуть цепь?

У меня моск высох, ну почему вот так не работает?

Код:
If Ischarwaiting() = 1 And Buff = 0 Then
   Buff = 1
   Buffer = ""
End If
If Buff = 1 Then
   P = Inkey()
   Buffer = Buffer + Chr(p)
   If P = 10 Then
      Buff = 0
      Modem = Buffer
   End If
End If

Именно так не мешает и не тормозит программу. Жопа полная, другие методы либо тормозят, либо слишком быстрые, а нужен метод не тормозящий программу и в любом случае завершающий опрос буфера, может я нетак представление имею? Вообще буферизация UART в Atmega8 аппаратная?

Вот такое нахальство тоже не катит:

Код:
   P = Inkey()
   If P = 10 Then
         Modem = Buffer
         Buffer = ""
      Else
         If P > 31 Then Buffer = Buffer + Chr(p)
   End If

Отредактировано Ev3658 (2013-08-30 02:53:57)

0

48

можно прерыванием асинхронно принимать/заполнять буфер, а при заполнении его читать в основном теле программы

вообще у вас изначально какой-то странный алгоритм приёма/сбора и обработки информации от жсм модуля

0

49

RDW написал(а):

можно прерыванием асинхронно принимать/заполнять буфер, а при заполнении его читать в основном теле программы

вообще у вас изначально какой-то странный алгоритм приёма/сбора и обработки информации от жсм модуля

Эксперементирую. Всё-же какае-то нестабильность проявляется. Может кто подскажет как асинхронно/синхронно, требования какие нибудь и т.п. До 4 часов ночи копался, жена злая, моск высушен, глаза смотрят на AVR Studio...
Я так понял, что Ischarwaiting() = 1 становится тогда, когда только стали поступать данные в буфер, а так как туда залетает куча информации, то его нужно быстро очистить, но не настолько быстро, нужно, чтоб он успел забить строку и при этом попасть в интервал до поступления следующей строки.
Эта очень нестабильно как-то, а метод популярный в интернет подвисает, хоть и сделали выход по нулю, всё равно не даёт стабильности.
Вообщем то в начале иссчезнет буква, то наберутся буквы со всех команд и даже эроглифы появляются, причём 100% модем даёт нормальные данные, но inkey возвращает их нестабильно в зависимости от кода опроса.

0

50

Чувствую нужно на асме писать (стр.81), иначе получится телефон с возможностью глюкнуть (.

0

51

Я использовал в свое время буфер вот так.

Код:
'Конфигурация RS232
 Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
 Config SERIALIN = Buffered , Size = 8 (Размер подставляем свой.)
Затем в цикле проверяем:
If Ischarwaiting() = 1 Then            'Если в буфере есть информация
 For I = 1 To 8                              'прочтем ее (количество циклов и размер массива, какой нужен)
   D(I) = Inkey()
   Waitms 1
 Next
Clear SerialIn                               'Очистим буфер для следующего приема

'Тут можно что нибудь сделать с принятыми данными
End If

+1

52

Ev3658 написал(а):

Я тоже слыхал об этом, может там разомкнуть цепь?


Это, простите ,КАК ? ))

0

53

Skull написал(а):

Это, простите ,КАК ? ))

Разорвать короткозамкнутую цепь и поменять местами... у всех по разному, да и диапазон разный по частоте.
http://s5.uploads.ru/t/IJ3VC.jpg

0

54

sva-don написал(а):

Я использовал в свое время буфер вот так.

Раньше и ща с таким конфигом вообще нет ничего в буфере.

Код:
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Serialin = Buffered , Size = 255 (и неважно какая цифра)

А по умолчанию он 1 байт сохраняет? В DATASHEET конкретно инфомрацию по размеру буфера не накопал (

0

55

у данного приёма с буфером есть два недостатка:

1. работает только с аппаратным портом
2. сколько не пытался использовать этот буфер - на выходе непонятки, ничего не работало. По логике, активация этой функции должна приводить к тому, что бэйсик по своим средствам (прерывание или ещё как) читает независимо данные из порта и заносит их в SRAM, далее нам нужно (когда удобно) их от туда обрабатывать. В реальности ничего подобного не получалось.

В итоге забил на него и так есть куча алгоритмов и вариантов под любые задачи и реализации.

0

56

Под итожу:
Канифоль на плате мешает RX-TX передачи и кварцу тоже. Чистите спиртом.
---Обязательное использование в МК кварца, на частоте 16 000 000 Гц - baud 14400, на 14745600 -19200, 12мГц - 19200
---Лучшая стабильность с 2 стоповыми битами: Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 2 , Databits = 8 , Clockpol = 0
---Модем даёт данные не стабильно, бывают паузы в 25тыс. тактов * ? (примерно) и более до получения конца строки.

---Часто исиспользуемый метод:

Код:
....
O = Ischarwaiting()
If O = 1 Then Getline Modem
.....

Sub Getline(modem As String)
  Modem = ""
   Do
     B = Inkey()
      Select Case B
          Case 0                                            
          Case 13
          Case 10 : If Modem <> "" Then  Exit Do
          Case Else : If B > 31 Then Modem = Modem + Chr(b)
      End Select
      Loop
End Sub

Но он подвисает, программу может задержать очень сильно, выход по нулю не даёт результатов.

Можно сделать с таймером, нестабильность есть, но подвисания не беспокоят:
Sub Getline(s As String)

Код:
S = ""
  Tbuf = 0
  Do
    B = Inkey()
    Tbuf = Tbuf + 1
    Select Case B
       Case 10 : If S <> "" Then Exit Do                    'выход по принятии 10 при условии, что в строке есть символы
       Case Else
         If B > 32 Then
            S = S + Chr(b):                                 'составляем строку
         End If
    End Select

   If Tbuf > 25000 Then Exit Do
Loop
End Sub

Хотя неадекватные методы тоже работают, тут главное после получения символа сразу начать забор данных из буфера, так как вообще не ясно как в Bascom всё это работает, но уверен, что 1-2 символа подряд там есть и после нули-бывает 700 и более, а после продолжение данных и до 10го кода. Если пропустить интервал, к примеру сторонним кодом, то буквы съедаются.
в самом теле прогарммы без sub и т.п.

Код:
Tbuf = 0
B = Inkey()
If B <> 0 Then
Do
If B = 0 Then Tbuf = Tbuf + 1
If Tbuf > 25000 Then Exit Do
If B = 10 Then
   Modem = S
   S = ""
   Exit Do
End If
If B <> 0 And B <> 10 Then
      If B > 32  Then  Modem = Modem + Chr(b)
   End If
B = Inkey()
Exit Do
Loop
End If

Вообщем к примеру если я буду в режиме набора номера и при этом кто-то будет звонить, то мне придётся всё равно опрашивать можем, разумеется я могу запретить в момент набора номера, но при следующей цифре может подвиснуть на опросе модема. Если вообще запретить, это не правильно, правильно функции телефона не отключать и если трубка снята, то надо подать сигнал занято (ATH) и т.п.

Отредактировано Ev3658 (2013-09-02 08:56:37)

0

57

УРААААА!!!!! Я С АЛХИМИЧИЛ ФОРМУЛУ ПРИЁМА С SIM 300 БЕЗ ПОДВИСАНИЯ !!!!!
Держите и владейте моим детищем, убившее бессоные ночи )))) (ну немножко сплагиатил)

Код:
Sim300:

Tbuf = 0
Do
   B = Inkey()
   Tbuf = Tbuf + 1
   Select Case B
        Case 10 : If S <> "" Then
                     Modem = S
                     S = ""
                     Exit Do
                     End If
                  Case Else
         If B > 32 Then
            Tbuf = 0
            S = S + Chr(b):                                
         End If
    End Select
    If Tbuf > 25000 Then
           Exit Do
            End If

   Loop
return

и них переменные:

Код:
Dim B As Byte
Dim Tbuf As Integer                                       
Dim Modem As String * 16
Dim S As String * 16

Подпрограмму из программы вызываю просто:

Код:
b = Ischarwaiting()
If b= 1  Then gosub sim300

Можно сказать как часы, tbuff если сработал, то после допишет, главное программа не прерывается на много секунд.
А да, шапка для новичков:

Код:
$regfile = "m8def.dat" 
$crystal = 14745600 'работает с кварцом и 12 и 16, меняйте baud 14400 или 19200
$hwstack = 16
$swstack = 64
$framesize = 32
$baud = 19200
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 2 , Databits = 8 , Clockpol = 0

Как то всё наоборот понаписал )

Отредактировано Ev3658 (2013-09-02 10:51:01)

0

58

ой, помню я тоже как-то радовался очень одному мной "изобретенному", быстрому и простому алгоритму приема данных с порта, всё было супер, пока не собрал второе устройство, где ничего вообще не работало
тут главное - повторяемость

и вообще, с баскомом надо быть аккуратнее, он очень тормозной, а данные надо принемать без задержек

0

59

Да всё нормально!!! Проверил на 2х разным МК с разными кварцами. Оказывается без Ischarwaiting() Вообще круть!

Вот так вот:

Код:
.....
Goto programma


Sim300:

Tbuf = 0
Do

   Tbuf = Tbuf + 1
   Select Case B
       'Case 0 :
       'Case 13
       Case 10 : If S <> "" Then
                     Modem = S
                     S = ""
                     Do
                        B = Inkey()
                     Loop Until B = 0
                     Exit Do
                     End If
                  Case Else
         If B > 32 Then
            Tbuf = 0
            S = S + Chr(b) :
         End If
    End Select
    If Tbuf > 25000 Then
           Exit Do
            End If
  B = Inkey()
   Loop
return

programma:

do
B = Inkey()
If B > 0  Then Gosub Sim300  
...

loop

Вообще не представляю как поток информации наладить по TCP IP стеку, метод в баскоме нереален, полезу я пожалуй в ассемблер, иначе никак.

Отредактировано Ev3658 (2013-09-02 16:49:53)

0

60

RDW написал(а):

у данного приёма с буфером есть два недостатка:

1. работает только с аппаратным портом
2. сколько не пытался использовать этот буфер - на выходе непонятки, ничего не работало. По логике, активация этой функции должна приводить к тому, что бэйсик по своим средствам (прерывание или ещё как) читает независимо данные из порта и заносит их в SRAM, далее нам нужно (когда удобно) их от туда обрабатывать. В реальности ничего подобного не получалось.

В итоге забил на него и так есть куча алгоритмов и вариантов под любые задачи и реализации.

Это вы зря. Все прекрасно работает!
Испытано неоднократно.
Создаются 4 переменные с которыми можно работать. Вот фрагмент отчета.

Код:
Report       : main
Date         : 03-01-2013
Time         : 16:02:12

Compiler     : BASCOM-AVR LIBRARY V 2.0.7.6
Processor    : M128

FLASH USED   :  25  %
BAUD         : 19200 Baud
XTAL         : 1843200 Hz
BAUD error   : 0.%

_RS232INBUF0        Byte (8)       0101          257       'Сам буфер
_RS_HEAD_PTR0     Byte            0109          265       'Адрес начала
_RS_TAIL_PTR0      Byte            010A          266       'Адрес конца  
_RS_BUFCOUNTR0  Byte            010B          267       'Количество принятых байт

Отредактировано sva-don (2013-09-05 09:20:07)

0