Wattengård Skrevet 12. juli 2007 Del Skrevet 12. juli 2007 Jeg går med et lite prosjekt i hodet mitt som innebærer en kommunikasjonslenke som ser ca slik ut: PC --> ATmega (MASTER) --> ATtiny (SLAVE1) --> ATtiny (SLAVE2) --> osv. PC skal kommunisere med ATmega via USB (den biten skal jeg klare ). Deretter skal ATmega chipen "kommunisere" (det er diktatur ) med ATtiny brikkene med følgende enkle protokoll (ATtiny-brikkene skal bare sitte å ta imot) <adresse:1byte><verdi1:1byte><verdi2:1byte><verdi3:1byte> Når en ATtiny-brikke mottar en slik sekvens, skal den sjekke adressen, hvis adressen stemmer med seg selv skal den ta til seg verdiene og deretter sende sekvensen videre (flere ATtiny-brikker kan ha samme adresse). Det jeg ikke har funnet helt ut er hvordan jeg skal få brikkene til å kommunisere med hverandre, har sett litt på SPI og SPI daisy chaining, men ikke helt fått grep runt hvordan det fungerer. Lurer også litt på hvordan jeg skal få til adresseringen, tenkte på å bruke en 8-veis dipswitch men den vil jo da benytte 8 I/O på tiny-brikken. Et alternativ er jo å programmere hver brikke med sin egen adresse, men dette er jo lite dynamisk Nå skal det være sagt at jeg har foreløpig ingen som helst peiling på AVR programmering, men litt av poenget med å lage dette er at jeg skal lære meg det Men først må jeg få selve logikken inn i hodet mitt -C- Lenke til kommentar
tingo Skrevet 12. juli 2007 Del Skrevet 12. juli 2007 Det jeg ikke har funnet helt ut er hvordan jeg skal få brikkene til å kommunisere med hverandre, har sett litt på SPI og SPI daisy chaining, men ikke helt fått grep runt hvordan det fungerer. 9058151[/snapback] Og du har selvfølgelig sett på SPI beskrivelsen på Wikipedia, uten at det hjalp noe? Og jeg antar at I2C heller ikke er aktuell? Lenke til kommentar
Wattengård Skrevet 12. juli 2007 Forfatter Del Skrevet 12. juli 2007 I2C har jeg også sett litt på. Lurer på om den kan være enklere å implementere enn spi? -C- Lenke til kommentar
Dr_VingTor Skrevet 12. juli 2007 Del Skrevet 12. juli 2007 Du bør absolutt bruke TWI interfacet på AVRene (I2C). Hvis de ATtiny chipenne du har tenkt å bruke har ADC kan du bruke to motstander (eller en pot) og en ADC linje til å generere addresse. Du monterer to motstander i en spenningsdeler mellom Vcc og Vgnd, spenningen mellom motstandene måles av ADCen og en oppslagstabell brukes for å fastsette hvilken adresse chipen skal ha. din Master bør også ha en addresse, og alle vill sende til alle, men adressen vil avgjøre om noe skal utføres eller ikke. Lenke til kommentar
Wattengård Skrevet 12. juli 2007 Forfatter Del Skrevet 12. juli 2007 Hvis jeg bruker TWI eller SPI-lenket så trenger kun master å sende noe som helst, for da vil vel alle få det, så reagerer de bare på det ut ifra om adressa stemmer eller ikke. Trenger ikke noen form for kvittering på utført operasjon elns. -C- Lenke til kommentar
Dr_VingTor Skrevet 12. juli 2007 Del Skrevet 12. juli 2007 (endret) SPI er best egnet når bare to enheter skal snakke sammen (siden slaven/masteren sender og mottat samtidig). Å koble flere SPI enheter i serie er jo mulig, men det er ikke en god løsning. vil anta at koden blir mer omfattende ved en slik løsning med spi. trur TWI vil være en del enklere med tanke på å bygge ut til flere enheter og at det vil gi en enklere kode. update: ble litt feil det der; glemte av chip select linja... de står jo ikke i serie (mhm lurer på om det hadde vært mulig...), men slik som på den wiki-siden. Men mener fremdeles at TWI er bedre. grunnen er at SPI også brukes til å programmere kretsene når de står i systemet, noe jeg alltid benytter meg av. I tillegg bruker en del av kretsene MISO og MOSI til JTAG-debugging. Du bør se litt nærmere på de to funksjonene før du bestemmer deg hvordan/om du vil bruke SPI. Endret 13. juli 2007 av Dr_VingTor Lenke til kommentar
hce Skrevet 13. juli 2007 Del Skrevet 13. juli 2007 Sett hver av de to slavene på forskjellige chip selects og aktiver hver enkelt chip select avhengig av hvilken slave du ønsker prate med. krever ikke mange pinner eller komplisert kode (CLK, MOSI, MISO, CS0 og CS1). CS0 og CS1 kan være hvilken som helst ledig pinne du har tilgjengelig siden du har tenkt å kjøre ATmega'en i master mode. På slavesiden benytter du den dedikerte chip select pinnen så du kan gjøre alt med bruk av interrupts. Antar du har en ATUSB siden du ser på USB-delen som triviell Lykke til med prosjektet, Atmel har mye demokode liggende på web: http://www.atmel.com/dyn/products/app_note...p?family_id=607 Søk etter SPI, f.eks. appnote AVR151 Setup and use of the SPI Det er også andre appnotes om I2C (TWI) om du velger å gå den veien. I2C er noe herk å bitbange, så anbefaler å velge devicer som har dette i hardware. Lenke til kommentar
Harkonnen Skrevet 18. juli 2007 Del Skrevet 18. juli 2007 Har du vurdert å bruke MPCM ( Multi processor communications mode ) ? (Vet ikke om attiny støtter dette) Lenke til kommentar
gamleerik Skrevet 18. juli 2007 Del Skrevet 18. juli 2007 (endret) Dette kan enkelt løses med ren seriell TTL kommunikasjon. Trengs bare to pins per kommuniserende enhet, en for TX, en for RX. Dette har jeg gjort mange ganger, og er ikke noe problem. Hvis du ikke har noe særlig pins til overs, vil jeg heller gått for SPI eller I2C... edit: sorry, leste ikke hele posten din, ser du vil ha en adresseringsløsning, og da funker ikke dette... Endret 18. juli 2007 av gamleerik Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå