реклама на сайте
подробности

 
 
> Rc5 В Bascom-8051
M@T_F@Q
сообщение Dec 5 2007, 21:16
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 25-01-07
Из: Узбекистан
Пользователь №: 24 765



Как работать с протоколов для 52 процессора??? Почемуто три раза реагирует программа, потом не реагирует на мой пульт! Подскажите плиз.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
msalov
сообщение Dec 6 2007, 07:00
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(M@T_F@Q @ Dec 5 2007, 23:16) *
Как работать с протоколов для 52 процессора??? Почемуто три раза реагирует программа, потом не реагирует на мой пульт! Подскажите плиз.

Если не секрет, то как реализованы аппаратная часть и программная часть работы?
Go to the top of the page
 
+Quote Post
M@T_F@Q
сообщение Dec 7 2007, 13:08
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 25-01-07
Из: Узбекистан
Пользователь №: 24 765



никакого секрета нету, RC5 подключен как в даташите на Р3.3 (INT1)
а на порт P1 подключено 8 светодиодов, нажали цифру 1, загорелся первый светодиод, нажали цифру 5 - пятый загорелся. И так до восьми. Но почемуто программа работает всего три нажатия, потом виснет и всё.
Go to the top of the page
 
+Quote Post
r_dot
сообщение Dec 8 2007, 04:35
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 237
Регистрация: 14-08-07
Из: Москва
Пользователь №: 29 791



Цитата(M@T_F@Q @ Dec 6 2007, 00:16) *
...Почемуто три раза реагирует программа, потом не реагирует ...


Ошибка в программе.
Если выложишь, можно найти.
Go to the top of the page
 
+Quote Post
M@T_F@Q
сообщение Dec 8 2007, 10:40
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 25-01-07
Из: Узбекистан
Пользователь №: 24 765



Цитата(r_dot @ Dec 8 2007, 09:35) *
Ошибка в программе.
Если выложишь, можно найти.


Это уже почти доделаннная программа, таймер(Минутный, без секунд и часов) с управлением от пульта RC5. Проблема такая: При нажатии цифру 4 (изменение минут прибавлением на единицу), может сам по себе сбросится, или не отреагировать никак.


$large
Baud = 9600 ' Скорость обмена
$crystal = 11059200 ' Частота кварца
'---------------------------------------------------------------------------
Config Scl = P3.6 ' I2C Clock
Config Sda = P3.7 ' I2C Data
'---------------------------------------------------------------------------
Sqw Alias P3.0 ' Square Pulse Out
Hour10 Alias P1.7 ' 10 Hour
'------------------------------------------------------------------------
Dim Command As Byte , Subaddress As Byte
Dim Reg_sec As Byte ' Секунды
Dim Reg_min As Byte ' Минуты
Dim Reg_hour As Byte ' Часы
Dim Tempb As Byte
Dim Temp1b As Byte
Dim Temp2b As Byte
Dim Temp3b As Byte
Dim Setup As Byte
Setup = 3
'---------------------------------------------------------------------------
Const Segpat0 = &B00111111 ' 0 ****A***
Const Segpat1 = &B00000110 ' 1 * *
Const Segpat2 = &B01011011 ' 2 F B
Const Segpat3 = &B01001111 ' 3 * *
Const Segpat4 = &B01100110 ' 4 ****G***
Const Segpat5 = &B01101101 ' 5 * *
Const Segpat6 = &B01111101 ' 6 E C
Const Segpat7 = &B00100111 ' 7 * *
Const Segpat8 = &B01111111 ' 8 ****D***
Const Segpat9 = &B01101111 ' 9
Const Segpblk = &B00000000 ' A BLANK
'---------------------------------------------------------------------------
Const Ds1307w = &HD0 ' Байт записи
Const Ds1307r = &HD1 ' Байт чтения
'---------------------------------------------------------------------------
Gosub Clock_init
'---------------------------------------------------------------------------
Reset Tcon.0
On Int0 Receiverc5
Enable Int0
Enable Interrupts
'***************Основная часть программы**********************
Do '
Disable Int0 ' Запретить прерывание

Select Case Setup
Case 1 :
Gosub Read_ds1307 'Чтение данных с часов
Enable Int0
Gosub Displaysub 'Вывод на табло
Tempb = Reg_sec And &B01110000 ' Точки
If Sqw = 1 Then
Set Colon_d1
Set Colon_d2
Else
Reset Colon_d1
Reset Colon_d2
End If
Disable Int0
'
'//////////////////////////////////////////////////////////////////////////////
Case 2:
Tempb = Reg_min And &B01110000 ' Получаем десятки минут!!!
Reg_min = Reg_min And &B00001111 ' Получаем единицы минут
Reg_min = Reg_min + 1
If Reg_min > 9 Then
Reg_min = 0
Tempb = Tempb + &B00010000
If Tempb > &B01010000 Then
Tempb = 0
End If
End If
'
Reg_min = Reg_min Or Tempb
'
I2cstart ' Generate start
I2cwbyte Ds1307w ' Slave adsress
I2cwbyte &H00 ' Address of Control REG
I2cwbyte &H00 ' Address of Control REG
I2cwbyte Reg_min ' Clear Second
I2cstop
Setup = 1
'-*/-*/-*/-*/-*/-*/-*/-*/-/-*/-*/-*/-*/-*/-*/-*/-*/-*/-*/-*/-*/-*/
Case 3:
Reg_min = &B00000000 'Сбросить минуты на 0
'
I2cstart ' Generate start
I2cwbyte Ds1307w ' Slave adsress
I2cwbyte &H00 ' Address of Control REG
I2cwbyte &H00 ' Address of Control REG
I2cwbyte Reg_min ' Clear Second
I2cstop
Setup = 0
Gosub Displaysub
End Select
'=--=-=-=-=---=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=
Enable Int0 '
For Tempb = 0 To 25
nop
Next Tempb
'
Loop '
'*************************************************************'
'---------------------------------------------------------------------------
Read_ds1307: ' Чтение времени
'
I2cstart ' Старт передачи
I2cwbyte Ds1307w ' Передаем байт записи
I2cwbyte &H00 ' Адресс = 0
I2cstop ' Стоп передачи
'
I2cstart ' Старт передачи
I2cwbyte Ds1307r ' Передаем байт чтения
I2crbyte Reg_sec , Ack ' Принимаем 8 байт
I2crbyte Reg_min , Ack ' Принимаем 8 байт
I2crbyte Reg_hour , Nack ' Принимаем 9 байт
I2cstop ' Стоп передачи
'
Return
'---------------------------------------------------------------------------
Displaysub:
Tempb = Reg_min ' Minutes
Gosub Patcon
Temp1b.7 = P2.7
P2 = Temp1b
Tempb = Reg_min
Shift Tempb , Right , 4
Gosub Patcon
Temp1b.7 = P0.7
P0 = Temp1b
'
Return
'---------------------------------------------------------------------------
Patcon:
Tempb = Tempb And &H0F
Select Case Tempb
Case 0 : Temp1b = Segpat0
Case 1 : Temp1b = Segpat1
Case 2 : Temp1b = Segpat2
Case 3 : Temp1b = Segpat3
Case 4 : Temp1b = Segpat4
Case 5 : Temp1b = Segpat5
Case 6 : Temp1b = Segpat6
Case 7 : Temp1b = Segpat7
Case 8 : Temp1b = Segpat8
Case 9 : Temp1b = Segpat9
Case Else
End Select
'
Return
'---------------------------------------------------------------------------
Clock_init: ' DS1307 Initialize
'
Tempb = Reg_sec And &B01111111 ' Oscillator Enable
I2cstart ' Generate start
I2cwbyte Ds1307w ' Slave adsress
I2cwbyte &H00 ' Address of Seconds REG
I2cwbyte Tempb '
I2cstop ' Generate Stop
'
Tempb = Reg_hour And &B10111111 ' 24-Hour Mode
I2cstart ' Generate start
I2cwbyte Ds1307w ' Slave adsress
I2cwbyte &H02 ' Address of Seconds REG
I2cwbyte Tempb '
I2cstop ' Generate Stop
'
Tempb = &B10010000 ' 1 Hz SQW Output
I2cstart ' Generate start
I2cwbyte Ds1307w ' Slave adsress
I2cwbyte &H07 ' Address of Control REG
I2cwbyte Tempb '
I2cstop ' Generate Stop
'
Return
'---------------------------------------------------------------------------
Receiverc5:
Getrc5(subaddress , Command)
Subaddress = Subaddress And &B00011111 '
If Subaddress = 0 Then
If Command > 10 Then Command = 0 '
'
Select Case Command
Case 1 :
Command = 0
Setup = 1
Case 2 :
Command = 0
Setup =2
Case 3 :
Command = 0
Setup =3
End Select
End If
Return
'---------------------------------------------------------------------------
Go to the top of the page
 
+Quote Post
r_dot
сообщение Dec 8 2007, 14:49
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 237
Регистрация: 14-08-07
Из: Москва
Пользователь №: 29 791



Цитата
... RC5 подключен как в даташите на Р3.3 (INT1)...

но в программе:

On Int0 Receiverc5


Опечатка?

В конце п/п Receiverc5: один End If. Это нормально?

Сообщение отредактировал r_dot - Dec 8 2007, 14:56
Go to the top of the page
 
+Quote Post
M@T_F@Q
сообщение Dec 8 2007, 14:53
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 25-01-07
Из: Узбекистан
Пользователь №: 24 765



Цитата(r_dot @ Dec 8 2007, 19:49) *
Опечатка?

Хммм, во всех примерах подключают на P3.2 , но на INT1 не пашет!!! Токо INT0!!! Не знаю почему!!!
Go to the top of the page
 
+Quote Post
M@T_F@Q
сообщение Dec 9 2007, 07:58
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 25-01-07
Из: Узбекистан
Пользователь №: 24 765



Цитата(r_dot @ Dec 8 2007, 19:49) *
Опечатка?

В конце п/п Receiverc5: один End If. Это нормально?

Receiverc5:
Getrc5(subaddress , Command)
Subaddress = Subaddress And &B00011111 '
If Subaddress = 0 Then
If Command > 10 Then Command = 0 '
'
Select Case Command
Case 1 :
Command = 0
Setup = 1
Case 2 :
Command = 0
Setup =2
Case 3 :
Command = 0
Setup =3
End Select
End If
Return

End if должен быть один это норм.
Я вот думаю, може i2c и RC5 используют какието таймеры или переменные одинаковые???
Go to the top of the page
 
+Quote Post
M@T_F@Q
сообщение Dec 11 2007, 20:10
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 25-01-07
Из: Узбекистан
Пользователь №: 24 765



Я нашел проблему!!!Я использую TSOP1736, а они используют другой датчик, которы отличается только временной задержкой на 300 микросекунд!!! Хотя врядли из-за этого, но буду посмотреть как изменить её, если кто знает где и как можно посмотреть эту процедуру подскажите.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 20:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.02575 секунд с 7
ELECTRONIX ©2004-2016