Hallo zusammen
Hab grad nen sehr merkwürdiges Problem, arbeite grad mit nem Tiny25, war
grad nen bissl am rumspielen mit C, dabei bin ich auf folgendes Phänomen
gestoßen: Dieses Programm funktioniert wie es soll:
(Bei Erde an PB3 geht PB4 aus)
#include <avr/io.h>
int main (void) {
DDRB = 0b00010000;
PORTB = 0b00001000;
while ( PINB & (1<<PINB3) ) {
PORTB = 0b00011000;
}
PORTB = 0b00001000;
while(1) {
/* "leere" Schleife*/;
}
/* wird nie erreicht */
return 0;
}
Dieses jedoch nicht:
(Bei Erde an PB3 geht PB4 an)
#include <avr/io.h>
int main (void) {
DDRB = 0b00010000;
PORTB = 0b00001000;
while ( PINB & (1<<PINB3) ) {
PORTB = 0b00001000;
}
PORTB = 0b00011000;
while(1) {
/* "leere" Schleife*/;
}
/* wird nie erreicht */
return 0;
}
Hier ist von Anfang an PB4 an, das soll aber erst passieren, wenn die
Bedingung in der Schleife falsch wird.
Jemand ne Idee?
1 | #include <avr/io.h> |
2 | |
3 | int main (void) |
4 | {
|
5 | // Hardware initialisieren. Reihenfolge bzgl. Hardwareaufbau beachten
|
6 | PORTB = (1<<PINB4) | (1<<PINB3); |
7 | // PB4 HIGH, d.h. low active LED AUS
|
8 | // PB3 interner Pullup aktiviert
|
9 | DDRB = (1<<PINB4); // PB4 Output, PB3 Input |
10 | |
11 | // unendliche Arbeitsschleife
|
12 | while(1) { |
13 | while ( PINB & (1<<PINB3) ) |
14 | {
|
15 | // Solange PB3 NICHT an GND hängt
|
16 | PORTB = (0<<PINB4) | (1<<PINB3); // PB4 LOW, d.h. low active LED AN |
17 | }
|
18 | PORTB = (1<<PINB4) | (1<<PINB3); // PB4 HIGH, d.h. low active LED AUS |
19 | }
|
20 | |
21 | /* wird nie erreicht */
|
22 | return 0; |
23 | }
|
Hallo, das kann passieren, wenn beim Einschalten der Controller schon los läuft, während die Versorgungsspannung noch nicht ausreicht, um HIGH an PB4 zu erkennen. Bau eine kleine Startup-Verzögerung ein! Grüße, Peter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.