Hallo,
Ich habe mit einem Atmega16 eine kleine Schaltung zusammengebastelt,
welche auch eine Multiplex-/Segment Anzeige beinhaltet.
Leider steuert mir der Amtega 2 Ports nicht an. Da ich den Atmega auch
schon ausgetauscht habe, denke ich, dass es ein Softwarefehler ist.
PC2 und PC3 werden leider nicht angesteuert PC0 und PC1 funktionieren
jedoch einwandfrei.
Hier mal der Code:
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 |
|
4 | int main (void);
|
5 |
|
6 | void delay_ms(uint16_t ms)
|
7 | {
|
8 | for(uint16_t t=0; t<=ms ; t++)
|
9 | {
|
10 | _delay_ms(1);
|
11 | }
|
12 | }
|
13 |
|
14 | const int8_t numbers[1] =
|
15 | {
|
16 | 0b000000000,
|
17 | };
|
18 |
|
19 | void digit (uint8_t wert, uint8_t pin)
|
20 | {
|
21 | PORTC |= (1 << PC0) | (1 << PC1) | (1 << PC2) | (1 << PC3);
|
22 |
|
23 | PORTB = numbers[wert];
|
24 | PORTC &= ~(1 << pin);
|
25 | delay_ms(100);
|
26 | }
|
27 |
|
28 | int main()
|
29 | {
|
30 | DDRB = 0xFF;
|
31 | DDRC |= (1 << DDC0) | (1 << DDC1) | (1 << DDC2) | (1 << DDC3);
|
32 | PORTC |= (1 << PC0) | (1 << PC1) | (1 << PC2) | (1 << PC3);
|
33 |
|
34 | while(1)
|
35 | {
|
36 | digit(1, PC0);
|
37 | digit(1, PC1);
|
38 | digit(1, PC2);
|
39 | digit(1, PC3);
|
40 | }
|
41 | return 0;
|
42 | }
|
Hoffe ihr könnt mir helfen, Daniel