Skocz do zawartości

SPI i Atmega32


Wojtek

Pomocna odpowiedź

Witam. Używam sprzętowego SPI w m32 ale zaszła potrzeba użycia nóżki MISO jako SS (sygnał zatrzaskujący - CS). Czy jest to możliwe?

Oto prościutki, liniowy program napisany z przykładów zawartywch w nocie:

#include <avr/io.h>
#include <util/delay.h>

#define MOSI PB5
#define SCK PB7
#define CS PB4

void InitSpi(void){DDRB |= (1<<MOSI)|(1<<SCK)|(1<<CS);SPCR |= (1<<SPE)|(1<<MSTR)|(1<<SPR1);}
void SendSpi(uint8_t bajt){SPDR = bajt;while(!(SPSR & (1<<SPIF)));}

int main(void)
{
DDRD |= (1<<PD7);
InitSpi();
while(1)
{SendSpi(165);PORTB |=(1<<CS);_delay_ms(10);PORTB &= ~(1<<CS);
_delay_ms(1000);PORTD ^= (1<<PD7);
}
}

Program co sekundę miga diodą na pinie PD7 (służy do debugowania) i co sekundę wysyła bajt 165 (działa poprawnie). Problem polega na tym że gdy podmienię w definicjach preprocesora CS z PB4 na PB6 (MISO) i przeniosę ustawianie CS jako wyjście na koniec funkcji InitSpi lub tuż przed wywoływaniem funkcji SendSpi. Program się zawiesza (z migania diody wynika że ostatnia linia pętli while wykonuje się raz lub wcale.

Czy jest jakiś sposób aby użyć sprzętowego MISO jako sygnał zatzraskujący ?

Link do komentarza
Share on other sites

Jeśli masz takie wątpliwości to:

1. Otwórz dane katalogowe mega32 na rysunku "Figure 26. Alternate Port Functions". Jest tam uniwersalny schemat pokazujący jak wygląda struktura każdego bitu portu. Po lewej stronie jest pin procesora a po prawej mnóstwo sygnałów nim sterujących. Jedne właczają pull-up, inne otwierają bufor trójstanowy na wyjście a inne wpisują dane do przerzutnika DDR itp. Po minucie przyglądania się sprawa staje się jasna albo przynajmniej zaczyna coś świtać..

2. Znajdź drogę sygnału na której Ci zależy, np. co musi być spełnione by dany pin był wyjściem i abyś mógł nim sterować programowo z rejestru PORT.

3. Poszukaj w następnych rozdziałach opisu dokładnie tego portu, np. w tym przypadku portu B i odpowiedniej tabelki opisującej jak wyglądają sygnały sterujące pinami tego portu. Tutaj będzie to tabelka "Table 26. Overriding Signals for Alternate Functions in PB7..PB4" - leży kilka stron dalej niż schemat ogólny.

4. Podstaw sobie sygnały które znasz (np. SPI załączone w trybie MASTER) i sprawdź czy pin działa tak jak chciałeś. Moim zdaniem gdy SPI działa jako MASTER, pin MISO nie może być wyjściem.

5. Jeśli czegoś dalej nie rozumiesz, pytaj 🙂

Link do komentarza
Share on other sites

Widziałem jedną tabelkę w nocie (przed przeczytaniem twojego postu) z której kategorycznie wynikało że nie może być wyjściem.

No nic, poeksperymentuje bo od biedy mogę jako SS używać zupełnie innego pinu a MISO wykorzystać jako wejście do jakiegoś innego celu (np. do badania stanu przycisku) , ciekawe tylko czy będzie można normalnie badać stan na MISO (gdy SPI sprzętowe jest włączone) w rejstrze PIN , czy też będe musiał odczytywać dane z bufora wejściowego (przerost formy nad treścią ale jak nie będzie innego wyjścia to trudno).

Link do komentarza
Share on other sites

Wojtek, jeśli to dla Ciebie jest naprawdę takie ciekawe, to weź jeszcze raz przeczytaj mój poprzedni post. Dotarło? To znów bierzesz schemat, tabelkę i patrzysz. To żadna magia ani wróżenie z fusów, skup się: linia sygnału poprowadzona do rejestru PIN, który chcesz czytać nazywa się DIxn - widzisz to? Co jest między nią a rzeczywistym pinem procesora? Bufor odcinający zrobiony z dwóch kluczy MOSFET plus mały tranzystor wymuszający stan niski gdy bufor jest odcięty, tak? Bufor jest sterowany multiplekserem przełączanym sygnałem DIEOExn - jego też widzisz? Jaki jest sygnał sterujący multiplekserem w przypadku pinu PB6? Tabelka mówi, że stałe zero a to znaczy, że bierzesz pod uwagę tylko zerowe wejście multipleksera. Tam jest doczepiony (schemat!) sygnał SLEEP tak więc jeśli tylko procesor nie jest uśpiony, to niezależnie od załączenia SPI możesz czytać pin PB6/MISO przez rejestr PINB. Koniec kropka.

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

spokojnie, nie oczekiwałem odpowiedzi bo mam to sprawdzić doświadczalnie jak już zlutuje płytkę 😉 (był gdzieś pytajnik w moim poście ? <- jakby co to jest pytanie retoryczne)W każdym razie dziękuje bo niektóre z twoich postów są bardzo cenne i nie raz decydowały o powodzeniu moich "projektów".

Link do komentarza
Share on other sites

Widzę, że robisz coraz fajniejsze rzeczy i zadajesz coraz ciekawsze pytania. Dlatego trochę zmartwiło mnie podejście:

"No nic, poeksperymentuje.."

w sytuacji gdy całą wiedzę masz na talerzu. Przecież nie napisałem "tak" albo "nie" tylko dałem Ci sposób na znalezienie odpowiedzi na każde tego typu pytanie.

Wchodząc na coraz wyższe poziomy zaawansowania powinieneś modyfikować swoje metody pracy. Nie warto tracić czasu na empiryczne sprawdzanie faktów o których możesz po prostu przeczytać, bo robiąc coraz większe projekty będziesz coraz więcej tego czasu poświęcał na upewnianie się, że 2x2=4. Pisząc poprzedniego posta chciałem pokazać Ci, że Twój eksperyment mógł być zastąpiony minutą patrzenia na schemat i tabelkę. A co w przypadku, gdybyś jeszcze nie miał tego lub innego procesora i działającej z nim płytki a już projektował układ korzystający z jakichś nieoczywistych cech sprzętu? Obawiam się, że nie jest to pytanie czysto retoryczne..

  • Lubię! 1
Link do komentarza
Share on other sites

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.