Skocz do zawartości

TWI w BASCOM programował kto na poziomie sprzętu ?


BlackJack

Pomocna odpowiedź

Od jakiegoś czasu próbuję oprogramować procesor ATMega 48/168, aby działał jako Slave na I2C, ale zależy mi na wykorzystaniu sprzętowego TWI. Procesor będzie taktowany 2 i 4MHz, w zależności od tego jak się go ustawi, ale to akurat nie jest problem.

Problem w tym ze I2C chce obsługiwać na przerwaniach od TWI.

Ma może ktoś linki do polskich opisów I2C, mogą być na 8051, bo chodzi o to aby był opis kodów statusu. Ewentualnie czy ktoś już pisał procedury na sprzętowy TWI ?

Link do komentarza
Share on other sites

Dzięki pewnie się z tego wyznam, C miałem w szkole na PC, więc zakumam o co w kodzie chodzi. Ja znalazłem notę ATMELA 2565, też tam jest jakiś algorytm opisany.

EDIT.

A takie jeszcze małe pytanie po takim szybkim przeglądzie kodu w C.

Jak interpretować takie jak mniemam stale w kodzie:

if ( (twst != TW_START) && (twst != TW_REP_START)) return 1;

TW_start to będzie odpowiednik > "A START condition has been trasmited" czyli kod 0x08

a

TW_rep_start to będzie >"A repeated START condition has been transmitted" czyli kod 0x10

I jeszcze takie pytanie do tego fragmentu, bo nie wiem czy dobrze pamiętam C.

twst = TW_STATUS & 0xF8;
if( twst != TW_MT_DATA_ACK)
break;
case 0xB8:

Jeżeli TWST różne od TW_MT_DATA_ACK to powrót (break), a w przeciwnym wypadku testuj następną wartość, tj. tutaj 0xB8 ?

Link do komentarza
Share on other sites

Stałe są zdefiniowane w pliku twi.h który jest dodawany do WinAVR.

/* Master */
/** \ingroup util_twi
   \def TW
   stop or repeated start condition received while selected */
#define TW_SR_STOP		0xA0

/* Misc */
/** \ingroup util_twi
   \def TW_NO_INFO
   no state information available */
#define TW_NO_INFO		0xF8

/** \ingroup util_twi
   \def TW_BUS_ERROR
   illegal start or stop condition */
#define TW_BUS_ERROR		0x00
Jeżeli TWST różne od TW_MT_DATA_ACK to powrót (break), a w przeciwnym wypadku testuj następną wartość, tj. tutaj 0xB8 ?

O ile ja dobrze rozumiem ten kod to jest tak jak napisałeś. Jeśli warunek jest spełniony to wykonana zostanie instrukcja break, czyli zakończenie case, a jeśli warunek nie zostanie spełniony to wykona się następny case

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.