Hallo,
ich habe vor, eine kleine Funkuhr mit einem ATMega8 aufzubauen und muss
dazu ein Signal vom DCF Empfaenger einlesen. Nach vielen erfolglosen
Versuchen habe ich dann mal das ganze Teil auf ein Minimum
zusammengeschrumpft und statt Empfaenger und Display mal einen Taster
und eine Status-LED angeschlossen.
PortD7 => Statusled mit Vorwiderstand gegen Masse.
PortC5 => Taster gegen Masse
Bisher ist es so, dass der Taster-Pin high ist (mit Oszilloskop
gemessen) solange der Button nicht gedrueckt ist und low wird, wenn er
gedrueckt ist. Trotzdem blinkt die LED weiter und erreicht niemals den
"else"-Zweig.
Vielleicht hat ja einer von Euch eine Idee woran das liegen koennte...
Gruss Tido
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 |
|
4 | #define x_PORTD (*(unsigned char*) 0x32)
|
5 | #define x_PORTC (*(unsigned char*) 0x35)
|
6 | #define x_DDRD (*(unsigned char*) 0x31)
|
7 | #define x_DDRC (*(unsigned char*) 0x34)
|
8 |
|
9 |
|
10 | int main( void ) {
|
11 |
|
12 | DDRD |= 0x80; // set led-port to output
|
13 | DDRC &= ~0x20; // set button port as input
|
14 | PORTC |= 0x20; // enable pull-up on button port
|
15 |
|
16 | while( 1 ) { // forever
|
17 |
|
18 | if( PORTC & 0x20 ) // if button-port == high ...
|
19 | PORTD ^= 0x80; // ...toggle led
|
20 | else // if button-port pulled to ground ...
|
21 | while( 1 ); // ...stop blinking
|
22 |
|
23 | _delay_ms( 100 );
|
24 |
|
25 | }
|
26 |
|
27 | }
|