ATNEL tech-forum
https://forum.atnel.pl/

ATTINY 24 SPI 74HC595
https://forum.atnel.pl/topic23799.html
Strona 1 z 1

Autor:  LukMeks [ 28 maja 2021, o 09:31 ]
Tytuł:  ATTINY 24 SPI 74HC595

Witam.
Proszę o poradę w języku C.
Próbuję sterować rejestrem przy pomocy SPI czyli ZEGAR, DANE i ZATRZASK z pinów:

#define MOSI (1<<PA6)
#define SCK (1<<PA4)
#define LT (1<<PA3)

i za Chiny nie mogę tego odpalić .

Wydaje mi się, że inicjalizacja powinna wyglądać tak :

DDRA |=MOSI|SCK|LT|LED;
USISR |=(1<<USIWM0)|(1<<USIWM1)|(1<<USICLK);

Natomiast wysyłka danych powinna wyglądać tak:

void wyslij_moj_bit(uint8_t y)
{
USIDR = y;
while (!(USISR & (1<<USIOIF)) );

LT_ON;
LT_OFF;

}

Z prockiem się łączę, debouncer Led mryga, taktowanie 8Mhz.
Proszę o info.
Pozdrawiam

Autor:  Mario17 [ 28 maja 2021, o 18:30 ]
Tytuł:  Re: ATTINY 24 SPI 74HC595

(1<<USIWM0) | (1<<USIWM1) = Two wire mode (I2C), a potrzebujesz ustawić Three wire mode (SPI).
(1<<USICLK) oznacza że sygnałem SCK musisz sterować programowo przez ustawianie tego bitu z 0 na 1 i z 1 na 0 podczas wysyłania bajtu w pętli while. Bit ten musi być ustawiany tylko w pętli while, usuń go z inicjalizacji. Brakuje też kasowana flagi USIOIF przed pętlą while.

Autor:  LukMeks [ 29 maja 2021, o 06:55 ]
Tytuł:  Re: ATTINY 24 SPI 74HC595

Skoro ma być tryb trójprzewodowy to ustawię to tak:
USISR |=(1<<USIWM0); ???

Z sygnałem SCK rozumiem, że bitem USICLK będę sterował każdorazowo podczas nadawania?

Kasowanie flagi przed pętlą ma spowodować zablokowanie wysyłania (śmieci) zanim zacznie działać główna pętla?
Czy tak może być?
USISR &=~(1<<USIOF);

Autor:  Mario17 [ 29 maja 2021, o 09:14 ]
Tytuł:  Re: ATTINY 24 SPI 74HC595

LukMeks napisał(a):
Skoro ma być tryb trójprzewodowy to ustawię to tak:
USISR |=(1<<USIWM0); ???

Tak, tylko rejestr USICR, a nie USISR.

LukMeks napisał(a):
Z sygnałem SCK rozumiem, że bitem USICLK będę sterował każdorazowo podczas nadawania?

Z każdym przejściem pętli while czyli 8 razy na wysłanie jednego bajtu.

Cytuj:
Kasowanie flagi przed pętlą ma spowodować zablokowanie wysyłania (śmieci) zanim zacznie działać główna pętla?
Czy tak może być?
USISR &=~(1<<USIOF);

Ma spowodować, że warunek w pętli while nie będzie cały czas równy false. Bez kasowania flagi program wyśle tylko jeden bajt, bo przy drugiej próbie flaga dalej będzie pokazywać że wysyłanie jest ukończone. I zauważ że "The flag is cleared if a logical one is written to the USIOIF".

Autor:  LukMeks [ 30 maja 2021, o 08:51 ]
Tytuł:  Re: ATTINY 24 SPI 74HC595

Czyli, że wysyłam bajt i kasuję flagę, wysyłam bajt i kasuję flagę... zgodnie z:
"...Clearing this bit will release the counter overflow hold of SCL ..." ??

PS Od prawie roku siedzę nad C i generalnie o większość zagadnień się otarłem ale temat flag jest mi obcy.
Wiem, ze "jak nie wiadomo o co chodzi to najlepiej zawsze zaglądać do noty" ale 'patrzę i nie widzę"

Dzięki kolego za pomoc. Procek siedzi już w sterowniku, poradziłem sobie bez adc. Jak przyjdzie nowy to wrócę do tematu.HEJ

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/