Hallo zusammen,
nachdem ich mir die Anleitung im Forum durchgelesen habe, hab ich mich
vorhin mal an ein Schieberegister gewagt.
Leider blinken die angeschlossen Leds nur wild. Eigentlich sollten zwei
der vier angeschlossenen Leds leuchten und zwei nicht.
Hier der Code:
1 | #define F_CPU 16000000UL
|
2 |
|
3 | #include <avr/io.h>
|
4 | #include <util/delay.h>
|
5 |
|
6 | #define SCK PB1
|
7 | #define RCK PB2
|
8 | #define SER PB3
|
9 |
|
10 |
|
11 | int p_RCK (void)
|
12 | {
|
13 | PORTB &= ~(1<<RCK);
|
14 | PORTB |= (1<<RCK);
|
15 | _delay_us(1);
|
16 | PORTB &= ~(1<<RCK);
|
17 | }
|
18 |
|
19 | int p_SCK (void)
|
20 | {
|
21 | PORTB &= ~(1<<SCK);
|
22 | PORTB |= (1<<SCK);
|
23 | _delay_us(1);
|
24 | PORTB &= ~(1<<SCK);
|
25 | }
|
26 |
|
27 | int s_SER (bool x)
|
28 | {
|
29 | if (x==0)
|
30 | {
|
31 | PORTB &= ~(1<<SER);
|
32 | }
|
33 |
|
34 | if (x==1)
|
35 | {
|
36 | PORTB |= (1<<SER);
|
37 | }
|
38 | }
|
39 |
|
40 | int main(void)
|
41 | {
|
42 | DDRB |=(1<<SCK);
|
43 | DDRB |=(1<<RCK);
|
44 | DDRB |=(1<<SER);
|
45 |
|
46 |
|
47 | while (1)
|
48 | {
|
49 | s_SER(1);
|
50 |
|
51 | p_SCK();
|
52 | p_SCK();
|
53 |
|
54 | s_SER(0);
|
55 |
|
56 | p_SCK();
|
57 | p_SCK();
|
58 |
|
59 | p_RCK();
|
60 |
|
61 | _delay_ms(1000);
|
62 |
|
63 | }
|
64 | }
|
Des weiteren war ich mir unsicher wie lange der Impuls sein muss.
Über Hilfe würde ich mich sehr freuen.
mfG