Skocz do zawartości

2x atmega, spi odbiera tylko jedną watrość "255"


ziomislawp

Pomocna odpowiedź

Mam połączone ze sobą dwie atmegi8 interfejsem spi. Atmega8 będąca masterem ma 8 przycisków po naciśnięciu jakiegokolwiek wysyłany jest do atmega8 slave wartość zmiennej A. Atmega8 będąca slave ma podłączony wyświetlacz alfanumeryczny 2*16 . Po naciśnięciu przycisku na masterze , slave odbiera zawsze tylko jedną wartość "255" . Slawe jest raczej w porządku, bo podczas programowania zmieniały się wartości tej zmiennej ale też nie wiem czemu . Bascom znam dość dobrze ale z tym nie mogę sobie poradzić.

Czy ktoś już miał taki problem??

proszę o pomoc.

Atmega8 slave pinb.2 (ss) podpięty do masy

atmega8 master pinb.2(ss) zostawiony wolny

kod dla mastera:

$regfile = "m8def.dat"
$crystal = 8000000
Config Portc = Input
      Portc = &B11111111
Config Portb.0 = 0
      Portb.0 = 1
Config Portd.7 = 0
       Portd.7 = 1
Config Portb.2 = 1
      Portb.2 = 1

Config Spi = Soft , Din = Pinb.4 , Dout = Portb.3 , Ss = None , Clock = Portb.5
Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = High , Clockrate = 4 , Noss = 2

Dim A As Byte

Spiinit


Do
Debounce Pinc.0 , 0 , W1 , Sub
Debounce Pinc.1 , 0 , W2 , Sub
Debounce Pinc.2 , 0 , W3 , Sub
Debounce Pinc.3 , 0 , W4 , Sub
Debounce Pinc.4 , 0 , W5 , Sub
Debounce Pinc.5 , 0 , W6 , Sub
Debounce Pinb.0 , 0 , W7 , Sub
Debounce Pind.7 , 0 , W8 , Sub

Loop



End


W1:
A = 1
Spiout A , 1
Delay
Return

W2:
A = 2
Spiout A , 1
Delay
Return

W3:
A = 3
Spiout A , 1
Delay
Return

W4:
A = 4
Spiout A , 1
Delay
Return

W5:
A = 5
Spiout A , 1
Delay
Return

W6:
A = 6
Spiout A , 1
Delay
Return

W7:
A = 7
Spiout A , 1
Delay
Return

W8:
A = 8
Spiout A , 1
Delay
Return

kod dla slaVa:

$regfile = "m8def.dat"
$crystal = 8000000

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portb.0 , Rs = Portd.5

Config Pinb.5 = 1
Config Pinb.3 = 1
Config Pinb.2 = 1
Config Pinb.4 = 0
Config Pinb.1 = 1
     Portb.1 = 1

Config Spi = Soft , Din = Pinb.4 , Dout = Portb.3 , Ss = None , Clock = Portb.5
Config Spi = Hard , Data Order = Msb , Master = No , Polarity = High , Clockrate = 4 , Noss = 2


Dim A As Byte


Spiinit

Do

Spiin A , 1
Delay
Lcd "odczytalem "
Locate 1 , 12
Lcd A
Waitms 200
Cls

Loop
End

Link do komentarza
Share on other sites

ziomislawp, prawdę mówiąc to nie jestem przekonany, że można używać 2 configów jednocześnie dotyczących SPI. Masz 2 linijki, w których masz definicję raz na sprzętową raz na programową. Nie wiem czy w ogóle tak można, na logikę raczej nie, nie ma o tym ani słowa w helpie. Jest albo sprzętowa albo programowa, nie można część tak a część tak.

Link do komentarza
Share on other sites

Wcześniej miałem tylko sprzętowy spi ale tak czy na sprzętowym czy na programowym ciągle jest to samo. Próbowałem wszystkiego nawet obydwóch na raz a i tak ciągle jest odbierane tylko "255".

Link do komentarza
Share on other sites

ziomislawp, ehhh, kolejne 30 sekund szukania i już mam następny błąd. Otworzyłem sample z Bascoma i oto co jest w pliku sendspi.bas:

'config the SPI in master mode.The clock must be a quarter of the slave cpu

Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128

więc u ciebie nie ma szansy to działać ze względu na identyczne zegary na masterze i slave'ie.

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

Czyli jak mam zmienić zegary? Próbowałem master 2mhz , slave 8mhz i odwrotnie. Próbowałem clockrate master 4 , slave 16. Próbowałem różne kombinacje z kwarcami i clockrate . Czyli jak ja mam to zsynchronizować by zadziałało? Już naprawdę nie wiem jak to rozwiązać.

Link do komentarza
Share on other sites

ziomislawp, powiem tak, bez schematu ani rusz. Poza tym jak na twoją dość dobrą znajomość Bascoma to nie bardzo u ciebie z definiowaniem pinów. Konfigurację robi się przez polenienie:

Config Pind.3

a nie:

Config Portd.3

Może nie jestem jakimś mega znawcą Bascoma ale z doświadczenia wiem, że to robi różnicę i choć czasami może działać to jednak nie zawsze i lepiej jest wszystko robić zgodnie ze sztuką.

Link do komentarza
Share on other sites

Schematu nie posiadam. Schemat mam w głowie. Mogę rozpisać

układy zasilane 5v

vcc podpięte do vcc i avcc oczywiście kondensatory 100nf do masy

aref 'y podpięty kondensatorem do masy

reset 'y podłączone przez 4,7k ohm

CLK<->CLK

MOSI<->MOSI

MISO<->MISO

slave

SS do gnd

master

SS nie podłączone ale ustawione programowo jako wyście

do mastera podpięte są przyciski od pinc.0c- pinc.5 , pinb.0. , pind.7 = wszystkie do masy

Link do komentarza
Share on other sites

MOSI-MISO

MISO-MOSI

nie tak się to czasem podłącza?

Druga sprawa

config pin robi się dla wejść

config port dla wyjść.

Trzecia sprawa to parametr Noss w configu śpi. w niektórych wersjach bascoma był jakiś błąd i trzeba było ustawić 0 zamiast 1 albo 1 zamiast 0. Nie pamiętam teraz co wlaczalo ss a co wylaczalo. sprawdź obie możliwości.

Link do komentarza
Share on other sites

MOSI-MISO

MISO-MOSI

nie tak się to czasem podłącza?

Tu się nic nie krzyżuje jak w RSie. Tu się podłącza identyczne piny razem MOSI-MOSI, MISO-MISO.

config pin robi się dla wejść

config port dla wyjść.

Nieprawda, config pin robi się dla pojedynczych pinów, a port dla całych portów niezależnie od tego czy to ma być wejście czy wyjście.

Link do komentarza
Share on other sites

Nieprawda, config pin robi się dla pojedynczych pinów, a port dla całych portów niezależnie od tego czy to ma być wejście czy wyjście.

No tak.. To tylko ustawia się wyjścia przez PORTn.x a przez PINn.x odczytuje stan pinu. Namieszałem. To zostaje pobawić się ustawieniem parametru Noss.

Link do komentarza
Share on other sites

Parametr noss czy 0 czy 1 też nic nie zmienia ciągle jest wysyłane "255". Wiem że problem tkwi w wysłaniu raczej niż odbiorze bo podczas programowania czasem pojawiają się różne wartości .

Link do komentarza
Share on other sites

Tak mam odłączony programator. Zasilanie czerpię z zasilacza 12v stabilizowanego na 5v. próbowałem już chyba wszystkiego ale taki mały szczegół może doprowadzić do nerwicy.

'config the SPI in master mode.The clock must be a quarter of the slave cpu

Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128

To mnie zastanawia co napisał Sabre jak zegar ma być podzielony przez 4 ? >ja już próbowałem na wszystkie sposoby chyba. Mi to zawsze musi się tak coś na prawie koniec przydarzyć

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.