Hallo, Ich möchte 4 Taster an Port 4[2..5] einlesen und per Display deren Zustände anzeigen... die Taster verwenden die internen Pull-Up's. Jedoch gibt's 2 Probleme: 1. entgegen allen anderen Pins ist Port C4 nicht auf 1 sonder auf 0. 2. Es kommt immer 0x00 zurück... obwohl standardmäßig alle Pins (außer C4) auf 1 sind... Könnt ihr es nachvollizehen?
1 | #include <avr/io.h> |
2 | #define F_CPU 8000000UL
|
3 | #include <util/delay.h> |
4 | |
5 | uint8_t LeseTaster() |
6 | {
|
7 | uint8_t eing=PINC; |
8 | eing = eing&0x3C; |
9 | eing = eing<<2; |
10 | return eing; |
11 | }
|
12 | |
13 | void ResetRS() |
14 | {
|
15 | PORTC &=0x7F; |
16 | }
|
17 | |
18 | void SetRS() |
19 | {
|
20 | PORTC |=0x80; |
21 | }
|
22 | |
23 | void SetE() |
24 | {
|
25 | PORTC |=0x40; |
26 | }
|
27 | |
28 | void ResetE() |
29 | {
|
30 | PORTC &=0xBF; |
31 | }
|
32 | |
33 | void SchreibeReg(uint8_t reg) |
34 | {
|
35 | ResetRS(); |
36 | _delay_ms(1); |
37 | PORTA = reg; |
38 | _delay_ms(1); |
39 | SetE(); |
40 | _delay_ms(1); |
41 | ResetE(); |
42 | }
|
43 | |
44 | void SchreibeDat(uint8_t dat) |
45 | {
|
46 | SetRS(); |
47 | _delay_ms(1); |
48 | PORTA = dat; |
49 | _delay_ms(1); |
50 | SetE(); |
51 | _delay_ms(1); |
52 | ResetE(); |
53 | }
|
54 | |
55 | void InitDisplay() |
56 | {
|
57 | SchreibeReg(0x30); |
58 | _delay_ms(15); |
59 | SchreibeReg(0x30); |
60 | _delay_ms(5); |
61 | SchreibeReg(0x30); |
62 | SchreibeReg(0x38); |
63 | SchreibeReg(0x0F); |
64 | SchreibeReg(0x01); |
65 | SchreibeReg(0x07); |
66 | }
|
67 | |
68 | int main(void) |
69 | {
|
70 | /* Replace with your application code */
|
71 | int a=0; |
72 | DDRA = 0xFF; //Port A aus Ausgang für Displaydaten |
73 | DDRB = DDRB|0x1C; //Ausgang für Mot-En |
74 | DDRB = DDRB&0xFC; //Eingang für |
75 | DDRC = 0xC2; //Port B Ausgang für RS+E, eingang für SW0..3 und LB-Detektiert, Ausgang für USER-LED |
76 | DDRD = 0xF2; // Relais, Schütz, Sig, Lüfter, Kontakt, Notaus, TXD, RXD |
77 | |
78 | InitDisplay(); |
79 | |
80 | while (1) |
81 | {
|
82 | a += 1; |
83 | _delay_ms(500); |
84 | SchreibeDat(0x30+LeseTaster()); |
85 | _delay_ms(100); |
86 | _delay_ms(100); |
87 | SchreibeDat('H'); |
88 | }
|
89 | }
|
Vielen Dank für eure Kommenrate...