Mit einem Atmega32 will ich folgendes 32bit Schieberegister ansteuern...
http://www.allegromicro.com/en/Produ.../6833/6833.pdf
Ich benutze die SPI des Atmegas und habe folgende Pinbelegung:
Data In vom a6833 geht an MOSI, also PB5,
CLLock geht an SCK, also PB7,
STrobe geht an SS, also PB4,
OE geht dauerhaft an 5V.
Hier ist mein Code:
leider leuchten nich die angeschlossenen Led's die sollen, nur immer andere, ohne erkennbares MusterCode:#include <avr/io.h> #include <stdint.h> #ifndef F_CPU # define F_CPU 16000000L #endif #define SPIPORT PORTB #define SPIDDR DDRB #define CSPORT SPIPORT #define CSDDR DDRB #define MISO PB6 #define MOSI PB5 #define SCK PB7 #define CS PB4 #define SETSTROBE() (CSPORT) |= (1<<CS) #define CLRSTROBE() (CSPORT) &= ~(1<<CS) void spi_init(void) { SPIDDR = (1<<MOSI)|(1<<SCK); CSDDR = (1<<CS); SPIPORT = (1<<MISO); /* * SPI als Master * MSB zuerst * SCK Ruhepegel ist im Datenblatt LOW! SPCR = (1 << SPE) | (1 << MSTR); } void spi_put_byte( uint8_t data) { SPDR = data; while(!(SPCR & (1<<SPIF))) ; } void set_a6833(uint32_t data) { int8_t i; uint8_t tmp; for(i=3;i >= 0; i--){ tmp = (data >> (8*i)); spi_put_byte(tmp); } SETSTROBE(); asm volatile ("nop"); CLRSTROBE(); } int main(void) { spi_init(); set_a6833(0x5500ff0fL); for(;;) ; return 0; }
Kann mal jemand rübergucken und mir evtl.nen Tip geben?
MFG
Kons







Zitieren

Lesezeichen