Hallo nach einiger vergeblicher Internet Recherche frag' ich doch mal hier im Forum - wie kann man die SPI schnittstelle in C realisieren??? Ich hab' zwar auf www.avrfreaks.net zahlreiche pdf's zu dem Thema gefunden, aber irgendwie sind die alle ein bisschen kompliziert..... Freu mich über eure Antworten!!! mfg Christian
Hallo Christian, Hier sind zwei C-Programme mit denen du zwei Atmels miteinander komunizieren lassn kannst. Die Tasten im Master-Prog sind zur Kontrolle. Ueber Portc kannst du dir die zurueckgesendeten Daten anschauen. Gruss Michael // MASTER #include <io.h> int main(void) { unsigned int dataout; outp(0xFF, DDRA); //Port A als Ausgang outp(0xFF, DDRC); //Port C als Ausgang outp(0x00, DDRD); //Port D als Eingang outp(0x11, PORTA); //11 Fuer definierten Zustand outp(0x11, PORTC); //11 Fuer definierten Zustand outp(0X00, SPDR); outp(0x70, PORTB); //01110000 outp(0xB0, DDRB); //1011 0000 outp(0x50, SPCR); //0101 0000 sbi(PORTB, 4); while ((inp(PIND)&(0x01))==0); cbi(PORTB, 4); dataout=0xFF; outp(dataout, SPDR); outp(dataout, PORTA); while(bit_is_clear(SPSR, SPIF)); outp((inp(SPDR)), PORTC); cbi(SPSR, 7); while ((inp(PIND)&(0x02))==0); dataout=0x55; outp(dataout, SPDR); outp(dataout, PORTA); while(bit_is_clear(SPSR, SPIF)); outp((inp(SPDR)), PORTC); //cbi(SPSR, 7); while ((inp(PIND)&(0x04))==0); dataout=0xaa; outp(dataout, SPDR); outp(dataout, PORTA); while(bit_is_clear(SPSR, SPIF)); outp((inp(SPDR)), PORTC); //cbi(SPSR, 7); while ((inp(PIND)&(0x08))==0); dataout=0xcc; outp(dataout, SPDR); outp(dataout, PORTA); while(bit_is_clear(SPSR, SPIF)); outp((inp(SPDR)), PORTC); //cbi(SPSR, 7); return 0; } //Slave #include <io.h> int main(void) { outp(0xFF, DDRC); outp(0x00, PORTC); outp(0x00, SPDR); outp(0x40, SPCR); //0100 0000 outp(0x40, DDRB); //0100 0000 while(1) { while(bit_is_clear(SPSR, SPIF)); outp((inp(SPDR)), PORTC); cbi(SPSR, 7); } return 0; }
Hallo Michael vielen lieben Dank für deine Antwort!!!!! Ich hoffe es funktioniert bei mir auch bald.... Viele Grüße Christian
Halli Hallo ich möchte wegen den Speicher ressourcen gerne zwei Mega 16 oder 32 miteinander kommunizieren lassen - ich benötige allerdings nicht so viele Pins , jedoch könnte es sein, dass der interne 10bit A/D Wandler nicht ausreicht --> eventuell brauch ich die SPI schnittstelle noch, damit mein Slave Controller die Daten von dem AD Wandler holen kann - dann kann aber doch mein Master nicht mehr mit dem Slave reden, oder??? Da liegt es doch irgendwie nahe eine prallele Kommunikation über einen ganzen Port und ein paar Steuerleitungen jedes MC's aufzubuen - oder spricht da etwas dagegen???? Vielen Dank für eure Antworten! Christian
Seltsamer Code, wass soll denn das cbi(SPSR,7) ??? SPSR kann nur gelesen werden. Beste Grüsse, Peter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.