Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

shiftout i shiftin czyli komunikacja między MEGA32 i TINY13

lotnick
-
-
Posty:66
Rejestracja:19 lip 2005, o 13:09
Lokalizacja:Sosnowiec
Kontaktowanie:
shiftout i shiftin czyli komunikacja między MEGA32 i TINY13

Postautor: lotnick » 31 maja 2006, o 06:53

Witam.
Czy ktoś z Was ma działający przykład komunikacji między tymi dwoma prockami za pomocą podanych instrukcji?
Staram się wysłać jeden bajt z MEGA do TINY ale jakoś mi nie wychodzi.
Mam 3 połączone linie. Na jednej daję LOW(MEGA),co generuje przerwanie w TINY. Dotąd działa. Po stanie niskim MEGA wysyła liczbę integer poprzez shiftout. TINY w przerwaniu ma wpisane shiftin,ale reaguje tak jakby nic nie odebrał(wartość odebrana zawsze =0,a próbuję przesłać 6). Częstotliwość MEGA to 4MHz a TINY 1,2MHz (po preskalerze) dlatego w shiftout daję 5us przerwy między bitami. Fajnie by było gdyby ktoś z Was już miał podobny projekt. Jeśli nie macie to po południu wrzucę moje programy i może ktoś znajdzie błąd. Póki co nie chcę motać w głowach :-)

Pozdrawiam
Michał

Czajnik
-
-
Posty:264
Rejestracja:17 cze 2004, o 15:40
Lokalizacja:Kraków
Kontaktowanie:

Postautor: Czajnik » 31 maja 2006, o 08:53

Ja tam specem od bascoma nie jestem ale jak ci nie wyjdzie to moze zrób po asemblerowemu :) stworz sobie dwie rocedury wysyłąjące zero i jedynke a potem odwołaj sie do ktorejś zaleśnie od najmłodszego bitu.... potem obróć zmienną wysyłaną i to samo... owtarzasz 8 razy i wląne :) chyba nie taki był zamysł bascoma zeby w ten sposób wysyłąć i troche to napiechotne ale bedize działąć:)

lotnick
-
-
Posty:66
Rejestracja:19 lip 2005, o 13:09
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: lotnick » 31 maja 2006, o 10:39

Chodziło mi raczej o coś w jednej linijce na MEGA i jednej na TINY , a nie referat. :)

Awatar użytkownika
pajaczek
Moderator
Moderator
Posty:2653
Rejestracja:24 sty 2005, o 00:39
Lokalizacja:Winny gród

Postautor: pajaczek » 31 maja 2006, o 12:46

Chodziło mi raczej o coś w jednej linijce na MEGA i jednej na TINY , a nie referat. :)
Jak sie uprzesz, to mozesz to w jednej linijce upchnac :twisted:

lotnick
-
-
Posty:66
Rejestracja:19 lip 2005, o 13:09
Lokalizacja:Sosnowiec
Kontaktowanie:

Postautor: lotnick » 31 maja 2006, o 13:13

Tiaa.
Referat też możesz wpisać w jednej linijce. Nie wnikam. Jeszcze dziś popróbuję,ale jak mi się nie uda to pewnie zrobię to na piechotę.

[ Dodano: 01-06-2006, 00:06 ]
Męczyłem pół nocy i nie potrafię. Zrobiłem na MEGA shiftout , a na tiny czytam kolejne bity. Jutro wkleję,chyba że uda mi się tak jak chciałem to też coś dam.
Ale mi się chce spać.ojejjjoooo, za 5 godzin wstaję....

[ Dodano: 02-06-2006, 22:31 ]
Tak jest w MEGA

Kod: Zaznacz cały

'prog na procek ATMEGA32 'łączy się z ATTINY13 by przesłać mu dane ' tak połączono ATMEGA32 z ATTINY13 'SCK(PB7) ----T0/SCK(PB2) 'MISO(PB6) ----MISO/INT0(PB1) 'MOSI(PB5) ----MOSI/...(PB0) 'PB7 z ATMEGA32 bede uzywal do taktowania przesylanych danych -SCK 'PB6 z ATMEGA32 bede uzywal do wlaczenia przerwania w TINY 'PB5 z ATMEGA32 bede uzywal do przesylania danych. $crystal = 1000000 $regfile = "m32def.dat" Config Portb = Output Dim Temp As Byte 'zmienna do wysylania Do Wait 5 'opoznienie petli Temp = 10 'tu wartosc wysylana Set Portb.7 'zegar w stan wysoki Reset Portb.6 'rozpoczecie przerwania w tiny Waitms 5 'mala przerwa zeby TINY byl gotowy Shiftout Portb.5 , Portb.7 , Temp , 2 , 8 , 100 '2 oznacza wysylanie przy niskim stanie pinu zegarowego,jako pierwszy LSB Waitms 5 Set Portb.6 Loop End 'end program
A tak w TINY

Kod: Zaznacz cały

'ATTINY13 $regfile = "ATtiny13.dat" $crystal = 1200000 Config Portb = $b00001000 Config Portb.3 = Output 'wyjsicem na glosnik jest portb.3 Config Pinb.0 = Input 'koncowka danych Config Pinb.1 = Input 'przerwanie INT0 Config Pinb.2 = Input 'zegar On Int0 Wprzerwaniu Nosave 'jesli wystapi przerwanie od INT0 to wlacz podprogram Enable Int0 'wlacz przerwanie int0 Config Int0 = Falling 'przerwanie na opadajacym zboczu Dim Temp As Integer , I As Integer 'tu tez dam TEMP,bedzie to samo Temp = 0 Enable Interrupts 'wlacz system przerwan Do 'nieskonczona petla Loop End Wprzerwaniu: 'podprogram przerwania Disable Interrupts For I = 0 To 7 Bitwait Pinb.2 , Reset 'czekaj az zegar zacznie "tykac" Temp.i = Pinb.0 'jak zegar na LOW to odczytuje bit Bitwait Pinb.2 , Set 'jak zegar na HIGH to powrot do poczatku petli i czekamy na LOW Next I For I = 1 To Temp 'buzzer piszczy *temp* razy Set Portb.3 Waitms 100 Reset Portb.3 Waitms 100 Next I Enable Interrupts Return
Jak ktos wie jak uzyc w ATTINY instrukcji SHIFTIN to proszę o pomoc.Powyższy program działa,ale wolałbym to z SHIFTIN

jacynka84
-
-
Posty:150
Rejestracja:17 maja 2006, o 22:50
Lokalizacja:Sulejówek

Postautor: jacynka84 » 5 lis 2006, o 17:03

Wg. mnie chodzi właśnie o różnicę taktowania.
Zrób ten sam kwarc dla obydwu.
Może lepiej wewnętrzny.

mw
-
-
Posty:242
Rejestracja:23 lut 2003, o 23:22
Lokalizacja:Busko Zdrój
Kontaktowanie:

Postautor: mw » 6 lis 2006, o 10:09

Mozna tez wykorzystac do tego sprzetowy lub programowy SPI.

Awatar użytkownika
Pantera33
-
-
Posty:62
Rejestracja:25 sie 2004, o 15:23
Kontaktowanie:

Postautor: Pantera33 » 6 lis 2006, o 15:09

O tym, że tiny ma fabrycznie ustawiony podział zegara to na pewno wiesz?

Wróć do „Projektowanie PCB, programy EDA, CAD, narzędziowe”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 27 gości