Danke Markus für Deine Antwort.
Aber es bleibt dennoch eine Unklarheit im Raum:
Ich habe nirgendwo den /SS auf LOW gesetzt. Warum funktioniert mein Programm? Alle Werte, die ich vom MEGA8 auf die beiden 74HCT595 schicke, werden bitgenau angezeigt. Immer!
Jemand muss doch den /SS auf LOW setzen, damit der 74HCT595 die Ausgänge freigeben, oder?
Hier mein kleiners Testprogramm, OHNE LOW für /SS!!
Code:// SPI mit 74HCT595 2 Bytes an 2 ICs 74HCT595 #define F_CPU 12000000UL #include <stdio.h> #include <avr/io.h> #include <avr/interrupt.h> volatile uint8_t data1=3, data2=3, count; //############################################################################ void spi_shift(uint8_t data1, uint8_t data2) { SPDR = data1; //=== Start transmission while(!(SPSR & (1<<SPIF))); // warten, bis Übertragung zuende ist SPDR=data2; while(!(SPSR & (1<<SPIF))); // warten, bis Übertragung zuende ist PORTB=1<<PB2;// Store } //############################################################################ void HC595Init() { DDRB = (1<<DDB2)|(1<<DDB3)|(1<<DDB5); // DDB2 ist SS DDB3 ist MOSI, DDB5 ist SCK SPCR |= (1<<SPE) | (1<<MSTR) | (1<<CPHA) | (1<<CPOL) | (1<<SPR0);// enable | master | CPHA | 1/16clk } //############################################################################ int main(void) { HC595Init(); while(1) { spi_shift(data1,data2); } }







Zitieren


Lesezeichen