prepojenie dvoch atmega16 cez TWI a SPI
Moderátori: psichac, Moderátori
-
- Stály člen
- Príspevky: 110
- Dátum registrácie: 23 Máj 2015, 18:09
prepojenie dvoch atmega16 cez TWI a SPI
zdravím no
chcem spravit komunikaciu dvoch atmega16 cez TWI studoval som toto https://svetelektro.com/clanky/programu ... t-539.html
a no a ale aj tak neviem jak nato, ta knižnica co je tam napísana je len na master ? a ako by to vyzeral kod na strane slave
vlastne jednine čo chcem j toto: 1. atmega posiela 2 hodnoty premenných a druha ich príme a spracuje to je všetko, vysielat budem každých 100ms to je všetko
chcem spravit komunikaciu dvoch atmega16 cez TWI studoval som toto https://svetelektro.com/clanky/programu ... t-539.html
a no a ale aj tak neviem jak nato, ta knižnica co je tam napísana je len na master ? a ako by to vyzeral kod na strane slave
vlastne jednine čo chcem j toto: 1. atmega posiela 2 hodnoty premenných a druha ich príme a spracuje to je všetko, vysielat budem každých 100ms to je všetko
0
Naposledy upravil/-a fagi v 29 Jan 2018, 13:41, upravené celkom 2 krát.
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: prepojenie dvoch atemga16 cez TWI
Slave na MCU málokto rieši. Také úlohy ako chceš robiť sa najjednoduchšie riešia UARTom. Ale ten asi potrebuješ na komunikáciu s PC ako debugger. Potom je ďalší vhodný kandidát SPI a až úplne nakoniec TWI.
Funguje to tak že si nakonfiguruješ TWI ako slave, nastavíš adresu, povolíš prerušenie a čakáš. Keď príde správna adresa, tak ťa to preruší a podľa toho či sa číta alebo zapisuje treba zareagovať. Treba čítať DS.
Funguje to tak že si nakonfiguruješ TWI ako slave, nastavíš adresu, povolíš prerušenie a čakáš. Keď príde správna adresa, tak ťa to preruší a podľa toho či sa číta alebo zapisuje treba zareagovať. Treba čítať DS.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
-
- Stály člen
- Príspevky: 110
- Dátum registrácie: 23 Máj 2015, 18:09
Re: prepojenie dvoch atemga16 cez TWI
no ano uart mi treba na komunikaciu taže mas skusit SPI ?
no ano to aj ja viem len ten kod sa neviem vysomarit aky by to v tom vyzeralo na slave
no ano to aj ja viem len ten kod sa neviem vysomarit aky by to v tom vyzeralo na slave
0
-
- Stály člen
- Príspevky: 377
- Dátum registrácie: 06 Nov 2011, 22:19
- Vek: 32
-
- Stály člen
- Príspevky: 133
- Dátum registrácie: 29 Júl 2013, 21:16
- Vek: 31
-
- Stály člen
- Príspevky: 110
- Dátum registrácie: 23 Máj 2015, 18:09
- 5ko
- Power user
- Príspevky: 10148
- Dátum registrácie: 18 Feb 2010, 00:00
- Vek: 68
Re: prepojenie dvoch atemga16 cez TWI
OT- ďalší, čo má rýchlejšie prsty ako klávesnicu..... oprav si názov témy... čo je to atemga?
0
Lenivosť je matka pokroku.Lenivý človek rozmýšla,ako by si robotu uľahčil a tak niečo vynájde.
Ku každému čínskemu výrobku by mali pribaliť jedného číňana, aby som ho mohol nakopať do ....,ked sa to pokazí.
Ku každému čínskemu výrobku by mali pribaliť jedného číňana, aby som ho mohol nakopať do ....,ked sa to pokazí.
-
- Stály člen
- Príspevky: 110
- Dátum registrácie: 23 Máj 2015, 18:09
Re: prepojenie dvoch atmega16 cez TWI a SPI
takže po celkovom zvážení som sa rozhodol že namiesti I2C tie atmegy spojím SPI takže master https://svetelektro.com/clanky/programu ... t-528.html
strana funguje vysuela ale zas je otázka ako upravím tu knižnicu na slave ?
v hlavnom programe som dal na prerušenie od spi toto:
ISR(SPI_STC_vect){
SELECT();
data = ReadByteSPI();
DESELECT();
v subore spi.c som upravil funkciu init
void InitSPI(void){
SPI_PORT |= (1<<DD_MISO);
SPI_PORT &= ~(1<<DD_SS);
SPI_DDR &= ~ (1<<DD_MISO);
SPI_DDR |= (1<<DD_MOSI) | (1<<DD_SCK) | (1<<DD_SS);
//nastavenie funkcneho registra SPI (SPCR), CPHA a CPOL v log 0
SPCR |= (1<<SPE) | (1<<SPIE) | (1<<SPR1);
SPCR &= ~ (1<<DORD);
SPCR &= ~ (1<<MSTR);
}
a spi.h zmenil piny na megu16
void InitSPI(void);
void WriteByteSPI(unsigned char byte);
unsigned char ReadByteSPI(void);
#define DD_SS PB4
#define DD_MOSI PB5
#define DD_MISO PB6
#define DD_SCK PB7
#define SPI_DDR DDRB
#define SPI_PORT PORTB
#define SELECT() PORTB &= ~(1 << PB4) /* CS = L */
#define DESELECT() PORTB |= (1 << PB4) /* CS = H */
no a ale mi hadze chyby:
Warning 1 implicit declaration of function 'SELECT'
Warning 2 implicit declaration of function 'ReadByteSPI'
Warning 3 implicit declaration of function 'DESELECT'
Error 5 undefined reference to `SELECT'
Error 6 undefined reference to `DESELECT'
strana funguje vysuela ale zas je otázka ako upravím tu knižnicu na slave ?
v hlavnom programe som dal na prerušenie od spi toto:
ISR(SPI_STC_vect){
SELECT();
data = ReadByteSPI();
DESELECT();
v subore spi.c som upravil funkciu init
void InitSPI(void){
SPI_PORT |= (1<<DD_MISO);
SPI_PORT &= ~(1<<DD_SS);
SPI_DDR &= ~ (1<<DD_MISO);
SPI_DDR |= (1<<DD_MOSI) | (1<<DD_SCK) | (1<<DD_SS);
//nastavenie funkcneho registra SPI (SPCR), CPHA a CPOL v log 0
SPCR |= (1<<SPE) | (1<<SPIE) | (1<<SPR1);
SPCR &= ~ (1<<DORD);
SPCR &= ~ (1<<MSTR);
}
a spi.h zmenil piny na megu16
void InitSPI(void);
void WriteByteSPI(unsigned char byte);
unsigned char ReadByteSPI(void);
#define DD_SS PB4
#define DD_MOSI PB5
#define DD_MISO PB6
#define DD_SCK PB7
#define SPI_DDR DDRB
#define SPI_PORT PORTB
#define SELECT() PORTB &= ~(1 << PB4) /* CS = L */
#define DESELECT() PORTB |= (1 << PB4) /* CS = H */
no a ale mi hadze chyby:
Warning 1 implicit declaration of function 'SELECT'
Warning 2 implicit declaration of function 'ReadByteSPI'
Warning 3 implicit declaration of function 'DESELECT'
Error 5 undefined reference to `SELECT'
Error 6 undefined reference to `DESELECT'
0
-
- Stály člen
- Príspevky: 133
- Dátum registrácie: 29 Júl 2013, 21:16
- Vek: 31
Re: prepojenie dvoch atemga16 cez TWI
Ano HW uart mozes mat obsadeny a v tom pripade si naprogramujes SW uart na vhodne piny. Usetris vodice na rozdiel od SPI .fagi napísal:uart už mam obsadený pre daco ine
0
-
- Ultimate člen
- Príspevky: 3016
- Dátum registrácie: 11 Apr 2007, 00:00
- Bydlisko: ZA
Re: prepojenie dvoch atmega16 cez TWI a SPI
Skus namiesto tohoto
#define SELECT() PORTB &= ~(1 << PB4) /* CS = L */
dat toto
#define SELECT (PORTB &= ~(1 << PB4)) /* CS = L */
a podobne aj na DESELECT
#define SELECT() PORTB &= ~(1 << PB4) /* CS = L */
dat toto
#define SELECT (PORTB &= ~(1 << PB4)) /* CS = L */
a podobne aj na DESELECT
0
-
- Stály člen
- Príspevky: 110
- Dátum registrácie: 23 Máj 2015, 18:09
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: prepojenie dvoch atmega16 cez TWI a SPI
tie makrá sú korektné, asi si ich skôr použil než deklaroval.
Toto si asi prehliadol.
To je naivné akože povoliť SPI v prerušení od prijatia znaku cez SPI. Ako by si sa tam asi dostal, to by najprv musel prísť znak. Ak SS je v jednotke tak SPI v Slave nepracuje - neprijíma.
V prvom rade by to teda asi chcelo aby si si nakreslil schému ako to bude zapojené a potom poriadne prečítať DS alebo tú zawinovu stránku o SPI. Alebo googlit a googlit až nájdeš hotové riešenie.
Toto si asi prehliadol.
Ten tvoj slave nemá čo povolovať a zakazovať SS. Teda je to úplne zbytočné. Tým že si povolil SPI ako Slave tak je vo vstupnom režime a nejaké cvičenie s výstupnou hodnotou naň nemá vplyv. To si si predstavoval že sám sebe si to SS dá Slave do L? Kedy?b) v Slave móde:
Ak je rozhranie SPI nastavené na režim SLAVE, potom pin SS bude vždy vstupný. Pokiaľ privedieme pin SS do stavu log. 0, aktivujeme SPI rozhranie. V opačnom prípade je rozhranie SPI neaktívne a nie je možné prijať žiadne dáta.
To je naivné akože povoliť SPI v prerušení od prijatia znaku cez SPI. Ako by si sa tam asi dostal, to by najprv musel prísť znak. Ak SS je v jednotke tak SPI v Slave nepracuje - neprijíma.
V prvom rade by to teda asi chcelo aby si si nakreslil schému ako to bude zapojené a potom poriadne prečítať DS alebo tú zawinovu stránku o SPI. Alebo googlit a googlit až nájdeš hotové riešenie.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
-
- Podobné témy
- Odpovedí
- Zobrazení
- Posledný príspevok
-
- 28 Odpovedí
- 1760 Zobrazení
-
Posledný príspevok od používateľa Victorio
-
- 10 Odpovedí
- 4240 Zobrazení
-
Posledný príspevok od používateľa alexandr
-
- 12 Odpovedí
- 1029 Zobrazení
-
Posledný príspevok od používateľa dufffo
-
- 9 Odpovedí
- 1209 Zobrazení
-
Posledný príspevok od používateľa Edgar
-
- 22 Odpovedí
- 1125 Zobrazení
-
Posledný príspevok od používateľa Rafi87