Hallo, ich versuche gerade über einen Attiny85 mit Software SPI einen MAX7219 zum laufen zu bringen. Leider scheint der MAX7219 im Test Modus festzustecken. Ich habe zwei 7-Segment Anzeigen angeschlossen, 100nF Kondensator am Max7219 und 100nF Kondensator am Attiny85, 10k Pullup am Reset Pin und 10k zwischen ISet und VCC. Leider leuchten nur alle sieben Segmente der Anzeigen. Das passiert auch, wenn ich keine Daten übertrage, sondern nur die Pins initialisiere. Mag jemand mal drüber schauen? Hier mal der Code:
1 | #define F_CPU 8000000UL
|
2 | |
3 | #include <avr/io.h> |
4 | #include <util/delay.h> |
5 | |
6 | #define PIN_SS PB3
|
7 | #define PIN_CLK PB4
|
8 | #define PIN_MOSI PB1
|
9 | |
10 | #define SS_HIGH PORTB |= (1<<PIN_SS)
|
11 | #define SS_LOW PORTB &= ~(1<<PIN_SS)
|
12 | |
13 | #define NO_OP 0x00
|
14 | #define DECODE 0x09
|
15 | #define INTENSITY 0x0A
|
16 | #define SCAN_LIMIT 0x0B
|
17 | #define SHUTDOWN 0x0C
|
18 | #define DISPLAY_TEST 0x0F
|
19 | |
20 | #define DIGIT0 0x01
|
21 | #define DIGIT1 0x02
|
22 | |
23 | #define BLANK 0xF
|
24 | |
25 | void sendByte(char databyte) |
26 | {
|
27 | for (int i=1;i<=8;i++) |
28 | {
|
29 | if (databyte<127) |
30 | {
|
31 | PORTB |= (1<<PIN_MOSI); |
32 | }
|
33 | else
|
34 | {
|
35 | PORTB &= ~(1<<PIN_MOSI); |
36 | }
|
37 | PORTB |= (1<<PIN_CLK); |
38 | |
39 | databyte = databyte<<1; |
40 | |
41 | PORTB &= ~(1<<PIN_CLK); |
42 | }
|
43 | }
|
44 | |
45 | void writeData (char data_register, char data) |
46 | {
|
47 | SS_LOW; |
48 | sendByte(data_register); |
49 | sendByte(data); |
50 | SS_HIGH; |
51 | }
|
52 | |
53 | int main(void) |
54 | {
|
55 | DDRB = 0xFF; |
56 | PORTB &= ~(1<<PIN_CLK); |
57 | PORTB &= ~(1<<PIN_MOSI); |
58 | SS_HIGH; |
59 | writeData(DISPLAY_TEST,0); |
60 | writeData(DECODE,0xFF); |
61 | writeData(SCAN_LIMIT,1); |
62 | writeData(INTENSITY,8); |
63 | writeData(SHUTDOWN,1); |
64 | |
65 | while(1) |
66 | {
|
67 | writeData(DIGIT0,BLANK); |
68 | writeData(DIGIT1,BLANK); |
69 | }
|
70 | return 0; |
71 | }
|