Это же зачем такое надо в наш цифровой век? Любой цифровой интерфейс будет в разы помехозащищённее, универсальнее и быстрее.
Плюс схема с контроллером требует в разы меньше компонентов... Это к вопросу о том что проще.
Плюс схема с контроллером имеет в разы меньшее энергопотребление...
Управление n-нагрузками по двум проводам
- rhf-admin
- администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
- Сообщения: 3060
- Зарегистрирован: 25 авг 2009, 23:19
- Откуда: Уфа
- Контактная информация:
Re: Управление n-нагрузками по двум проводам
С уважением, администрация сайта.
- БАРС
- модератор, спонсор, писатель, идеолог, редактор
- Сообщения: 2019
- Зарегистрирован: 16 ноя 2009, 15:25
- Откуда: СССР, г. Москва
Re: Управление n-нагрузками по двум проводам
Почему одним? Там написано, что используется передача-приём кодовых посылок. Т.е. Включил канал 1, выключил 2, включил 4. выключил 1... и т.п.Rus_lan писал(а):Здесь используется м/с от пульта ДУ телевизора, собственно проблема та же управлять можем только одним каналом.БАРС писал(а):http://www.votshema.ru/300-shema-pereda ... vodam.html вот такую нашёл![]()
![Озадачен :?](./images/smilies/icon_e_confused.gif)
Сотрудничаю с НАСА, Роскосмос, Газпром, РЖД, Интер РАО ЕЭС, Роснано и др. (конкретно уточняйте у самой организации) ©.
-
- инженер, читатель
- Сообщения: 246
- Зарегистрирован: 07 май 2013, 11:29
- Откуда: Тульская область
Re: Управление n-нагрузками по двум проводам
Сомневаюсь что получиться, м/с от ДУ телевизора попробуйте на телевизоре одновременно включить 1 и 5 канал!БАРС писал(а):Почему одним? Там написано, что используется передача-приём кодовых посылок. Т.е. Включил канал 1, выключил 2, включил 4. выключил 1... и т.п
- БАРС
- модератор, спонсор, писатель, идеолог, редактор
- Сообщения: 2019
- Зарегистрирован: 16 ноя 2009, 15:25
- Откуда: СССР, г. Москва
Re: Управление n-нагрузками по двум проводам
![Смеётся :lol:](./images/smilies/icon_lol.gif)
с днем радио!
Сотрудничаю с НАСА, Роскосмос, Газпром, РЖД, Интер РАО ЕЭС, Роснано и др. (конкретно уточняйте у самой организации) ©.
Re: Управление n-нагрузками по двум проводам
Здравствуйте нашел вашу статью про i2c c примерами , но ни как не получается прочитать микросхему 24с04
В протеусе вроде бы запись происходит , но вот с чтением ни как . Думал может с протеусом что то не так собрал устройство но результат тот же , значение вывожу в порт b постоянно одно и тоже ff какое бы я число не записывал в eeprom
Помогите разобраться
Код :
list p=16f628A
#include <p16F628A.inc>
errorlevel -302
errorlevel -205
__CONFIG _CP_OFF & _CPD_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT
;*******************************************************************************
#define Port_reg PORTA
#define Tris_reg TRISA
#define Clock_line 0X06
#define Data_line 0X07
;****************************************************************************
CBLOCK 0x20
I2C_flags ; 20h
Bit_counter ; 21h
BTS ; byte to send 22h
RDB ; recieved byte 23h
ENDC
;****************************************************************************
ORG 0X00
GOTO START
START
bsf STATUS,5
movlw b'11101111'
movwf TRISA
movlw b'00000000'
movwf TRISB
bcf STATUS,5
clrf PORTA
clrf PORTB
movlw 0X07
movwf CMCON
;=================================================================
MAIN
CALL Start_uslovie ; _|_- BANK
movlw B'10100000' ; 1010 x 0 0 0 (24c04)
movwf BTS ; |----- 1 CHTENIE 0 ZAPIC
CALL Send_Byte
;----
movlw .0 ; ADRES
movwf BTS
CALL Send_Byte
;----
movlw B'10101010' ; DATA SEND
movwf BTS
CALL Send_Byte
;---
CALL Stop_uslovie
NOP
CALL Start_uslovie ; _|_- BANK
movlw b'10100001' ; 1010 x 0 0 0 (24c04)
movwf BTS ; |----- 1 CHTENIE 0 ZAPIC
CALL Send_Byte
;---
movlw .0 ; ADRES
movwf BTS
CALL Send_Byte
;---
CALL Recieve_Byte
MOVF RDB,W
MOVWF PORTB
CALL Stop_uslovie
GOTO MAIN
;=================================================================
;--------START_USLOVIE----------------------------------------
Start_uslovie
Call Clock_one
Call Data_null
Call Clock_null
return
;--------STOP_USLOVIE-----------------------------------------
Stop_uslovie
call Data_null
call Clock_one
wait_clock_p
btfss Port_reg , Clock_line
goto wait_clock_p
call Data_one
return
;-------OTPRAVKA_BAYTA----------------------------------------
Send_Byte
bcf I2C_flags,0
movlw .8
movwf Bit_counter
next_bit_s
btfsc BTS,7
Call Data_one
btfss BTS,7
call Data_null
Call Clock_one
wait_clock_s1
btfss Port_reg , Clock_line
goto wait_clock_s1
call Clock_null
rlf BTS,1
decfsz Bit_counter,1
goto next_bit_s
call Data_one
call Clock_one
wait_clock_s2
btfss Port_reg , Clock_line
goto wait_clock_s2
btfsc Port_reg , Data_line
bsf I2C_flags,0
call Clock_null
return
;--------PRIEM_BAYTA-------------------------------------------
Recieve_Byte
clrf RDB
movlw .8
movwf Bit_counter
next_bit_r
bcf STATUS,0
rlf RDB,1
call Data_one
call Clock_one
wait_clock_r1
btfss Port_reg , Clock_line
goto wait_clock_r1
btfsc Port_reg , Data_line
bsf RDB,0
call Clock_null
decfsz Bit_counter,F
goto next_bit_r
btfss I2C_flags,0
call Data_null
btfsc I2C_flags,0
call Data_one
call Clock_one
wait_clock_r2
btfss Port_reg , Clock_line
goto wait_clock_r2
call Clock_null
return
;------------ 0_NA_CLOK-----------------------------------
Clock_null
bcf Port_reg , Clock_line
bsf STATUS,5
bcf Tris_reg , Clock_line
bcf STATUS,5
return
;----------- 1_NA_CLOK------------------------------------
Clock_one
bsf STATUS,5
bsf Tris_reg , Clock_line
bcf STATUS,5
return
;---------- 0_NA_DATA------------------------------------
Data_null
bcf Port_reg , Data_line
bsf STATUS,5
bcf Tris_reg , Data_line
bcf STATUS,5
return
;------------ 1_NA_DATA------------------------------------
Data_one
bsf STATUS,5
bsf Tris_reg , Data_line
bcf STATUS,5
return
;----------------------------------------------------------
END
В протеусе вроде бы запись происходит , но вот с чтением ни как . Думал может с протеусом что то не так собрал устройство но результат тот же , значение вывожу в порт b постоянно одно и тоже ff какое бы я число не записывал в eeprom
![Ботан :geek:](./images/smilies/icon_e_geek.gif)
![Очень доволен :D](./images/smilies/icon_e_biggrin.gif)
Код :
list p=16f628A
#include <p16F628A.inc>
errorlevel -302
errorlevel -205
__CONFIG _CP_OFF & _CPD_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT
;*******************************************************************************
#define Port_reg PORTA
#define Tris_reg TRISA
#define Clock_line 0X06
#define Data_line 0X07
;****************************************************************************
CBLOCK 0x20
I2C_flags ; 20h
Bit_counter ; 21h
BTS ; byte to send 22h
RDB ; recieved byte 23h
ENDC
;****************************************************************************
ORG 0X00
GOTO START
START
bsf STATUS,5
movlw b'11101111'
movwf TRISA
movlw b'00000000'
movwf TRISB
bcf STATUS,5
clrf PORTA
clrf PORTB
movlw 0X07
movwf CMCON
;=================================================================
MAIN
CALL Start_uslovie ; _|_- BANK
movlw B'10100000' ; 1010 x 0 0 0 (24c04)
movwf BTS ; |----- 1 CHTENIE 0 ZAPIC
CALL Send_Byte
;----
movlw .0 ; ADRES
movwf BTS
CALL Send_Byte
;----
movlw B'10101010' ; DATA SEND
movwf BTS
CALL Send_Byte
;---
CALL Stop_uslovie
NOP
CALL Start_uslovie ; _|_- BANK
movlw b'10100001' ; 1010 x 0 0 0 (24c04)
movwf BTS ; |----- 1 CHTENIE 0 ZAPIC
CALL Send_Byte
;---
movlw .0 ; ADRES
movwf BTS
CALL Send_Byte
;---
CALL Recieve_Byte
MOVF RDB,W
MOVWF PORTB
CALL Stop_uslovie
GOTO MAIN
;=================================================================
;--------START_USLOVIE----------------------------------------
Start_uslovie
Call Clock_one
Call Data_null
Call Clock_null
return
;--------STOP_USLOVIE-----------------------------------------
Stop_uslovie
call Data_null
call Clock_one
wait_clock_p
btfss Port_reg , Clock_line
goto wait_clock_p
call Data_one
return
;-------OTPRAVKA_BAYTA----------------------------------------
Send_Byte
bcf I2C_flags,0
movlw .8
movwf Bit_counter
next_bit_s
btfsc BTS,7
Call Data_one
btfss BTS,7
call Data_null
Call Clock_one
wait_clock_s1
btfss Port_reg , Clock_line
goto wait_clock_s1
call Clock_null
rlf BTS,1
decfsz Bit_counter,1
goto next_bit_s
call Data_one
call Clock_one
wait_clock_s2
btfss Port_reg , Clock_line
goto wait_clock_s2
btfsc Port_reg , Data_line
bsf I2C_flags,0
call Clock_null
return
;--------PRIEM_BAYTA-------------------------------------------
Recieve_Byte
clrf RDB
movlw .8
movwf Bit_counter
next_bit_r
bcf STATUS,0
rlf RDB,1
call Data_one
call Clock_one
wait_clock_r1
btfss Port_reg , Clock_line
goto wait_clock_r1
btfsc Port_reg , Data_line
bsf RDB,0
call Clock_null
decfsz Bit_counter,F
goto next_bit_r
btfss I2C_flags,0
call Data_null
btfsc I2C_flags,0
call Data_one
call Clock_one
wait_clock_r2
btfss Port_reg , Clock_line
goto wait_clock_r2
call Clock_null
return
;------------ 0_NA_CLOK-----------------------------------
Clock_null
bcf Port_reg , Clock_line
bsf STATUS,5
bcf Tris_reg , Clock_line
bcf STATUS,5
return
;----------- 1_NA_CLOK------------------------------------
Clock_one
bsf STATUS,5
bsf Tris_reg , Clock_line
bcf STATUS,5
return
;---------- 0_NA_DATA------------------------------------
Data_null
bcf Port_reg , Data_line
bsf STATUS,5
bcf Tris_reg , Data_line
bcf STATUS,5
return
;------------ 1_NA_DATA------------------------------------
Data_one
bsf STATUS,5
bsf Tris_reg , Data_line
bcf STATUS,5
return
;----------------------------------------------------------
END
- rhf-admin
- администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
- Сообщения: 3060
- Зарегистрирован: 25 авг 2009, 23:19
- Откуда: Уфа
- Контактная информация:
Re: Управление n-нагрузками по двум проводам
Возможно всё дело в задержках. Ты сразу после записи пытаешься прочитать что записал, хотя по условиям I2C даже само старт условие можно подавать только после того, как шина минимум 4,7 мкс была свободна. А у тебя между стоп и старт только один nop.
Попробуй процедуру записи закомментить, оставить только чтение и посмотри будет ли оно работать.
Попробуй процедуру записи закомментить, оставить только чтение и посмотри будет ли оно работать.
С уважением, администрация сайта.
Re: Управление n-нагрузками по двум проводам
Здравствуйте , спасибо за ответ но как я понял проблема не в этом процедура чтения отличается от записи . Вот этот код работает , но все равно остался косяк последний бит считывается не правильно всегда 1 первых шесть так как надо (что записал то и прочитал )
CALL Start_uslovie
movlw b'10100000'
movwf BTS
CALL Send_Byte
;---- старт W=0(запись) отправка адреса микросхемы
movlw .1
movwf BTS
CALL Send_Byte
;---- отправка адреса ячейки eeprom
CALL Start_uslovie
movlw b'10100001'
movwf BTS
CALL Send_Byte
;---- повторный старт W=1(чтение) отправка адреса микросхемы
BSF I2C_flags,0 ;--- устанавливаем единицу , даем ведомому понять что это последний байт чтения
CALL Recieve_Byte
;---- принимаем данные
CALL Stop_uslovie
MOVF RDB,W
MOVWF PORTB
CALL Start_uslovie
movlw b'10100000'
movwf BTS
CALL Send_Byte
;---- старт W=0(запись) отправка адреса микросхемы
movlw .1
movwf BTS
CALL Send_Byte
;---- отправка адреса ячейки eeprom
CALL Start_uslovie
movlw b'10100001'
movwf BTS
CALL Send_Byte
;---- повторный старт W=1(чтение) отправка адреса микросхемы
BSF I2C_flags,0 ;--- устанавливаем единицу , даем ведомому понять что это последний байт чтения
CALL Recieve_Byte
;---- принимаем данные
CALL Stop_uslovie
MOVF RDB,W
MOVWF PORTB
Re: Управление n-нагрузками по двум проводам
Вот полностью рабочий код , проверил в симуляторе и железе !!!
Может кому пригодится![Очень доволен :D](./images/smilies/icon_e_biggrin.gif)
list p=16f628A
#include <p16F628A.inc>
errorlevel -302
errorlevel -205
__CONFIG _CP_OFF & _CPD_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT
;*******************************************************************************
#define Port_reg PORTA
#define Tris_reg TRISA
#define Clock_line 0X06 ;scl-rA6
#define Data_line 0X07 ;sda-rA7
;****************************************************************************
CBLOCK 0x20
I2C_flags ; 20h
Bit_counter ; 21h
BTS ; byte to send 22h
RDB ; recieved byte 23h
Reg
ENDC
;****************************************************************************
ORG 0X00
GOTO START
START
bsf STATUS,5
movlw b'11110000'
movwf TRISA
movlw b'00000000'
movwf TRISB
MOVLW B'10000000'
MOVWF OPTION_REG
bcf STATUS,5
clrf PORTA
clrf PORTB
movlw 0X07
movwf CMCON
;=================================================================
MAIN
CALL Start_uslovie ; _|_- bank
movlw B'10100000' ;1010x 0 0 0 (24c08)
movwf BTS ; |----- 1 chtenie 0 zapis
CALL Send_Byte
movlw .1 ; adres SEND
movwf BTS
CALL Send_Byte
movlw .7 ;data send
movwf BTS
CALL Send_Byte
CALL Stop_uslovie
CALL Pause
CALL Start_uslovie
movlw b'10100000'
movwf BTS
CALL Send_Byte
;---- старт W=0(запись) отправка адреса микросхемы
movlw .1
movwf BTS
CALL Send_Byte
;---- отправка адреса ячейки eeprom
CALL Start_uslovie
movlw b'10100001'
movwf BTS
CALL Send_Byte
;---- повторный старт W=1(чтение) отправка адреса микросхемы
BSF I2C_flags,0
CALL Recieve_Byte
;---- принимаем данные
CALL Stop_uslovie
MOVF RDB,W
MOVWF PORTB
;----------------------------------------------------------------------
nop
GOTO $-1
;-------OTPRAVKA_BAYTA----------------------------------------
Send_Byte
bcf I2C_flags,0
movlw .8
movwf Bit_counter
next_bit_s
btfsc BTS,7
Call Data_one
btfss BTS,7
call Data_null
Call Clock_one
wait_clock_s1
btfss Port_reg , Clock_line
goto wait_clock_s1
call Clock_null
rlf BTS,1
decfsz Bit_counter,1
goto next_bit_s
call Data_one
call Clock_one
wait_clock_s2
btfss Port_reg , Clock_line
goto wait_clock_s2
btfsc Port_reg , Data_line
bsf I2C_flags,0
call Clock_null
return
;--------PRIEM_BAYTA-------------------------------------------
Recieve_Byte
clrf RDB
movlw .8
movwf Bit_counter
next_bit_r
bcf STATUS,0
rlf RDB,1
call Data_one
call Clock_one
wait_clock_r1
btfss Port_reg , Clock_line
goto wait_clock_r1
btfsc Port_reg , Data_line
bsf RDB,0
call Clock_null
decfsz Bit_counter,F
goto next_bit_r
btfss I2C_flags,0
call Data_null
btfsc I2C_flags,0
call Data_one
call Clock_one
wait_clock_r2
btfss Port_reg , Clock_line
goto wait_clock_r2
call Clock_null
return
;--------START_USLOVIE----------------------------------------
Start_uslovie
Call Clock_one
Call Data_null
Call Clock_null
return
;--------STOP_USLOVIE-----------------------------------------
Stop_uslovie
call Data_null
call Clock_one
wait_clock_p
btfss Port_reg , Clock_line
goto wait_clock_p
call Data_one
return
;------------ 0_NA_CLOK-----------------------------------
Clock_null
bsf STATUS,5
bcf Tris_reg , Clock_line
bcf STATUS,5
bcf Port_reg , Clock_line
return
;----------- 1_NA_CLOK------------------------------------
Clock_one
bsf STATUS,5
bsf Tris_reg , Clock_line
bcf STATUS,5
return
;---------- 0_NA_DATA------------------------------------
Data_null
bsf STATUS,5
bcf Tris_reg , Data_line
bcf STATUS,5
bcf Port_reg , Data_line
return
;------------ 1_NA_DATA------------------------------------
Data_one
bsf STATUS,5
bsf Tris_reg , Data_line
bcf STATUS,5
return
;----------------------------------------------------------------
Pause movlw .100
movwf Reg
wr decfsz Reg, F
goto wr
nop
Return
;----------------------------------------------------------
END
Может кому пригодится
![Очень доволен :D](./images/smilies/icon_e_biggrin.gif)
list p=16f628A
#include <p16F628A.inc>
errorlevel -302
errorlevel -205
__CONFIG _CP_OFF & _CPD_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT
;*******************************************************************************
#define Port_reg PORTA
#define Tris_reg TRISA
#define Clock_line 0X06 ;scl-rA6
#define Data_line 0X07 ;sda-rA7
;****************************************************************************
CBLOCK 0x20
I2C_flags ; 20h
Bit_counter ; 21h
BTS ; byte to send 22h
RDB ; recieved byte 23h
Reg
ENDC
;****************************************************************************
ORG 0X00
GOTO START
START
bsf STATUS,5
movlw b'11110000'
movwf TRISA
movlw b'00000000'
movwf TRISB
MOVLW B'10000000'
MOVWF OPTION_REG
bcf STATUS,5
clrf PORTA
clrf PORTB
movlw 0X07
movwf CMCON
;=================================================================
MAIN
CALL Start_uslovie ; _|_- bank
movlw B'10100000' ;1010x 0 0 0 (24c08)
movwf BTS ; |----- 1 chtenie 0 zapis
CALL Send_Byte
movlw .1 ; adres SEND
movwf BTS
CALL Send_Byte
movlw .7 ;data send
movwf BTS
CALL Send_Byte
CALL Stop_uslovie
CALL Pause
CALL Start_uslovie
movlw b'10100000'
movwf BTS
CALL Send_Byte
;---- старт W=0(запись) отправка адреса микросхемы
movlw .1
movwf BTS
CALL Send_Byte
;---- отправка адреса ячейки eeprom
CALL Start_uslovie
movlw b'10100001'
movwf BTS
CALL Send_Byte
;---- повторный старт W=1(чтение) отправка адреса микросхемы
BSF I2C_flags,0
CALL Recieve_Byte
;---- принимаем данные
CALL Stop_uslovie
MOVF RDB,W
MOVWF PORTB
;----------------------------------------------------------------------
nop
GOTO $-1
;-------OTPRAVKA_BAYTA----------------------------------------
Send_Byte
bcf I2C_flags,0
movlw .8
movwf Bit_counter
next_bit_s
btfsc BTS,7
Call Data_one
btfss BTS,7
call Data_null
Call Clock_one
wait_clock_s1
btfss Port_reg , Clock_line
goto wait_clock_s1
call Clock_null
rlf BTS,1
decfsz Bit_counter,1
goto next_bit_s
call Data_one
call Clock_one
wait_clock_s2
btfss Port_reg , Clock_line
goto wait_clock_s2
btfsc Port_reg , Data_line
bsf I2C_flags,0
call Clock_null
return
;--------PRIEM_BAYTA-------------------------------------------
Recieve_Byte
clrf RDB
movlw .8
movwf Bit_counter
next_bit_r
bcf STATUS,0
rlf RDB,1
call Data_one
call Clock_one
wait_clock_r1
btfss Port_reg , Clock_line
goto wait_clock_r1
btfsc Port_reg , Data_line
bsf RDB,0
call Clock_null
decfsz Bit_counter,F
goto next_bit_r
btfss I2C_flags,0
call Data_null
btfsc I2C_flags,0
call Data_one
call Clock_one
wait_clock_r2
btfss Port_reg , Clock_line
goto wait_clock_r2
call Clock_null
return
;--------START_USLOVIE----------------------------------------
Start_uslovie
Call Clock_one
Call Data_null
Call Clock_null
return
;--------STOP_USLOVIE-----------------------------------------
Stop_uslovie
call Data_null
call Clock_one
wait_clock_p
btfss Port_reg , Clock_line
goto wait_clock_p
call Data_one
return
;------------ 0_NA_CLOK-----------------------------------
Clock_null
bsf STATUS,5
bcf Tris_reg , Clock_line
bcf STATUS,5
bcf Port_reg , Clock_line
return
;----------- 1_NA_CLOK------------------------------------
Clock_one
bsf STATUS,5
bsf Tris_reg , Clock_line
bcf STATUS,5
return
;---------- 0_NA_DATA------------------------------------
Data_null
bsf STATUS,5
bcf Tris_reg , Data_line
bcf STATUS,5
bcf Port_reg , Data_line
return
;------------ 1_NA_DATA------------------------------------
Data_one
bsf STATUS,5
bsf Tris_reg , Data_line
bcf STATUS,5
return
;----------------------------------------------------------------
Pause movlw .100
movwf Reg
wr decfsz Reg, F
goto wr
nop
Return
;----------------------------------------------------------
END
- rhf-admin
- администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
- Сообщения: 3060
- Зарегистрирован: 25 авг 2009, 23:19
- Откуда: Уфа
- Контактная информация:
Re: Управление n-нагрузками по двум проводам
Тьфу-ты, точно! При чтении произвольной ячейки надо же сначала её адрес установить, а это передача на запись.
С уважением, администрация сайта.