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/ |