Hallo ihr,
ich versuche gerade die ersten Schritte in Richtung LED-Matrix zu
machen. Jedoch scheitere ich schon bei den Grundlagen.
Ich will lediglich ein Bitmuster per Hardware SPI-Modul meines Atmega
328P an ein 74HC595 Schieberegister senden.
Was passiert ist jedoch, dass ich an keinem Ausgang des Schieberegisters
einen High Pegel feststellen kann. Lediglich der MOSI Pin des AVR hat
ständig 5V(Was ja eigentlich auch nicht sein sollte). Gemessen mit
meinem Multimeter, da ich nur ein analoges Oszi habe.
Bin total ratlos wo der Fehler liegt. Ich habe die Schaltung schon auf
zwei verschiedenen Breadboards und mit zwei Verschiedenen Registern
getestet, jedoch mit dem gleichen Ergebnis.
Ich häng hier mal meinen Code an, wäre toll wenn jemandem ein Fehler
auffällt.
Danke schonmal!! :)
1 |
|
2 | #include <avr/io.h>
|
3 |
|
4 | #define F_CPU 16000000UL
|
5 |
|
6 | #define output_DDR DDRB
|
7 | #define output_port PORTB
|
8 |
|
9 | #define data_pin PB3
|
10 | #define clock PB5
|
11 | #define latch PB2
|
12 |
|
13 | void output_init(void){
|
14 | output_DDR |= ((1<<data_pin) | (1<<clock) | (1<<latch));
|
15 | //Pins als Ausgang und Low schalten
|
16 | output_port &= ~((1<<data_pin) | (1<<clock) | (1<<latch));
|
17 | }
|
18 |
|
19 | void SPI_init(void){
|
20 | SPCR = (1<<SPE) | (1<<MSTR);
|
21 | //SPI in Master Mode aktivieren
|
22 | }
|
23 |
|
24 | int main(void)
|
25 | {
|
26 | output_init();
|
27 | SPI_init();
|
28 | //output_port &= ~(1<<latch); //Latch low ziehen um SPI Kommunikation zu starten
|
29 | SPDR=0b10101010; //Daten an Schiebereister senden
|
30 | while(!(SPSR & (1<<SPIF))); //Warten bis Übertragung beendet ist
|
31 |
|
32 | output_port |= (1<<latch);
|
33 | output_port &= ~(1<<latch); //Latch togglen um Daten auf Ausgänge zu übernehmen
|
34 |
|
35 | while(1)
|
36 | {
|
37 | }
|
38 | }
|