Witam,
Panowie na poważnie wziąłem się za TWI Slawe ale za pomocą własnej obsługi w Bascomie. Na podstawie szukajki na elektrodzie i kilku postów kolegów zdaje się szymtro i robiw udało mi się w końcu zrobić to aby AVR zaopatrzony w sprzętowe TWI grzecznie odbierał przesyłane do niego bajty. Zrobiłem to tak:
wprawdzie w tym prościutkim teście nic nie robię z odebranymi danymi tylko migam diodą LED gdy są one odebrane, ale
.... tu się rodzi moje pytanie: jak zrobić żeby teraz Slave coś tam wysłał do Mastera ???
jest tam już widać taki
ale to chyba nie spowoduje wysłania zmiennej Command do Mastera??? coś trzeba zapewne jeszcze zrobić a po drugie jeśli już to jak po stronie mastera to wysyłać???
narazie to wysyłanie do Slave (które mi działa wyśmienicie) robię w masterze tak:
a gdybym miał odebrać coś ze Slabe???? może ktoś już się z tym męczył i może mnie chociaż naprowadzić choć krok dalej???? (please)
(wiem wiem oczywiście , że w PDF'ie wszystko jest opisane ale jakoś nie mogę sam tego na Bascom że się tak wyrażę "przetranskodować")
pozdrawiam i czekam na info
Panowie na poważnie wziąłem się za TWI Slawe ale za pomocą własnej obsługi w Bascomie. Na podstawie szukajki na elektrodzie i kilku postów kolegów zdaje się szymtro i robiw udało mi się w końcu zrobić to aby AVR zaopatrzony w sprzętowe TWI grzecznie odbierał przesyłane do niego bajty. Zrobiłem to tak:
Twar = &B10000000 'Adres=128, jeśli chcesz general call to bit.0=1
Twbr = &B00000000 'częstotliwość TWI=0 bo pracujemy jedynie jako Slave
Twcr = &B01000101 'odpalamy TWI, zezwalamy na przerwania od TWI, ustawiamy aby potwierdzał sygnałem ACK
Dim Status As Byte ' Status operacji na magistrali odczytywany w przerwaniu
Dim Run As Bit 'Flaga żądania wysłania danych do LCD - ustawiana w przerwaniu
Dim Wskaznik As Byte
Dim Dane(16) As Byte
Dim I As Byte
On Twi I2c_check
Enable Interrupts
Do
If Run = 1 Then
Led = Not Led
Wskaznik = 0
Reset Run
End If
Loop
'Przerwanie od TWI
I2c_check:
'Odczytujemy status operacji maskując 3 ostatnie - nieważne dla nas bity
Status = Twsr And &B11111000
If Status = &H80 Then
'Wcześniej zaadresowany Slave odebrał daną i potwierdził ACK - zapełniamy tablicę danych
Incr Wskaznik
Dane(wskaznik) = Twdr
'End If
Elseif Status = &HA0 Then
'Odebrano STOP lub ponowny START
Set Run
Elseif Status = &HA8 Then
Twdr = Command
End If
Set Twcr.twint
Returnwprawdzie w tym prościutkim teście nic nie robię z odebranymi danymi tylko migam diodą LED gdy są one odebrane, ale
.... tu się rodzi moje pytanie: jak zrobić żeby teraz Slave coś tam wysłał do Mastera ???
jest tam już widać taki
Elseif Status = &HA8 then
Twdr = Command
End Ifale to chyba nie spowoduje wysłania zmiennej Command do Mastera??? coś trzeba zapewne jeszcze zrobić a po drugie jeśli już to jak po stronie mastera to wysyłać???
narazie to wysyłanie do Slave (które mi działa wyśmienicie) robię w masterze tak:
I2cstart
I2cwbyte 128
I2cwbyte 22 'jakaś tam dana do Slave
I2cstopa gdybym miał odebrać coś ze Slabe???? może ktoś już się z tym męczył i może mnie chociaż naprowadzić choć krok dalej???? (please)
(wiem wiem oczywiście , że w PDF'ie wszystko jest opisane ale jakoś nie mogę sam tego na Bascom że się tak wyrażę "przetranskodować")
pozdrawiam i czekam na info