Управление n-нагрузками по двум проводам

Всё, для чего на форуме не нашлось специального раздела
Аватара пользователя
rhf-admin
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 2991
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Управление n-нагрузками по двум проводам

Сообщение rhf-admin »

Это же зачем такое надо в наш цифровой век? Любой цифровой интерфейс будет в разы помехозащищённее, универсальнее и быстрее.
Плюс схема с контроллером требует в разы меньше компонентов... Это к вопросу о том что проще.
Плюс схема с контроллером имеет в разы меньшее энергопотребление...
С уважением, администрация сайта.
Аватара пользователя
БАРС
модератор, спонсор, писатель, идеолог, редактор
модератор, спонсор, писатель, идеолог, редактор
Сообщения: 2012
Зарегистрирован: 16 ноя 2009, 15:25
Откуда: СССР, г. Москва

Re: Управление n-нагрузками по двум проводам

Сообщение БАРС »

Rus_lan писал(а):
БАРС писал(а):http://www.votshema.ru/300-shema-pereda ... vodam.html вот такую нашёл :)
Здесь используется м/с от пульта ДУ телевизора, собственно проблема та же управлять можем только одним каналом.
Почему одним? Там написано, что используется передача-приём кодовых посылок. Т.е. Включил канал 1, выключил 2, включил 4. выключил 1... и т.п. :?
http://www.youtube.com/watch?v=vhE6qT6q ... re=related Доктрина США по уничтожению русских.
Я вас сканирую: Изображение
Сотрудничаю с НАСА, Роскосмос, Газпром, РЖД, Интер РАО ЕЭС, Роснано и др. (конкретно уточняйте у самой организации) ©.
Rus_lan
инженер, читатель
инженер, читатель
Сообщения: 246
Зарегистрирован: 07 май 2013, 11:29
Откуда: Тульская область

Re: Управление n-нагрузками по двум проводам

Сообщение Rus_lan »

БАРС писал(а):Почему одним? Там написано, что используется передача-приём кодовых посылок. Т.е. Включил канал 1, выключил 2, включил 4. выключил 1... и т.п
Сомневаюсь что получиться, м/с от ДУ телевизора попробуйте на телевизоре одновременно включить 1 и 5 канал!
Аватара пользователя
БАРС
модератор, спонсор, писатель, идеолог, редактор
модератор, спонсор, писатель, идеолог, редактор
Сообщения: 2012
Зарегистрирован: 16 ноя 2009, 15:25
Откуда: СССР, г. Москва

Re: Управление n-нагрузками по двум проводам

Сообщение БАРС »

:lol: а зачем одновременно включать все? такое требуется очень редко!
с днем радио!
http://www.youtube.com/watch?v=vhE6qT6q ... re=related Доктрина США по уничтожению русских.
Я вас сканирую: Изображение
Сотрудничаю с НАСА, Роскосмос, Газпром, РЖД, Интер РАО ЕЭС, Роснано и др. (конкретно уточняйте у самой организации) ©.
MOTOR
Читатель
Читатель
Сообщения: 3
Зарегистрирован: 17 июл 2014, 22:28

Re: Управление n-нагрузками по двум проводам

Сообщение MOTOR »

Здравствуйте нашел вашу статью про i2c c примерами , но ни как не получается прочитать микросхему 24с04
В протеусе вроде бы запись происходит , но вот с чтением ни как . Думал может с протеусом что то не так собрал устройство но результат тот же , значение вывожу в порт b постоянно одно и тоже ff какое бы я число не записывал в eeprom :geek: Помогите разобраться :D
Код :
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
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 2991
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Управление n-нагрузками по двум проводам

Сообщение rhf-admin »

Возможно всё дело в задержках. Ты сразу после записи пытаешься прочитать что записал, хотя по условиям I2C даже само старт условие можно подавать только после того, как шина минимум 4,7 мкс была свободна. А у тебя между стоп и старт только один nop.
Попробуй процедуру записи закомментить, оставить только чтение и посмотри будет ли оно работать.
С уважением, администрация сайта.
MOTOR
Читатель
Читатель
Сообщения: 3
Зарегистрирован: 17 июл 2014, 22:28

Re: Управление n-нагрузками по двум проводам

Сообщение MOTOR »

Здравствуйте , спасибо за ответ но как я понял проблема не в этом процедура чтения отличается от записи . Вот этот код работает , но все равно остался косяк последний бит считывается не правильно всегда 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
Вложения
i2c_чтение.GIF
MOTOR
Читатель
Читатель
Сообщения: 3
Зарегистрирован: 17 июл 2014, 22:28

Re: Управление n-нагрузками по двум проводам

Сообщение MOTOR »

Вот полностью рабочий код , проверил в симуляторе и железе !!!
Может кому пригодится :D
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
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
администратор, спонсор, писатель, дизайнер, инженер, программист, идеолог
Сообщения: 2991
Зарегистрирован: 25 авг 2009, 23:19
Откуда: Уфа
Контактная информация:

Re: Управление n-нагрузками по двум проводам

Сообщение rhf-admin »

Тьфу-ты, точно! При чтении произвольной ячейки надо же сначала её адрес установить, а это передача на запись.
С уважением, администрация сайта.
Ответить