Hallo, mein Programm soll einfach nur die LEDs von innen nach außen mit einem Schieberegister zum Leuchten bringen. In Visual Studio hat es auch ohne Probleme mit cout << "0"; und cout << "1" funktioniert (siehe Anhang). Also mein Programm in der IDE ist so gut wie identisch, unterschied ist halt nur das setzen der einzelnen Bits an PORTD. Ich versuche halt die Werte mit dem Umrechnen von Dezimal in Binär arbeiten zu lassen. Also irgendwo habe ich dort einen Fehler, den ich nicht sehe, bin für jede Hilfe dankbar.
1 | #define F_CPU 8000000UL
|
2 | #include <avr/io.h> |
3 | #include <util/delay.h> |
4 | |
5 | //74HC595
|
6 | #define sendValue PIND2 //Output zum Übergeben von High und Low ans Schieberegister, geht an Pin 14 Schieberegister
|
7 | #define saveValue PIND0 // SHCP PIN11 am 74HC595. Zum schieben und eingeben 1 Bits im Shiftregister
|
8 | #define saveData PIND1 // STCP PIN12 am 74HC595. Zum Ausgeben 1 Bytes.
|
9 | const uint8_t delay = 200; |
10 | |
11 | int main(void) |
12 | {
|
13 | uint8_t ausgabe[4] = {24, 36, 66, 129};//{00011000, 00100100, 01000010, 10000001} |
14 | uint8_t zahl, rest; |
15 | DDRD |= 0x07; //initialiseren des PORTDs als Ausgang an PD0 bis PD2 |
16 | PORTD |= (1<<sendValue);//PIN auf high |
17 | |
18 | while (1); |
19 | {
|
20 | for(uint8_t i = 0; i < 4; i++)//Erstmal möchte ich nur 4 Werte ausgeben ans SR |
21 | {
|
22 | zahl = ausgabe[i]; //hier speicher ich den iten Wert in zahl |
23 | for (uint8_t j = 0; j < 8; j++) |
24 | {
|
25 | rest = zahl%2; //zahl durch 2 geteilt sollte entweder 1 oder 0 als Rest ergeben |
26 | if(rest==1) //wenn 1 dann 1 ins Schieberegister schreiben |
27 | {
|
28 | PORTD |= (1<<saveValue); |
29 | PORTD &= ~(1<<saveValue); |
30 | }
|
31 | else //ansonsten 0 |
32 | {
|
33 | PORTD &= ~(1<<sendValue); |
34 | PORTD |= (1<<saveValue); |
35 | PORTD &= ~(1<<saveValue); |
36 | PORTD |= (1<<sendValue); |
37 | }
|
38 | zahl /= 2; //Die Zahl wird durch zwei geteilt, bis die For-Schleife 8mal gelaufen ist |
39 | }
|
40 | PORTD |= (1<<saveData); //Daten werden am Schieberegister ausgegeben |
41 | _delay_ms(delay); //mit Delay kann ich es sehen |
42 | PORTD &= ~(1<<saveData); |
43 | }
|
44 | }
|
45 | }
|