Hallo! Ich bin noch relativ neu in der Welt der Mikrocontroller und habe schon ein wundersames Problem, welches ich nicht verstehe. Im folgenden Quelltext sollen die Ausgänge PB0 und PB3 auf High gesetzt werden, sobald am Pin PB2 ein Signal kommt und danach für 10 Sekunden in diesem Zustand bleiben. Dabei wird am Ausgang PB3 immer wieder zwischen Low und High gewechselt, um ein blinken an den angeschlossenen LEDs zu erzeugen. Das ganze ist auf einen ATtiny13A-SSH programmiert. PB2 ist gegen VCC geschaltet und dazwischen ist ein Schalter. Jetzt zum Problem: Sobald man das Netzteil einsteckt, werden PB0 und PB3 auf High gesetzt. Da diese über Widerstand und LEDs gegen GND geschaltet sind, fangen die LEDs an zu leuchten bzw. zu blinken. Dies geschieht jedoch ohne dass der Schalter zwischen VCC und PB2 geschlossen wurde. Folglich erhält der Eingang kein Signal. Warum wird dann in den if-Teil gesprungen und PB0 und PB3 auf High gesetzt? Liebe Grüße!
1 | #include <avr/io.h> |
2 | #include <util/delay.h> |
3 | |
4 | int main(void) |
5 | {
|
6 | DDRB |= (1<<PB3)|(1<<PB0); //PB0, PB3 auf Ausgang |
7 | DDRB &=~ (1<<PB2); //PB2 auf Eingang |
8 | PORTB &=~ ((1<<PB3)|(1<<PB0)); //PB0, PB3 auf Low |
9 | while(1) |
10 | {
|
11 | if(PINB&(1<<PB2)) |
12 | {
|
13 | for(uint8_t i=0; i< 10; i++) // 10 mal = 10 sec |
14 | {
|
15 | PORTB |= (1<<PB3)|(1<<PB0); //PB0, PB3 auf High --> LEDs leuchten |
16 | _delay_ms(500); |
17 | PORTB &=~ (1<<PB3); //PB3 auf Low für Blinken |
18 | _delay_ms(500); |
19 | }
|
20 | |
21 | }
|
22 | else
|
23 | {
|
24 | PORTB &=~ (1<<PB0); |
25 | }
|
26 | |
27 | //TODO:: Please write your application code
|
28 | }
|
29 | }
|